Worldmap使用文档
一、 安装
在安装grafana服务器运行:
grafana-cli plugins install grafana-worldmap-panel
然后重启服务:service grafana-server restart
二、 使用
Worldmap可以以Mysql做为数据源。为了使Worldmap可以使用Mysql数据源,首先需要在Grafana的data source中添加mysql连接串。
选择Mysql:
配置好连接信息即可:
2.1 Mysql侧设置
要让worldmap能够基于mysql的数据在地图上绘制出特定的坐标点,需要定义格式特定的表。
建立表:
CREATE TABLE `worldmap_latlng` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lat` FLOAT NOT NULL,
`lng` FLOAT NOT NULL,
`name` VARCHAR(20) NOT NULL,
`value` FLOAT NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
对于每一条记录,worldmap会基于记录中的经纬度绘制一个特定半径、带标注信息的圆。
其中value表示在地图上显示的这个圈圈的半径多大,value越大,半径越大。
lat和lng是这个记录需要绘制在地图的什么位置。
name是给这个点打上的label,当鼠标移到这个圈圈的时候,就会显示这个字段的值。
timestamp是时间戳,它的类型是timestamp,而不是datetime!!!
插入测试数据:
INSERT INTO `worldmap_latlng`
(`lat`,
`lng`,
`name`,
`value`,
`timestamp`)
VALUES
(39.234,
116.3234,
'Beijing',
1.0,
now());
INSERT INTO `testdb`.`worldmap_latlng`
(`lat`,
`lng`,
`name`,
`value`,
`timestamp`)
VALUES
(34.234,
121.3234,
'Shanghai',
3.0,
now());
INSERT INTO `worldmap_latlng`
(`lat`,
`lng`,
`name`,
`value`,
`timestamp`)
VALUES
(39.234,
121.3234,
'Tianjing',
5.23,
now());
2.2 worldmap Panel构建查询
首先新建panel:
选择Worldmap Panel.
先构建查询语句:
选择Query的数据源为刚刚引入的Mysql数据库。
把查询结果Format as设置为Table,同时点击“Edit SQL”直接编辑SQL。
输入以下SQL语句:表示从数据源中select数据出来,然后使用时间戳来过滤一些数据。
SELECT
UNIX_TIMESTAMP(`timestamp`) as time_sec,
`value` as value,
`lat` as latitude,
`lng` as longitude,
`name` as name
FROM worldmap_latlng
WHERE $__timeFilter(`timestamp`)
ORDER BY `timestamp` ASC
2.3 worldmap的配置
首先最后的查询语句应该类似如下:(注意里面的Format as Tabel)
其次,设置Worldmap 的属性:
Center: 可以在这里设置地图的中心,(39,116)是北京的经纬度。
Map Data Options : 把Location Data设置为Tabel,因 为worldmap的数据源是从mysql中select出来的结果。同时把Aggregation设置为total.
设置字段映射:
Table Query Format: 选择coordinates,表示位置是以经纬度来定位的。
Location Name Field : 对应于上面select语句里面的 name,
Metric Field :对应select语句里面的value,
Latitude Field:对应select语句里面的latitude,注意这里是使用as后的别名而不是mysql数据表本身的列表。
Longitude Field :对应select语句中的Longitude
注意,Worldmap里面使用的field并不是直接来自表的定义,而是来自Select语句的列!!!
因此,FieldMapping里面的各个字段其实是对应于:
SELECT
UNIX_TIMESTAMP(`timestamp`) as time_sec,
`value` as value,
`lat` as latitude,
`lng` as longitude,
`name` as name
•••
2.4 示例结果
可以看到,上海就已经在地图上标注出来了。
三、 其它注意事项
3.1 worldmap不可离线使用
根据https://github.com/grafana/worldmap-panel/issues/48 解释,worldmap在使用过程中需要从特定的服务器cartodb-basemaps-a.global.ssl.fastly.net 下载地图图片,因此worldmap暂时不支持离线使用。这种连接是由浏览器侧发出的,并不是grafana服务器。
因此,只需要访问worldmap的浏览器能够连接到特定服务器即可。
3.2 worldmap的正常使用需要fq
cartodb-basemaps-a.global.ssl.fastly.net 站点被block了,在国内无法访问,会导致使用worldmap过程中数据点能正常绘制,但是背景地图是空的,其效果类似于下图。
解决方法:设置 合适的代理 即可。
3.3 动态绘制
Worldmap支持动态刷新地图,其原理是:
- Grafana支持周期性自动的query,周期可以在worldmap的右上角选择设置。
2. 在select的时间,在where语句里面添加对时间戳的过滤,只把上一个周期的数据选择出来进行绘制即可。这个时间过滤可以由grafana自动完成(WHERE $__timeFilter(timestamp
) 就是这个作用。这个周期一样在Panel的右上角可以选择:
- 其它服务往mysql数据源插入带时间戳的记录即可。
转载:https://blog.csdn.net/jmh1996/article/details/102476824