使用 Flux 查询 InfluxDB
本指南将指导您如何使用 Flux 从 InfluxDB 查询数据的基本操作。每个 Flux 查询都需要以下内容
1. 定义您的数据源
Flux 的 from()
函数定义了一个 InfluxDB 数据源。它需要一个 bucket
参数。以下示例使用 example-bucket
作为桶名。
from(bucket:"example-bucket")
2. 指定时间范围
Flux 在查询时间序列数据时需要时间范围。“无界”查询非常消耗资源,作为保护措施,Flux 不会在没有指定范围的情况下查询数据库。
使用管道向前操作符(|>
)将数据源中的数据导入到range()
中,该函数用于指定查询的时间范围。它接受两个参数:start
和stop
。开始和结束值可以使用负的持续时间进行相对指定,或使用时间戳进行绝对指定。
示例相对时间范围
// Relative time range with start only. Stop defaults to now.
from(bucket:"example-bucket")
|> range(start: -1h)
// Relative time range with start and stop
from(bucket:"example-bucket")
|> range(start: -1h, stop: -10m)
相对范围相对于“现在”。
示例绝对时间范围
from(bucket:"example-bucket")
|> range(start: 2021-01-01T00:00:00Z, stop: 2021-01-01T12:00:00Z)
使用以下
在本指南中,使用相对时间范围-15m
来限制查询结果只包含最后15分钟的数据
from(bucket:"example-bucket")
|> range(start: -15m)
3. 过滤数据
将范围数据传递给filter()
以根据数据属性或列缩小结果。`filter()`有一个参数fn
,它期望一个谓词函数,该函数通过列值评估行。
filter()
遍历每一行输入并将行数据结构化为Flux的记录。记录作为r
传递给谓词函数,并使用谓词表达式进行评估。
评估为false
的行将从输出数据中删除。评估为true
的行将保留在输出数据中。
// Pattern
(r) => (r.recordProperty comparisonOperator comparisonExpression)
// Example with single filter
(r) => (r._measurement == "cpu")
// Example with multiple filters
(r) => (r._measurement == "cpu" and r._field != "usage_system")
使用以下
对于此示例,通过cpu
测量、usage_system
字段和cpu-total
标签值进行过滤
from(bucket: "example-bucket")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total")
4. 返回查询数据
yield()
输出查询的结果。
from(bucket: "example-bucket")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total")
|> yield()
Flux默认在每个脚本的末尾假设一个yield()
函数来输出和可视化数据。仅在同一个Flux查询中包含多个查询时才需要显式调用yield()
。每组返回的数据都需要使用yield()
函数进行命名。
恭喜!
您现在已使用Flux从InfluxDB查询数据。
这里显示的查询是一个基本示例。Flux查询可以通过多种方式扩展来形成强大的脚本。
这个页面有帮助吗?
感谢您的反馈!