TL;DR InfluxDB 技术提示 – 如何使用 InfluxDB 监控状态

导航至

在这篇文章中,我们将学习如何使用 InfluxDB 监控状态。这篇 TL;DR 假设您已经知道如何创建检查。如果您是检查的新手,请阅读这篇“TL;DR – 使用任务和检查进行 InfluxDB 监控”。

问: 我可以使用 InfluxDB 以哪些方式监控状态? 答: 有几种方法可以使用 monitor states with InfluxDB。用于监控状态的一些 Flux 函数包括

问: 您能否提供一个关于如何使用 monitor.stateChanges() 的示例? 答: 让我们像之前的 TL;DR 一样,使用 monitor.stateChanges() 来计算太阳能电池的平均充电周期。在使用 monitor.StateChages 之前,您通常首先创建一个 threshold check。在这个例子中,我们使用 conditional logictask 中创建自定义状态

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 下评论。