InfluxDB 查询编辑器
Grafana 的查询编辑器对每个数据源都是唯一的。有关 Grafana 查询编辑器的通用信息,请参阅查询编辑器。有关在 Grafana 中查询数据源的通用信息,请参阅查询和转换数据。
InfluxDB 查询编辑器位于探索页面上。您也可以从仪表盘面板访问 InfluxDB 查询编辑器。点击面板右上角的省略号并选择编辑。
选择查询编辑模式
InfluxDB 数据源有三种不同的查询编辑器类型,每种类型对应于数据源配置中选择的查询语言
编辑器选项因查询语言而异。
InfluxQL 查询编辑器
InfluxQL 查询编辑器可帮助您选择指标和标签来创建 InfluxQL 查询。有两种模式:可视化编辑器模式
和原始查询模式
。要在这两种模式之间切换,请点击右上角的铅笔图标。
可视化查询编辑器模式包含以下组件
- FROM - 选择要查询的测量。
- WHERE - 通过点击+ 号选择过滤器。
- SELECT - 从下拉菜单中选择字段和函数。您可以通过点击+ 号添加多个字段和函数。
- GROUP BY - 从下拉菜单中选择一个标签。
- TIMEZONE - 可选 按特定时区对数据进行分组。
- ORDER BY TIME - 按升序或降序按时间排序数据。
- LIMIT - 可选 限制查询返回的行数。
- SLIMIT - 可选 限制查询返回的系列数。有关此选项的更多信息,请参阅SLIMIT 子句。
- FORMAT AS - 从下拉菜单中选择格式选项。
- ALIAS - 添加别名。有关更多信息,请参阅别名模式。
原始查询编辑器模式
您可以通过切换到原始查询模式来编写原始 InfluxQL 查询。点击查询编辑器右上角的铅笔切换模式。请注意,当您切换到可视化编辑器模式时,您在原始查询模式中所做的任何更改都将丢失。
如果您使用原始查询模式,您的查询必须包含WHERE $timeFilter
。您还应该提供一个按时间分组和聚合函数。否则,InfluxDB 可能会返回数十万个数据点,可能导致您的浏览器卡住。
通过正则表达式匹配
您可以为指标名称或标签过滤值输入正则表达式。将 regex 模式用正斜杠 (/
) 包围,如本例所示:/measurement/
。
Grafana 自动调整过滤标签条件以使用 InfluxDB regex 匹配条件运算符 (=~
)。
字段和聚合函数
在 SELECT
行中,您可以指定要使用的字段和函数。
如果您按时间分组,则必须使用聚合函数。某些函数,如 derivative
,也需要聚合函数。
如果您有以下内容
查询编辑器输入生成一个 InfluxDB SELECT
子句
SELECT derivative(mean("value"), 10s) / 10 AS "REQ/s"
FROM....
您还可以在 SELECT 语句中使用 * 来选择所有字段。
SELECT * FROM <measurement_name>
GROUP BY 结果
要按标签对结果分组,请在 GROUP BY 行中指定该标签
- 单击 GROUP BY 行中的 + 号。
- 从下拉列表中选择一个标签。
您可以按多个选项进行 GROUP BY。
要移除 GROUP BY 选项,请单击选项旁边的 X 图标。
别名模式
别名模式 | 替换为 |
---|---|
GROUP BY 结果 | 要按标签对结果进行分组,请在GROUP BY 行中指定标签 |
点击 GROUP BY 行中的+ 号。 | 要按标签对结果进行分组,请在GROUP BY 行中指定标签 |
$1 - $9 | 从下拉菜单中选择一个标签。 |
您可以按多个选项进行 GROUP BY。 | 要移除一个 GROUP BY 选项,请点击该选项旁边的X 图标。 |
别名模式 | 别名模式 |
替换为
$m
测量名称。
$measurement
测量名称的一部分(如果您使用点分隔测量名称)。
$col
列名。
$tag_exampletag
exampletag 标签的值。语法是 $tag*yourTagName ,必须以 $tag* 开头。要在 ALIAS BY 字段中使用您的标签作为别名,您必须在查询中使用该标签进行分组。 | 替换为 |
---|---|
您还可以使用 | 例如,在 ALIAS BY 字段中输入值 Host: [[tag_hostname]] 会将其替换为每个图例值的 hostname 标签值。 |
一个示例图例值为 | SQL 查询编辑器 |
Grafana 支持 InfluxDB v3.0 及更高版本中的SQL 查询语言。 | 您直接在查询编辑器中构建 SQL 查询。 |
宏 | 您可以在查询中使用宏,自动替换为 Grafana 上下文中的值。 |
宏示例 | $__timeFrom |
当前活动时间选择的开始,例如 | $__timeTo |
示例
// with macro
1. SELECT * FROM cpu WHERE time >= $__timeFrom AND time <= $__timeTo
2. SELECT * FROM cpu WHERE $__timeFilter(time)
3. SELECT $__dateBin(time) from cpu
// interpolated
1. SELECT * FROM iox.cpu WHERE time >= cast('2023-12-15T12:38:30Z' as timestamp) AND time <= cast('2023-12-15T18:38:30Z' as timestamp)
2. SELECT * FROM cpu WHERE time >= '2023-12-15T12:41:28Z' AND time <= '2023-12-15T18:41:28Z'
3. SELECT date_bin(interval '15 second', time, timestamp '1970-01-01T00:00:00Z') from cpu
$__timeFilter
应用当前活动时间选择的开始和结束的时间范围。
$__interval
与 Grafana 根据活动时间选择的时间范围计算得出的间隔相对应的间隔字符串,例如 5s
。
$__dateBin(<column>)
exampletag 标签的值。语法是 $tag*yourTagName ,必须以 $tag* 开头。要在 ALIAS BY 字段中使用您的标签作为别名,您必须在查询中使用该标签进行分组。 | 替换为 |
---|---|
应用date_bin 函数。列必须是时间戳。 | 例如,在 ALIAS BY 字段中输入值 Host: [[tag_hostname]] 会将其替换为每个图例值的 hostname 标签值。 |
$__dateBinAlias(<column>) | SQL 查询编辑器 |
应用带有 | |
Flux 查询编辑器 | Grafana 支持运行 InfluxDB v1.8 及更高版本时的 Flux。如果您的数据源配置为 Flux,您可以在查询编辑器中使用Flux,它作为原始 Flux 查询的文本编辑器,支持宏。 |
有关更多信息和连接详情,请参阅InfluxDB 1.8 API compatibility。 | 使用宏 |
您可以在查询中输入宏,将其替换为 Grafana 上下文中的值。宏支持从Chronograf 复制粘贴。
from(bucket: v.defaultBucket)
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cpu" or r["_measurement"] == "swap")
|> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "free")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
|> yield(name: "mean")
v.timeRangeStop
from(bucket: "grafana")
|> range(start: 2020-06-11T13:59:07Z, stop: 2020-06-11T14:59:07Z)
|> filter(fn: (r) => r["_measurement"] == "cpu" or r["_measurement"] == "swap")
|> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "free")
|> aggregateWindow(every: 2s, fn: mean)
|> yield(name: "mean")
v.windowPeriod
与 Grafana 根据活动时间选择的时间范围计算得出的间隔相对应的 Flux 兼容的间隔字符串,例如 5s
。
v.defaultBucket
数据源配置的“默认存储桶”设置。
v.organization
数据源配置的“组织”设置。
例如,考虑以下 Flux 查询
此 Flux 查询被插值为以下查询并发送到 InfluxDB,其间隔和时间段值根据活动时间选择而变化
要使用 Query inspector 查看查询的插值版本,请参阅面板检查器。
查询日志
SELECT title, description
from events
WHERE $timeFilter
ORDER BY time ASC