当前使用云平台的CLB,想使用Grafana WorldMap做展示,日志中有IP字段
1、定时到clb拉取IP信息
2、通过全球IP库解析出经纬度和城市存入数据库
3、grafana展示
根据IP获取信息,用于生成world map数据
全球IP库下载
https://github.com/wp-statistics/GeoLite2-City
https://raw.githubusercontent.com/wp-statistics/GeoLite2-City/master/GeoLite2-City.mmdb.gz
归属地查询
https://www.gaizaoren.com/?p=2448
0、编写示例prom exporter
package main
import (
"fmt"
"net/http"
)
func HelloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "# HELP userip 用户IP分布")
fmt.Fprintln(w, "# TYPE userip gauge")
fmt.Fprintln(w, "userip{latitude=\"40.190632\",longitude=\"116.412144\",name=\"北京市\"} 20")
fmt.Fprintln(w, "userip{latitude=\"31.2322758\",longitude=\"121.4692071\",name=\"上海市\"} 33")
fmt.Fprintln(w, "userip{latitude=\"30.6667\",longitude=\"104.0667\",name=\"成都市\"} 10")
}
func main() {
http.HandleFunc("/metrics", HelloHandler)
http.ListenAndServe(":8000", nil)
}
1、格式化数据,用于prometheus拉数据
# HELP userip 用户IP分布
# TYPE userip gauge
userip{latitude="40.190632",longitude="116.412144",name="北京市"} 20
userip{latitude="31.2322758",longitude="121.4692071",name="上海市"} 33
2、配置world map
参考:https://blog.csdn.net/weixin_29057619/article/details/111316746
3、mac上执行命令修改国外地址
sed -i “_bak” ‘s/https://cartodb-basemaps{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png/http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png/’
grafana-worldmap-panel/src/worldmap.ts
grafana-worldmap-panel/dist/module.js
grafana-worldmap-panel/dist/module.js.map
sed -i “_bak” ‘s/https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png/http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png/’
grafana-worldmap-panel/src/worldmap.ts
grafana-worldmap-panel/dist/module.js
grafana-worldmap-panel/dist/module.js.map
都弄好,测试部分图片还是有可能显示不出来,因为worldmap中的图片是从用户浏览器发出的。。。大部分都可以了