TL;DR InfluxDB 技术提示 – 如何使用 InfluxDB 监控状态
By Anais Dotis-Georgiou / 产品, 用例, 开发者
2020年8月7日
导航至
在这篇文章中,我们将学习如何使用 InfluxDB 监控状态。这篇 TL;DR 假设您已经知道如何创建检查。如果您是检查的新手,请阅读这篇“TL;DR – 使用任务和检查进行 InfluxDB 监控”。
问: 我可以使用 InfluxDB 以哪些方式监控状态? 答: 有几种方法可以使用 monitor states with InfluxDB。用于监控状态的一些 Flux 函数包括
- stateDuration(): 允许您确定状态持续多长时间。
- stateCount(): 允许您计算连续状态的数量。
- monitor.stateChanges(): 允许您检测
_level
列从一个 级别到另一个 特定 级别的更改。 - monitor.stateChangesOnly(): 允许您检测
_level
列从 任何 级别到 任何其他 级别的所有 更改。
问: 您能否提供一个关于如何使用 monitor.stateChanges() 的示例? 答: 让我们像之前的 TL;DR 一样,使用 monitor.stateChanges() 来计算太阳能电池的平均充电周期。在使用 monitor.StateChages 之前,您通常首先创建一个 threshold check。在这个例子中,我们使用 conditional logic 在 task 中创建自定义状态
from(bucket: "solar")
|> range(start: -task.every)
|> filter(fn: (r) => r["_measurement"] == "battery")
|> filter(fn: (r) => r["_field"] == "kWh")
|> derivative(unit: 3s, nonNegative: false, columns: ["_value"], timeColumn: "_time")
|> map(fn: (r) => ({
r with
_level:
if r._value > 0.0 then "CH"
else "DH"
}))
现在您想确定何时发生充电周期。例如,您想监控 _level
何时从 CH
变为 DH
。
您可以使用以下方法执行此操作
|> monitor.stateChanges(
fromLevel: "CH",
toLevel: "DH"
)
此函数将返回一个表,其中包含 _level
首次更改为 DH
的所有时间。现在应用 elapsed() 函数和 mean() 函数来查找平均充电周期时间。
问: 如果我已使用任务分配自定义状态,并且我想将 monitor 包函数应用于 _level
列以外的其他列,该怎么办? 答: 遗憾的是,此功能不存在。但是,您可以使用 rename() 函数将您的列重命名为 _level
。
注意: 如果这种方法很麻烦,并且这种类型的功能增强对您很重要,请在此问题 #3075 下评论。