基于InfluxDB在Grafana中实现状态切换计数器
实现FALSE到TRUE切换的计数器(InfluxDB + Grafana)
要统计变量从FALSE切换到TRUE的次数,你可以基于现有Flux查询扩展,通过对比前后状态来实现,具体查询代码如下:
from(bucket: "test") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "In_Outs") |> filter(fn: (r) => r["_field"] == "variable_1") // 按时间正序排列,保证状态对比顺序正确 |> sort(columns: ["_time"], desc: false) // 为每条记录添加上一条的状态值 |> fill(column: "_value", usePrevious: true) |> keep(columns: ["_time", "_value", "_value_prev"]) // 标记从FALSE到TRUE的切换事件 |> map(fn: (r) => ({ r with is_transition: r._value == true and r._value_prev == false })) // 统计所有符合条件的切换次数 |> count(column: "is_transition") // 重命名计数字段,更直观 |> rename(columns: {is_transition: "switch_count"}) |> yield(name: "switch_count")
关键步骤说明
sort:必须先按时间排序,不然前后状态对比会出错fill(usePrevious: true):自动生成_value_prev字段,存储上一条记录的状态值map:判断当前状态是TRUE且上一条是FALSE时,标记为有效切换count:统计所有有效切换的总数
在Grafana里,把这个查询加到面板,选择「Stat」或「Single Stat」类型,就能直接显示这段时间内的切换总次数了。
内容的提问来源于stack exchange,提问作者Matías Idrobo
相关产品推荐
相关产品推荐

