Documentation

使用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 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: