文档文档

使用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 v3 增强功能和 InfluxDB 集群版现已全面上市

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

InfluxDB v3 性能和功能

InfluxDB v3 产品线在查询性能方面取得了重大提升,并提供了新的管理工具。这些增强包括一个操作仪表板来监控您的 InfluxDB 集群的健康状况,InfluxDB Cloud Dedicated 中的单点登录(SSO)支持,以及新的令牌和数据库管理 API。

了解新的 v3 增强功能


InfluxDB 集群版全面上市

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

与我们谈论 InfluxDB 集群版