TL;DR InfluxDB 技术技巧 - 如何使用 InfluxDB 监控状态

导航到

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

问题:您能提供一个如何使用 monitor.stateChanges() 的示例吗?回答:让我们使用 monitor.stateChanges() 来计算像之前 TL;DR 中那样的太阳能电池的平均充电周期。在使用 monitor.StateChages 之前,您通常首先创建一个 阈值检查。在这个示例中,我们使用 条件逻辑 在一个 任务 中创建自定义状态。

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"
}))

现在,您想要确定何时发生充电周期。例如,您想要监控当 _levelCH 变更到 DH 时。

您可以通过以下方式做到这一点:

|> monitor.stateChanges(
fromLevel: "CH",
toLevel: "DH"
)

此函数将返回一个表格,其中包含 _level 首次变为 DH 的所有时间。现在应用 elapsed() 函数和 mean() 函数以找到平均充电周期时间。

问题:如果我使用任务分配了自定义状态,并且我想将 monitor 包的函数应用于除了 _level 列之外的其他列?回答:很遗憾,这个功能还不存在。但是,您可以使用 rename() 函数将您的列重命名为 _level

注意:如果这种方法麻烦,并且此类功能增强对您很重要,请在此问题 #3075 上发表评论。