grafana世界地图面板展示访问来源需三步:采集带地理信息的ip数据、接入mysql并构造含time/latitude/longitude/host/value的查询、配置worldmap插件并替换为高德地图瓦片;国内必须切换地图源,否则白屏。

要在 Grafana 中配置世界地图面板展示访问来源(比如网站或服务的用户地理分布),核心是三步:采集带地理位置的 IP 数据、接入 MySQL(或其他支持的数据源)、用 WorldMap 插件渲染。国内环境尤其要注意地图瓦片服务的可用性,否则地图会白屏。
一、准备带地理信息的访问日志数据
最常见做法是在 Nginx 日志中嵌入国家/城市信息。需提前编译或启用 GeoIP2 模块(推荐,比旧版 GeoIP 更准),并在 nginx.conf 的 log_format 中加入:
-
$geoip2_data_country_code(如 CN、US) -
$geoip2_data_city_name(如 Beijing) -
$geoip2_data_latitude和$geoip2_data_longitude(用于 coordinates 方式)
日志写入后,用 Logstash 或脚本将日志解析并写入 MySQL 表,例如:access_log 表结构建议含:time(datetime)、country_code、city、latitude、longitude、count(可聚合后的访问次数)。
二、在 MySQL 中构造适配 WorldMap 的查询
WorldMap 插件支持两种坐标模式,推荐用 coordinates(更直观可控):
- SQL 查询必须返回字段:
time(可固定为NOW())、latitude、longitude、host(显示名称,如城市名)、value(影响气泡大小,常用访问量) - 示例语句:
注意:value 字段不能为 NULL;若用 geohash 方式,则需先将经纬度转为 geohash 字符串(可用 MySQL 函数或应用层处理)。
三、配置 WorldMap 面板并替换为高德地图(国内必需)
默认 WorldMap 使用 OpenStreetMap 瓦片,在国内大概率失败。必须手动切换为高德:
- 编辑面板 → Options → Map options → Map Server → 选 “Custom”
- Map URL 填:
https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z} - Subdomains 填:
1,2,3,4 - Min zoom 设为 2,Max zoom 设为 12,Initial zoom 推荐 2–3(全球视角)
- Field Mapping 选 “Coordinates”,对应字段按 SQL 返回列名填写(latitude / longitude / host / value)
保存后刷新,地图应正常加载,气泡按城市位置和访问量大小显示。
四、优化与验证要点
避免常见卡点:
- MySQL 查询结果行数不宜过多(建议单次 ≤ 500 条),否则渲染卡顿;可通过时间范围或 TOP N 聚合控制
- 确保 latitude 在 [-90, 90]、longitude 在 [-180, 180] 范围内,异常值会导致气泡错位
- 如果只看到灰色网格,优先检查浏览器开发者工具 Network 标签页,看高德瓦片请求是否 200;若失败,确认 URL 中无空格、{s} {x} {y} {z} 占位符格式正确
- 想按国家聚合?可在 SQL 中用
country_code替代city,再配合 country name 映射表提升可读性











