使用Flux查询InfluxDB
此页面记录了InfluxDB OSS的早期版本。 InfluxDB OSS v2 是最新稳定版本。 查看等效的 InfluxDB v2 文档: 使用Flux查询InfluxDB。
本指南将介绍如何使用Flux从InfluxDB查询数据的基本方法。 如果您尚未安装,请确保安装InfluxDB v1.8+,启用Flux,并选择一个 编写Flux查询的工具。
每个Flux查询都需要以下内容
1. 定义您的数据源
Flux的 from()
函数定义了一个InfluxDB数据源。它需要一个 bucket
参数。在此示例中,使用 telegraf/autogen
,它是TICK堆栈提供的默认数据库和保留策略的组合。
from(bucket:"telegraf/autogen")
2. 指定时间范围
Flux在查询时间序列数据时需要时间范围。“无界”查询非常消耗资源,作为保护措施,Flux将不会在没有指定范围的情况下查询数据库。
使用管道操作符 (|>
) 将数据从您的数据源传递到 range()
函数,该函数指定查询的时间范围。它接受两个属性: start
和 stop
。范围可以是 相对的,使用负 持续时间,或者 绝对 使用 时间戳。
示例相对时间范围
// Relative time range with start only. Stop defaults to now.
from(bucket:"telegraf/autogen")
|> range(start: -1h)
// Relative time range with start and stop
from(bucket:"telegraf/autogen")
|> range(start: -1h, stop: -10m)
相对范围相对于“现在”。
示例绝对时间范围
from(bucket:"telegraf/autogen")
|> range(start: 2018-11-05T23:30:00Z, stop: 2018-11-06T00:00:00Z)
使用以下
在本指南中,使用相对时间范围 -15m
限制查询结果为最后15分钟的数据
from(bucket:"telegraf/autogen")
|> range(start: -15m)
3. 过滤您的数据
将范围数据传递到 filter()
函数以根据数据属性或列缩小结果。该 filter()
函数有一个参数, fn
,它期望一个匿名函数,该函数的逻辑根据列或属性过滤数据。
Flux的匿名函数语法与JavaScript非常相似。记录或行作为记录 (r
) 传递到 filter()
函数。匿名函数获取记录并对其进行评估以查看它是否与定义的过滤器匹配。使用 AND
关系运算符链接多个过滤器。
// 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:"telegraf/autogen")
|> range(start: -15m)
|> filter(fn: (r) =>
r._measurement == "cpu" and
r._field == "usage_system" and
r.cpu == "cpu-total"
)
4. 输出查询数据
使用Flux的 yield()
函数将过滤后的表输出为查询的结果。
from(bucket:"telegraf/autogen")
|> range(start: -15m)
|> filter(fn: (r) =>
r._measurement == "cpu" and
r._field == "usage_system" and
r.cpu == "cpu-total"
)
|> yield()
Chronograf和
influx
CLI自动假设每个脚本末尾都有一个yield()
函数,以便输出和可视化数据。最佳实践是包括一个yield()
函数,但它并不总是必要的。
恭喜!
您现在已使用Flux从InfluxDB查询数据。
此处显示的查询是一个基本的示例。Flux查询可以通过多种方式扩展,形成强大的脚本。
这个页面有帮助吗?
感谢您的反馈!