;数据源;MySQL

在Grafana中使用MySQL

从Grafana v5.1开始,您可以命名时间列时间除了以前支持的time_sec.的使用time_sec最终将被弃用。

Grafana带有内置的MySQL数据源插件,允许您查询和可视化来自MySQL兼容数据库的数据。

添加数据源

  1. 点击顶部标题中的Grafana图标打开侧边菜单。
  2. 在侧边菜单下的指示板链接您应该会找到一个名为数据源
  3. 单击+添加数据源按钮。
  4. 选择MySQL类型下拉。

数据源选项

的名字 描述
的名字 数据源名称。这就是在面板和查询中引用数据源的方式。
默认的 默认数据源意味着将为新面板预先选择它。
宿主 MySQL实例的IP地址/主机名和可选端口。
数据库 MySQL数据库的名称。
用户 数据库用户登录名/用户名
密码 数据库用户密码
会话时区 指定数据库会话中使用的时区,例如欧洲/柏林+ 02:00.如果数据库(或数据库主机)的时区被设置为UTC以外的时区,这是必要的。设置会话中使用的值设置time_zone =“……”.如果将此字段保留为空,则不会更新时区。有关更多信息,请参阅MySQL文档
马克斯开放 到数据库的最大打开连接数,默认值无限的(Grafana v5.4 +)。
马克斯闲置 空闲连接池中的最大连接数,默认值2(Grafana v5.4 +)。
马克思一生 连接可重用的最大时间(以秒为单位),默认值14400/ 4小时。该值应始终低于配置值wait_timeout在MySQL (Grafana v5.4+)。

最小时间间隔

的下限__interval美元而且__interval_ms美元变量。建议设置为写频,例如1米如果数据每分钟都被写入。也可以在仪表板面板中数据源选项下重写/配置此选项。需要注意的是,这个值需要被格式化为一个数字,后面跟着一个有效的时间标识符。1米(1分钟)或30年代(30秒)。支持以下时间标识符:

标识符 描述
y 一年
w
d 一天
h 小时
一分钟
年代 第二个
女士 毫秒

数据库用户权限(重要!)

在添加数据源时指定的数据库用户应该只被授予要查询的指定数据库和表的SELECT权限。Grafana不验证查询是否安全。查询可以包括任何SQL语句。例如,像这样的语句使用otherdb;而且删除表用户会被处决。为了防止这种情况发生高度建议您创建一个权限受限的mysql用户。

例子:

创建用户名为grafanreader,密码为password授权选择我的数据库。mytable TO ' grafanreader ';

您可以使用通配符(),以代替数据库或表,如果你想授予更多的数据库和表的访问权。

查询构建器

在使用MySQL数据源编辑面板时,可以使用MySQL查询构建器。键可以运行所构建的查询运行查询按钮在编辑器的右上角。

格式

MySQL的响应可以格式化为表格或时间序列。要使用时间序列格式,必须为其中一列命名时间

数据集和表选择

在“dataset”下拉菜单中,选择要查询的MySQL数据库。下拉列表将填充用户可以访问的数据库。选择数据集时,将用可用的表填充表下拉列表。

列和聚合函数(SELECT)

使用下拉菜单,选择要包含在数据中的列。您还可以指定一个可选的聚合函数。

通过单击加号按钮添加更多的值列,将出现另一个列下拉菜单。

过滤数据(WHERE)

若要添加筛选器,请翻转编辑器顶部的开关。使用第一个下拉菜单,选择是否所有过滤器都需要匹配(AND),或者如果只有一个过滤器需要匹配(or)。

要添加更多的列以筛选使用加号按钮。

集团

若要按列对结果进行分组,请翻转编辑器顶部的分组开关。然后,您可以选择按哪个列对结果进行分组。通过按X按钮可以删除group by子句。

预览

通过翻转编辑器顶部的预览开关,可以预览查询构建器生成的SQL查询。

代码编辑器

要进行高级查询,请单击切换到代码编辑器代码在编辑器的右上角。代码编辑器支持自动完成表,列,SQL关键字,标准SQL函数,Grafana模板变量和Grafana宏。在指定表之前不能完成列。

单击,可以展开代码编辑器雪佛龙公司指向代码编辑器的右下角。

CTRL/CMD +返回作为键盘快捷键运行查询。

为了简化语法并允许动态部分(如日期范围过滤器),查询可以包含宏。

宏的例子 描述
__time美元(dateColumn) 将被转换为UNIX时间戳的表达式所取代,并将列重命名为time_sec.例如,UNIX_TIMESTAMP(dateColumn)作为time_sec
__timeEpoch美元(dateColumn) 将被转换为UNIX时间戳的表达式所取代,并将列重命名为time_sec.例如,UNIX_TIMESTAMP(dateColumn)作为time_sec
__timeFilter美元(dateColumn) 将由使用指定列名的时间范围筛选器替换。例如,datecolumbetween FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)
$ __timeFrom () 将被当前活动时间选择的开始所取代。例如,FROM_UNIXTIME (1494410783)
$ __timeTo () 将被当前活动时间选择的结束所取代。例如,FROM_UNIXTIME (1494410983)
美元__timeGroup (dateColumn 5米) 将被GROUP by子句中可用的表达式替换。例如,* cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),*
美元__timeGroup (dateColumn 5米,0) 与上面相同,但有一个填充参数,因此该系列中的缺失点将由grafana添加,0将被用作值。
美元__timeGroup (dateColumn 5米,NULL) 与上述相同,但NULL将被用作缺失点的值。
美元__timeGroup (dateColumn, 5米,之前) 与上述相同,但该系列中的前一个值将被用作填充值,如果还没有看到任何值,将使用NULL(仅在Grafana 5.3+中可用)。
美元__timeGroupAlias (dateColumn 5米) 将被替换为与$__timeGroup相同,但添加了列别名(仅在Grafana 5.3+中可用)。
__unixEpochFilter美元(dateColumn) 将由使用指定列名的时间范围筛选器替换,其中时间表示为Unix时间戳。例如,dateColumn > 1494410783 AND dateColumn < 1494497183
$ __unixEpochFrom () 将被当前活动时间选择的开始替换为Unix时间戳。例如,1494410783
$ __unixEpochTo () 将被当前活动时间选择的结束替换为Unix时间戳。例如,1494497183
__unixEpochNanoFilter美元(dateColumn) 将由使用指定列名的时间范围筛选器替换,其中时间表示为纳秒时间戳。例如,dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872
$ __unixEpochNanoFrom () 将被当前活动时间选择的开始位置替换为纳秒时间戳。例如,1494410783152415214
$ __unixEpochNanoTo () 将被当前活动时间选择的末尾替换为纳秒时间戳。例如,1494497183142514872
美元__unixEpochGroup (dateColumn 5米,[fillmode]) 与$__timeGroup相同,但时间存储为Unix时间戳(仅在Grafana 5.3+中可用)。
美元__unixEpochGroupAlias (dateColumn 5米,[fillmode]) 与上面相同,但也添加了列别名(仅在Grafana 5.3+中可用)。

我们计划添加更多的宏。如果你对你想看到的宏有建议,请打开一个问题在我们的GitHub回购。

查询编辑器有一个名为生成的SQL在执行查询后,在面板编辑模式下显示。单击它,它将展开并显示执行的原始插值SQL字符串。

表查询

如果格式查询选项设置为表格那么你基本上可以做任何类型的SQL查询。表面板将自动显示查询返回的任何列和行的结果。

查询编辑器示例查询:

查询:

选择标题为“标题”,用户。登录为“创建人”,仪表板。创建为' created On'从仪表板内部连接用户上的用户。Id = dashboard。$__timeFilter(dashboard.created)

可以使用regular来控制Table面板列的名称作为SQL列选择语法。

产生的表格面板:

时间序列查询

如果将格式设置为时间序列,则查询必须有一个名为time的列,该列返回SQL datetime或任何以秒为单位表示Unix epoch的数字数据类型。此外,时间序列查询的结果集必须按时间排序,以便面板正确地显示结果。

类型返回时间序列查询结果宽数据帧格式.在数据帧查询结果中,除时间或类型为字符串的任何列都转换为值字段。在数据帧查询结果中,任意字符串列转换为字段标签。

为了向后兼容,对于返回三个列(包括一个名为metric的字符串列)的查询,上面的规则有一个例外。它不是将度量列转换为字段标签,而是转换为字段名称,然后将系列名称格式化为度量列的值。请参阅下面带有度量列的示例。

若要自定义默认系列名称格式,请参阅标准选项定义

的例子度规专栏:

SELECT $__timeGroup(time_date_time,'5m'), min(value_double), 'min'作为度量FROM test_data WHERE $__timeFilter(time_date_time) GROUP BY time ORDER BY time

数据帧结果:

+---------------------+-----------------+ | 名称:时间|名称:分钟| |标签:|标签:| |类型:[]。时间|类型:[]float64  | +---------------------+-----------------+ | 2020-01-02 03:05:00 | 3 | | 2020-01-02 03:10:00 | 6  | +---------------------+-----------------+

使用$__timeGroup宏中的fill参数将空值转换为零:

SELECT $__timeGroup(createdAt,'5m',0), sum(value_double)作为值,hostname FROM test_data WHERE $__timeFilter(createdAt) GROUP BY time, hostname ORDER BY time

给定以下示例中的数据帧结果,并使用图形面板,您将得到两个名为价值10.0.1.1而且价值10.0.1.2.以呈现名称为的系列10.0.1.1而且10.0.1.2,使用a [标准选项定义显示值$ {__field.labels.hostname}

数据帧结果:

+---------------------+---------------------------+---------------------------+ | Name: value名称:时间| |名称:值| |标签:|标签:主机名= 10.0.1.1 |标签:主机名= 10.0.1.2 | |类型:[]。时间|类型:[]float64 |类型:[]float64  | +---------------------+---------------------------+---------------------------+ | 2020-01-02 03:05:00 | 3 | 4 | | 2020-01-02 03:10:00 | 6 | 7  | +---------------------+---------------------------+---------------------------+

包含多个列的示例:

SELECT $__timeGroup(time_date_time,'5m'), min(value_double)作为min_value, max(value_double)作为max_value FROM test_data WHERE $__timeFilter(time_date_time) GROUP BY time ORDER BY time

数据帧结果:

+---------------------+-----------------+-----------------+ | 名称:时间|名称:min_value |名称:max_value | |标签:|标签:|标签:| |类型:[]。时间|类型:[]float64 |类型:[]float64  | +---------------------+-----------------+-----------------+ | 2020-01-02 03:04:00 | 3 | 4 | | 2020-01-02 03:05:00 | 6 | 7  | +---------------------+-----------------+-----------------+

目前不支持基于时间范围和面板宽度的时间动态分组。这是我们计划添加的内容。

模板

该特性目前在夜间版本中可用,并将包含在5.0.0版本中。

而不是硬编码的东西,如服务器,应用程序和传感器名称在您的指标查询,你可以使用变量在他们的地方。变量显示为仪表板顶部的下拉选择框。这些下拉列表可以很容易地更改仪表板中显示的数据。

请查看模板介绍模板特性和不同类型的模板变量的文档。

查询变量

类型的模板变量查询,您可以编写一个MySQL查询,它可以返回测量名称、键名或键值等内容,这些内容显示为一个下拉选择框。

属性的所有值都包含在一个变量中主机名如果在模板变量中指定了这样的查询,则表中的列查询设置。

SELECT hostname FROM my_host

一个查询可以返回多个列,Grafana会自动从这些列创建一个列表。例如,下面的查询将返回一个包含从的值的列表主机名而且hostname2

选择my_host。主机名, my_other_host.hostname2 FROM my_host JOIN my_other_host ON my_host.city = my_other_host.city

使用依赖于时间范围的宏,如美元__timeFilter(列)在您的查询中,模板变量的刷新模式需要设置为关于时间范围的变化

SELECT event_name FROM event_log WHERE $__timeFilter(时间列)

另一个选项是可以创建键/值变量的查询。查询应该返回两个已命名的列__text而且__value.的__text列值应该是唯一的(如果不是唯一的,则使用第一个值)。下拉菜单中的选项将有一个文本和值,允许您将一个友好的名称作为文本,将一个id作为值。使用主机名作为文本和id值为:

SELECT hostname AS __text, id AS __value FROM my_host

您还可以创建嵌套变量。例如,如果您有另一个名为地区.然后,您可以让hosts变量只显示来自当前选定区域的主机,使用如下查询(如果地区是多值变量则使用比较运算符而不是匹配多个值):

SELECT hostname FROM my_host WHERE region IN($region)

使用__searchFilter在“查询变量”中过滤结果

可从Grafana 6.5及以上版本获得

使用__searchFilter查询字段将根据下拉选择框中的用户类型对查询结果进行过滤。当用户没有输入任何内容时,为的默认值__searchFilter

重要的是你周围的人__searchFilter用引用作为格拉夫娜的表达并不为你做这件事。

下面的例子展示了如何使用__searchFilter作为查询字段的一部分,以支持搜索主机名当用户在下拉选择框中输入时。

查询

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

查询中使用变量

从Grafana 4.3.0到4.6.0,模板变量总是自动加引号,所以如果它是一个字符串值,不要在where子句中用引号将它们括起来。

从Grafana 4.7.0开始,模板变量值只有在模板变量为多值

如果变量是多值变量,则使用比较运算符而不是匹配多个值。

有两种语法:

$ < varname >模板变量名为主机名

SELECT UNIX_TIMESTAMP(atimestamp)作为时间,int作为值,avarchar作为度量从my_table WHERE $__timeFilter(atimestamp)和主机名($hostname) ORDER BY atimestamp ASC

[[varname]]模板变量名为主机名

从my_table WHERE $__timeFilter(atimestamp)和hostname in([[hostname]]) ORDER BY atimestamp ASC

禁用多值变量引用

Grafana会自动为多值变量创建带引号、逗号分隔的字符串。例如:如果server01而且server02则它将被格式化为:“server01”、“server02”.禁用引号,对变量使用csv格式选项:

${服务器:csv}

中有关可变格式设置选项的详细信息变量文档。

注释

注释允许您在图形之上覆盖丰富的事件信息。您可以通过Dashboard菜单/ Annotations视图添加注释查询。

使用带纪元值的时间列查询示例:

SELECT epoch_time作为时间,metric1作为文本,CONCAT(tag1, ',', tag2)作为标签FROM public。test_data WHERE $__unixEpochFilter(epoch)

使用带有纪元值的time和timeend列的区域查询示例:

仅在Grafana v6.6+中可用。

SELECT epoch_time作为时间,epoch_timeend作为时间结束,metric1作为文本,CONCAT(tag1, ',', tag2)作为公共标签。test_data WHERE $__unixEpochFilter(epoch)

使用本地SQL日期/时间数据类型的时间列查询示例:

SELECT native_date_time作为时间,metric1作为文本,CONCAT(tag1, ',', tag2)作为标签FROM public。test_data WHERE $__timeFilter(native_date_time)
的名字 描述
时间 日期/时间字段的名称。可以是具有本机SQL日期/时间数据类型或epoch值的列。
timeend 结束日期/时间字段的可选名称。可以是具有本机SQL日期/时间数据类型或epoch值的列。(Grafana v6.6 +)
文本 事件描述字段。
标签 用于事件标记的可选字段名称,以逗号分隔的字符串。

报警

时间序列查询应该在警报条件下工作。警报规则条件中还不支持表格式的查询。

使用供应配置数据源

现在可以在Grafana的配置系统中使用配置文件配置数据源。您可以阅读更多关于它的工作原理以及可以为数据源设置的所有设置配置文档页面

下面是该数据源的一些配置示例。

apiVersion: 1数据源:-名称:MySQL类型:MySQL url: localhost:3306数据库:grafana user: grafana jsonData: maxOpenConns: 0 # grafana v5.4+ maxIdleConns: 2 # grafana v5.4+ connMaxLifetime: 14400 # grafana v5.4+ secureJsonData:密码:${GRAFANA_MYSQL_PASSWORD}