Flux(之前称为IFQL)中的模式查询

导航到

InfluxQL通过多个元查询(包括«SHOW MEASUREMENTS»、«SHOW TAG KEYS»、«SHOW TAG VALUES»和«SHOW 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标签分组数据,并输出主机列的不同值。

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