文档

使用 Flux 查询 InfluxDB

查看等效的 InfluxDB v2 文档: 使用 Flux 查询 InfluxDB.

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

以下查询可以使用执行 Flux 查询中描述的任何方法执行。请确保每个方法都提供您的 InfluxDB Enterprise 授权凭据。

每个 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 v3增强功能和InfluxDB Clustered现已全面上市

新功能包括更快的查询性能和管理工具,推动了InfluxDB v3产品线的进步。InfluxDB Clustered现已全面上市。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强功能包括用于监控InfluxDB集群健康状态的运营仪表板、InfluxDB云专用版中的单点登录(SSO)支持以及用于令牌和数据库的新管理API。

了解新的v3增强功能


InfluxDB Clustered全面上市

InfluxDB Clustered现已全面上市,为您在自管理堆栈中提供InfluxDB v3的强大功能。

与我们谈谈InfluxDB Clustered