Flux 中的模式查询(前身 IFQL)

导航至

InfluxQL 通过许多元查询来促进模式探索,其中包括 SHOW MEASUREMENTSSHOW TAG KEYSSHOW TAG VALUESSHOW FIELD KEYS。Flux(前身 IFQL)统一了这些概念,使得模式由标签键和值组成。这种统一提供了更大的灵活性,用户可以使用这种灵活性来探索模式,正如我们将在本文的其余部分展示的那样。

InfluxQL ? Flux(前身 IFQL)

本节演示了 InfluxQL 元查询到其 Flux 等效项的转换。

SHOW MEASUREMENTS

测量名称在 _measurement 标签键中聚合。因此,我们希望要求 Flux 为我们提供 _measurement 的不同值。

from(db:"foo")
  |> range(start:-24h)
  |> group(by:["_measurement"])
  |> distinct(column:"_measurement")
  |> group(none:true)

一直输入这些可能会变得乏味,因此我们可以编写一个辅助函数,查询指定数据库最近 24 小时的数据,如下所示

showMeasurements = (db) => from(db:db) 
  |> range(start:-24h)
  |> group(by:["_measurement"])
  |> distinct(column:"_measurement")
  |> group(none:true)

从而得到一个大大简化的查询来显示测量值

showMeasurements(db:"foo")

我们计划在不久的将来正式化一些用于查询元数据的辅助函数。

InfluxQL 元查询不能按时间限制,因此值得指出使用 range 将结果限制为仅包含过去 24 小时内数据的测量值。

SHOW TAG KEYS FROM cpu

列出测量值 cpu 的所有标签键。

from(db:"foo")
    |> range(start:-24h)
    |> filter(fn:(r) => r._measurement == "cpu")
    |> keys()

SHOW TAG VALUES FROM cpu WITH KEY = "host"

列出测量值 cpu 中特定标签(host)的所有不同值。

from(db:"foo")
    |> range(start:-24h)
    |> filter(fn:(r) => r._measurement == "cpu")
    |> group(by:["host"])
    |> distinct(column:"host")
    |> group(none:true)

SHOW FIELD KEYS FROM cpu

列出测量值 cpu 的所有字段,这些字段在 _field 标签键下聚合。

from(db:"foo")
    |> range(start:-24h)
    |> filter(fn:(r) => r._measurement == "cpu")
    |> group(by:["_field"])
    |> distinct(column:"_field")
    |> group(none:true)

细心的读者会注意到,这与第 3 个查询相同,只是使用了 _field 标签键。

探索模式

在本节中,我们将逐步介绍用户在探索其模式时可能执行的一系列查询。

1. 显示可用的标签键

此查询使用 keys 函数列出不同的标签键。

from(db:"foo")
    |> range(start:-1h)
    |> group(none:true)
    |> keys(except:["_time","_value","_start","_stop"])

示例输出

_value:string
-------------
_field
_measurement
bank
dir
host
id
interface
tag0
tag1
tag2
tag3

2. 展开 host 标签以查看可用值

此查询按 host 标签对数据进行分组,并输出 host 列的不同值。

from(db:"foo")
    |> range(start:-1h)
    |> group(by:["host"])
    |> distinct(column:"host")
    |> group(none:true)

示例输出

_value:string
-------------
host2
host1

3. 展开 host1 标签以查看可用键

此查询按 host == "host1" 进行过滤,并显示可用键的子集。

from(db:"foo")
    |> range(start:-1h)
    |> filter(fn:(r) => r.host == "host1")
    |> group(none:true)
    |> keys(except:["_time","_value","_start","_stop", "host"]) // <- note host is added here, since we're already querying it

示例输出

_value:string
-------------
_field
_measurement
bank
dir
id
interface