文档文档

监控状态

Flux 帮助您监控指标和事件中的状态

如果您刚开始使用 Flux 查询,请查看以下内容

查找状态持续多长时间

使用 stateDuration() 计算具有指定状态的连续行的持续时间。对于每个与指定状态匹配的连续点,stateDuration() 会递增并将持续时间(以指定的单位)存储在用户定义的列中。

包括以下信息

  • 要搜索的列: 任何标签键、标签值、字段键、字段值或测量值。
  • 值: 要在指定列中搜索的值(或状态)。
  • 状态持续时间列: 用于存储状态持续时间的新列——指定值持续的时间长度。
  • 单位: 用于递增状态持续时间的时间单位(1s(默认)、1m1h)。
data
    |> stateDuration(fn: (r) => r.column_to_search == "value_to_search_for", column: "state_duration", unit: 1s)
  • 对于第一个评估为 true 的点,状态持续时间设置为 0。对于每个评估为 true 的连续点,状态持续时间将增加每个连续点之间的时间间隔(以指定单位)。
  • 如果状态为 false,则状态持续时间将重置为 -1

使用 stateDuration() 的示例查询

以下查询在过去 5 分钟内搜索 doors 存储桶,以查找门 closed 了多少秒。

from(bucket: "doors")
    |> range(start: -5m)
    |> stateDuration(fn: (r) => r._value == "closed", column: "door_closed", unit: 1s)

在此示例中,door_closed状态持续时间列。如果您每分钟向 doors 存储桶写入数据,则对于每个 _valueclosed 的连续点,状态持续时间将增加 60 秒。如果 _value 不是 closed,则状态持续时间将重置为 0

查询结果

上面示例查询的结果可能如下所示(为简单起见,我们省略了测量值、标签和字段列)

_time_valuedoor_closed
2019-10-26T17:39:16Zclosed0
2019-10-26T17:40:16Zclosed60
2019-10-26T17:41:16Zclosed120
2019-10-26T17:42:16Zopen-1
2019-10-26T17:43:16Zclosed0
2019-10-26T17:44:27Zclosed60

计算连续状态的数量

使用 stateCount() 函数 并包括以下信息

  • 要搜索的列: 任何标签键、标签值、字段键、字段值或测量值。
  • 值: 要在指定列中搜索的值。
  • 状态计数列: 用于存储状态计数的新列——指定值存在的连续记录数。
|> stateCount(
    fn: (r) => r.column_to_search == "value_to_search_for",
    column: "state_count",
)
  • 对于第一个评估为 true 的点,状态计数设置为 1。对于每个评估为 true 的连续点,状态计数将增加 1。
  • 如果状态为 false,则状态计数将重置为 -1

使用 stateCount() 的示例查询

以下查询在过去 5 分钟内搜索 doors 存储桶,并计算有多少个点将其 _value 设置为 closed

from(bucket: "doors")
    |> range(start: -5m)
    |> stateCount(fn: (r) => r._value == "closed", column: "door_closed")

此示例将状态计数存储在 door_closed 列中。如果您每分钟向 doors 存储桶写入数据,则对于每个 _valueclosed 的连续点,状态计数将增加 1。如果 _value 不是 closed,则状态计数将重置为 -1

查询结果

上面示例查询的结果可能如下所示(为简单起见,我们省略了测量值、标签和字段列)

_time_valuedoor_closed
2019-10-26T17:39:16Zclosed1
2019-10-26T17:40:16Zclosed2
2019-10-26T17:41:16Zclosed3
2019-10-26T17:42:16Zopen-1
2019-10-26T17:43:16Zclosed1
2019-10-26T17:44:27Zclosed2

用于计数机器状态的示例查询

以下查询每分钟检查机器状态(空闲、已分配或忙碌)。InfluxDB 在过去一小时内搜索 servers 存储桶,并计算机器状态为 idleassignedbusy 的记录。

from(bucket: "servers")
    |> range(start: -1h)
    |> filter(fn: (r) => r.machine_state == "idle" or r.machine_state == "assigned" or r.machine_state == "busy")
    |> stateCount(fn: (r) => r.machine_state == "busy", column: "_count")
    |> stateCount(fn: (r) => r.machine_state == "assigned", column: "_count")
    |> stateCount(fn: (r) => r.machine_state == "idle", column: "_count")

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像目前一样使用它,而无需对代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、最近数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 以 Core 的基础为构建,增加了高可用性、读取副本、增强的安全性以及数据压缩,从而实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看