小言_互联网的博客

Grafana的Worldmap使用,添加Mysql 数据源

992人阅读  评论(0)

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支持动态刷新地图,其原理是:

  1. Grafana支持周期性自动的query,周期可以在worldmap的右上角选择设置。


2. 在select的时间,在where语句里面添加对时间戳的过滤,只把上一个周期的数据选择出来进行绘制即可。这个时间过滤可以由grafana自动完成(WHERE $__timeFilter(timestamp) 就是这个作用。这个周期一样在Panel的右上角可以选择:

  1. 其它服务往mysql数据源插入带时间戳的记录即可。

转载:https://blog.csdn.net/jmh1996/article/details/102476824
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场