TL;DR InfluxDB 技术技巧 - 如何使用 InfluxDB 监控状态
作者 Anais Dotis-Georgiou / 产品,用例,开发者
2020 年 8 月 7 日
导航到
在这篇博文中,我们将了解如何使用 InfluxDB 监控状态。本 TL;DR 假定您已经知道如何创建检查。如果您是检查的新手,请阅读这篇“TL;DR - 使用任务和检查进行 InfluxDB 监控”。
- monitor.stateChanges():允许您检测从
_level
列的一个级别到另一个 特定 级别的变化。 - monitor.stateChangesOnly():允许您检测
_level
列的 所有 变化,从 任何 级别到 任何其他 级别。
问题:您能提供一个如何使用 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"
}))
现在,您想要确定何时发生充电周期。例如,您想要监控当 _level
从 CH
变更到 DH
时。
您可以通过以下方式做到这一点:
|> monitor.stateChanges(
fromLevel: "CH",
toLevel: "DH"
)
此函数将返回一个表格,其中包含 _level
首次变为 DH
的所有时间。现在应用 elapsed() 函数和 mean() 函数以找到平均充电周期时间。
问题:如果我使用任务分配了自定义状态,并且我想将 monitor 包的函数应用于除了 _level
列之外的其他列?回答:很遗憾,这个功能还不存在。但是,您可以使用 rename() 函数将您的列重命名为 _level
。
注意:如果这种方法麻烦,并且此类功能增强对您很重要,请在此问题 #3075 上发表评论。