文档文档

使用 Flux 查询 InfluxDB

此页面记录了 InfluxDB OSS 的早期版本。InfluxDB OSS v2 是最新的稳定版本。请参阅等效的 InfluxDB v2 文档: 使用 Flux 查询 InfluxDB

本指南介绍了使用 Flux 从 InfluxDB 查询数据的基本知识。如果您尚未执行操作,请确保安装 InfluxDB v1.8+,启用 Flux,并选择一个 用于编写 Flux 查询的工具

每个 Flux 查询都需要以下内容

  1. 数据源
  2. 时间范围
  3. 数据过滤器

1. 定义您的数据源

Flux 的 from() 函数定义了一个 InfluxDB 数据源。它需要一个 bucket 参数。对于此示例,请使用 telegraf/autogen,它是 TICK 堆栈提供的默认数据库和保留策略的组合。

from(bucket:"telegraf/autogen")

2. 指定时间范围

Flux 在查询时间序列数据时需要时间范围。“无界”查询会消耗大量资源,作为一种保护措施,Flux 在没有指定范围的情况下不会查询数据库。

使用管道转发运算符 (|>) 将数据从您的数据源管道传输到 range() 函数中,该函数为您的查询指定时间范围。它接受两个属性:startstop。范围可以是使用负数 持续时间相对范围,也可以是使用 时间戳绝对范围

相对时间范围示例
// 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 查询可以以多种方式扩展以形成强大的脚本。


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,从而加快了查询速度并优化了存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看