本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
MySQL
添加 MySQL 数据源,以便能够查询和可视化来自 MySQL 兼容数据库的数据。
重要
Grafana 版本 8.0 更改了 MySQL、Postgres 和微软 SQL Server 数据源数据框的基础数据结构。因此,以宽格式返回时间序列查询结果。有关更多信息,请参阅 Grafana 数据框文档中的
宽格式
为了使您的可视化效果像以前一样工作,您可能需要进行一些手动迁移。一个解决方案记录在 Github 上,网址为 p
ostgres/mySQL/mssQL:v8.0 中与时间序列查询和数据列排序相关的重大更改
添加数据源
选择顶部标题中的 Grafana 图标,打开侧面菜单。
在 “ 仪表板 ” 链接下的侧面菜单中,您应该找到一个名为 “ 数据源 ” 的链接。
选择顶部标题中的 + 添加数据源 按钮。
从 “ 类型 ” 下拉列表中选择 MySQL 。
数据源选项
最小时间间隔
$_interval
$_interval_ms
变量的下限。建议设置为写入频率,例如,
1m
如果您的数据每分钟写入一次。也可以在数据源选项下的仪表板面板中重写/配置此选项。此值
必须
格式化为数字后接有效时间标识符;例如,
1m
(1 分钟)或
30s
(30 秒)。支持以下时间标识符。
数据库用户权限
重要
在添加数据源时指定的数据库用户应仅被授予对要查询的指定数据库和表的 SELECT 权限。Grafana 不验证查询是否安全。该查询可以包含任何 SQL 语句。例如,
DROP TABLE
user;
将运行诸如
USE otherdb;
和之类的语句。为了防范这种情况,我们强烈建议您创建一个权限受限的特定 MySQL 用户。
以下代码示例显示了创建权限受限的特定 MySQL 用户。
CREATE USER 'grafanaReader' IDENTIFIED BY 'password'; GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';
要授予对更多数据库和表的访问权限,可以根据需要使用通配符 (
*
) 代替数据库或表。
查询编辑器
在面板的编辑模式下,您可以在指标选项卡中找到 MySQL 查询编辑器。要进入编辑模式,请选择面板标题,然后选择 “编辑” 。
在面板编辑模式下,查询编辑器有一个 生成的 SQL 链接,该链接会在查询运行后显示。选择它,它将展开并显示正在运行的原始插入 SQL 字符串。
选择表、时间列和指标列 (FROM)
当您首次进入编辑模式或添加新查询时,Grafana 将尝试在查询生成器中预先填充第一个具有时间戳列和数字列的表。
在 FROM 字段中,Grafana 将建议配置的数据库中的表。要在数据库用户有权访问的另一个数据库中选择表或视图,可以手动输入一个完全限定的名称 (database.table),例如。
otherDb.metrics
时间列字段是指保存您的时间值的列的名称。为指标列字段选择值是可选的。如果选择了某个值,则指标列字段将用作系列名称。
指标列建议将仅包含文本数据类型的列(文本、tinytext、mediumtext、longtext、varchar、char)。如果您想使用具有不同数据类型的列作为指标列,则可以输入带有 cast: 的列名
CAST(numericColumn as CHAR)
。您还可以在指标列字段中输入任意 SQL 表达式,这些表达式的计算结果为文本数据类型,例如
CONCAT(column1, " ",
CAST(numericColumn as CHAR))
。
列和聚合函数(选择)
在该
SELECT
行中,您可以指定要使用的列和函数。在列字段中,您可以编写任意表达式来代替列名,例如
column1 * column2 /
column3
。
如果您使用聚合函数,则必须对结果集进行分组。
GROUP BY time
如果您添加聚合函数,编辑器将自动添加。
您可以通过选择加号按钮并
Column
从菜单中选择来添加更多值列。多个值列将在图形面板中绘制为单独的序列。
筛选数据(WHERE)
要添加筛选器,请选择
WHERE
条件右侧的加号图标。您可以通过在过滤器上进行选择并选择来删除过滤器
Remove
。当前所选时间范围的过滤器会自动添加到新查询中。
要按时间或任何其他列进行分组,请选择 GROUP BY 行末尾的加号图标。建议下拉列表将仅显示您当前所选表格的文本列,但您可以手动输入任何列。您可以通过选择项目然后选择来删除该组
Remove
。
如果添加任何分组,则所有选定列都必须应用聚合函数。添加分组时,查询生成器将自动向所有不包含聚合函数的列添加聚合函数。
当你按时间分组时,Grafana 可以填充缺失的值。时间函数接受两个参数。第一个参数是你想要分组的时间窗口,第二个参数是你希望 Grafana 填充缺失项目的值。
文本编辑器模式(raw)
您可以通过选择汉堡图标并选择 “切换编辑器模式” 或在查询下方选择 “ 编辑 SQL” 来切换到原始查询编辑 器模式 。
注意
如果您使用原始查询编辑器,请确保您的查询至少在返回的时间范围内有一个
ORDER BY time
过滤器。
为了简化语法并允许使用动态部分,例如日期范围过滤器,查询可以包含宏。
$__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,"5m",
[fillmode])
与存储为
$__timeGroup
Unix 时间戳的时间相同(仅在 Grafana 5.3+ 中可用)。
$__unixEpochGroupAlias(dateColumn,"5m",
[fillmode])`
与上面相同,但还添加了列别名(仅在 Grafana 5.3+ 中可用)。
在面板编辑模式下,查询编辑器有一个 生成的 SQL 链接,该链接会在查询运行后显示。选择它,它将展开并显示正在运行的原始插入 SQL 字符串。
如果 “ 格式化为 查询” 选项设置为 “ 表 ”,则基本上可以执行任何类型的 SQL 查询。表格面板将自动显示您的查询返回的任何列和行的结果。
以下代码显示了一个示例查询。
SELECT title as 'Title', user.login as 'Created By' , dashboard.created as 'Created On' FROM dashboard INNER JOIN user on user.id = dashboard.created_by WHERE $__timeFilter(dashboard.created)
您可以使用常规
as
SQL 列选择语法控制 “表” 面板列的名称。
时间序列查询
如果您将
Form
at 设置为
时间序
列(例如用于图形面板),则查询必须返回名为的列,该列要么返回 SQL 日期时间
time
,要么返回 Unix 纪元的任何数字数据类型。除
time
和之外的任何列
metric
都被视为值列。您可以返回一个名为的列
metric
,该列用作值列的指标名称。如果您返回多个值列和一个名为的列
metric
,则此列将用作系列名称的前缀(仅在 Grafana 5.3+ 中可用)。
时间序列查询的结果集必须按时间排序。
以下代码示例显示了该
metric
列。
以下代码示例显示如何使用 $__timeGroup 宏中的 fill 参数将空值转换为零。
SELECT $__timeGroup(createdAt,'5m',0), sum(value_double) as value, measurement FROM test_data WHERE $__timeFilter(createdAt) GROUP BY time, measurement ORDER BY time以下代码示例显示了多列。
SELECT $__timeGroup(time_date_time,'5m'), min(value_double) as min_value, max(value_double) as max_value FROM test_data WHERE $__timeFilter(time_date_time) GROUP BY time ORDER BY time目前,不支持根据时间范围和面板宽度按时间进行动态分组。将来可能会支持此功能。
与其在指标查询中对服务器、应用程序和传感器名称等内容进行硬编码,不如使用变量来代替它们。变量显示为仪表板顶部的下拉选择框。您可以使用这些下拉框来更改仪表板中显示的数据。
有关模板和模板变量的更多信息,请参阅 模板 。
如果您添加该类型的
Query
模板变量,则可以编写一个 MySQL 查询,该查询可以返回显示为下拉选择框的测量名称、键名称或键值等内容。
例如,如果您在模板变量查询设置中指定了这样的查询,则可以有一个包含表中该
hostname
列所有值的变量。
一个查询可以返回多列,Grafana 会自动从中创建一个列表。例如,以下查询将返回一个包含来自
hostname
和的值的列表
hostname2
。
要使用与时间范围相关的宏,例如
$__timeFilter(column)
在查询中,模板变量的刷新模式必须设置为 On Time Range
Chan
ge。
另一种选择是可以创建键/值变量的查询。该查询应返回名为
__text
和的两列
__value
。
__text
列值应该是唯一的(如果不是唯一的,则使用第一个值)。下拉列表中的选项将包含文本和值,因此您可以使用友好的名称作为文本,使用 ID 作为值。
以下代码示例显示了一个以文本
hostname
为值的查询。
id
你也可以创建嵌套变量。例如,如果你有另一个名为的变量
region
。然后,您可以使用这样的查询,让主机变量仅显示来自当前选定区域的主机(如果
region
是多值变量,则使用
IN
比较运算符而不是与多个值
=
进行匹配)。
__searchFilter
用于筛选查询变量中的结果
__searchFilter
在查询字段中使用将根据用户在下拉选择框中键入的内容筛选查询结果。如果用户未输入任何内容,则的默认值
__searchFilter
为
%
。
注意
请务必在
__searchFilter
表达式周围加上引号,因为 Grafana 不会为你做这件事。
以下示例说明如何在用户在下拉选择框中键入内容
hostname
时将其用
__searchFilter
作查询字段的一部分,以启用搜索。
在查询中使用变量
从 Grafana 4.3.0 到 4.6.0,模板变量总是自动加引号,因此,如果是字符串值,请不要在 where 子句中将它们用引号括起来。
从 Grafana 4.7.0 开始,仅当模板变量为时才会引用模板变量值。
multi-value
如果变量是多值变量,请使用
IN
比较运算符,而不是与多个值
=
进行匹配。
有两种语法:
$<varname>
带有名为的模板变量的示例
hostname
:
[[varname]]
带有名为的模板变量的示例
hostname
:
关闭多值变量的引用
Grafana 自动为多值变量创建带引号的、以逗号分隔的字符串。例如:如果选择
server01
和
server02
,则将其格式化为:
'server01', 'server02'
。要关闭引用,请使用变量的 csv 格式选项。
$
{
servers:csv}
有关变量格式化选项的更多信息,请参见 高级变量格式选项 。
您可以使用注释在图表顶部叠加丰富的事件信息。您可以通过仪表板菜单/注释视图添加注释查询。有关更多信息,请参阅:
以下示例代码显示了使用带有 epoch 值的时间列的查询。
SELECT epoch_time as time, metric1 as text, CONCAT(tag1, ',', tag2) as tags public.test_data WHERE $__unixEpochFilter(epoch_time)以下示例代码显示了使用带有 epoch 值的时间和时间结束列的区域查询。
注意
仅在 Grafana v6.6+ 中可用。
以下示例代码显示了使用本地 SQL 日期/时间数据类型的时间列的查询。
SELECT native_date_time as time, metric1 as text, CONCAT(tag1, ',', tag2) as tags public.test_data WHERE $__timeFilter(native_date_time)