文档文档

监控状态

此页面记录了早期版本的 InfluxDB OSS。 InfluxDB OSS v2 是最新稳定版本。 查看等效的 InfluxDB v2 文档: 监控状态

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

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

查找状态持续多长时间

  1. 使用 stateDuration() 函数计算列值保持相同值(或状态)的时长。包括以下信息

    • 要搜索的列: 任何标签键、标签值、字段键、字段值或 measurement。
    • 值: 要在指定列中搜索的值(或状态)。
    • 状态持续时间列: 用于存储状态持续时间的新列,即指定值持续的时长。
    • 单位: 时间单位(1 秒(默认)、1 分钟1 小时),用于递增状态持续时间。
    |> stateDuration(
      fn: (r) =>
      r._column_to_search == "value_to_search_for",
      column: "state_duration",
      unit: 1s
    )
    
  2. 使用 stateDuration() 搜索每个点的指定值

    • 对于第一个评估为 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

查询结果

上面示例查询的结果可能如下所示(为简单起见,我们省略了 measurement、tag 和 field 列)

_time                   _value        door_closed
2019-10-26T17:39:16Z    closed        0
2019-10-26T17:40:16Z    closed        60
2019-10-26T17:41:16Z    closed        120
2019-10-26T17:42:16Z    open          -1
2019-10-26T17:43:16Z    closed        0
2019-10-26T17:44:27Z    closed        60

计算连续状态的数量

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

    • 要搜索的列: 任何标签键、标签值、字段键、字段值或 measurement。
    • 值: 要在指定列中搜索的值。
    • 状态计数列: 用于存储状态计数的新列,即指定值存在的连续记录数。
    |> stateCount
       (fn: (r) =>
        r._column_to_search == "value_to_search_for",
        column: "state_count"
      )
    
  2. 使用 stateCount() 搜索每个点的指定值

    • 对于第一个评估为 true 的点,状态计数设置为 1。对于每个连续评估为 true 的点,状态计数增加 1。
    • 如果状态为 false,则状态计数重置为 -1

使用 stateCount() 的查询示例

以下查询在过去 5 分钟内搜索 doors 存储桶,并计算有多少个点的 _valueclosed

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

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

查询结果

上面示例查询的结果可能如下所示(为简单起见,我们省略了 measurement、tag 和 field 列)

_time                   _value        door_closed
2019-10-26T17:39:16Z    closed        1
2019-10-26T17:40:16Z    closed        2
2019-10-26T17:41:16Z    closed        3
2019-10-26T17:42:16Z    open          -1
2019-10-26T17:43:16Z    closed        1
2019-10-26T17:44:27Z    closed        2

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

以下查询每分钟检查机器状态(空闲、已分配或繁忙)。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 开源版现已公开发布 Alpha 版

InfluxDB 3 开源版现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个作为 Alpha 版一部分的产品。

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

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