You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

InfluxDB查询:统计各机器最新状态的激活机器总数

解决方案:InfluxDB Flux 查询实现机器可用性统计

基础查询(实时获取当前在用机器总数)

以下是满足你三个需求的完整Flux查询,针对实时获取最新状态的机器总数场景:

// 替换为你的实际bucket名称
option v = {bucket: "your_bucket_name"}

from(bucket: v.bucket)
  // 时间范围:取最近1天的数据,可根据数据写入频率调整(比如-1m表示最近1分钟)
  |> range(start: -1d)
  // 过滤目标测量表和字段
  |> filter(fn: (r) => r._measurement == "machines_a_laver" and r._field == "status")
  // 按机器ID分组,确保每个机器单独处理
  |> group(columns: ["machine_id"])
  // 取每台机器的最新状态记录(需求1)
  |> last()
  // 将状态转换为数值:ACTIVATED=1,DEACTIVATED=0(需求2)
  |> map(fn: (r) => ({
      r with
      _value: if r._value == "ACTIVATED" then 1 else 0
    }))
  // 取消分组,准备全局求和
  |> group()
  // 求和得到当前在用机器总数(需求3)
  |> sum(column: "_value")

时间序列聚合查询(按时间点统计,适合制作图表)

如果需要生成类似「下午4点10台、晚上7点0台」的时间序列数据(用于可用性图表),可以加上时间窗口聚合:

option v = {bucket: "your_bucket_name"}

from(bucket: v.bucket)
  |> range(start: -7d) // 取最近7天数据,按需调整
  |> filter(fn: (r) => r._measurement == "machines_a_laver" and r._field == "status")
  // 按1小时窗口聚合,可修改every参数调整粒度(比如10m=10分钟)
  |> aggregateWindow(
      every: 1h,
      fn: (tables=<-) =>
          tables
              |> group(columns: ["machine_id"])
              |> last() // 取窗口内每台机器的最新状态
              |> map(fn: (r) => ({r with _value: if r._value == "ACTIVATED" then 1 else 0}))
              |> group()
              |> sum(column: "_value"),
      createEmpty: false // 忽略无数据的窗口
    )

关键步骤说明

  1. 获取最新状态:通过group(columns: ["machine_id"])按机器分组后,last()函数会提取每个机器的最新状态记录,确保统计的是当前最新状态而非历史数据。
  2. 状态数值转换:使用map函数的条件判断,将字符串状态转为可计算的数值,为后续求和做准备。
  3. 求和统计总数:取消分组后,sum(column: "_value")会对所有机器的数值状态进行汇总,得到在用机器的总数量。

内容的提问来源于stack exchange,提问作者Androz2091

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:48:29