TL;DR InfluxDB 技术提示 - 使用任务和检查进行 InfluxDB 监控
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2020 年 8 月 7 日
导航到
在这篇文章中,我们将学习如何结合使用 InfluxDB 的 任务 和 检查 进行监控。
问题: InfluxDB 的监控工作流程是什么?答案:根据文档,监控工作流程包括以下步骤
- 在 InfluxDB 中,检查 会查询数据,并根据特定条件分配一个基于
_level
的状态。 - InfluxDB 将检查的输出存储在
statuses
度量中,在_monitoring
系统桶中。 - 通知规则 会检查
statuses
度量中的数据,并根据通知规则中设置的条件向 通知端点 发送消息。 - InfluxDB 将通知存储在
notifications
度量中,在_monitoring
系统桶中。
问题:我可用哪些资源使用 Flux 和 InfluxDB 进行监控?答案:以下是一些可能有用的资源,如果您想使用 InfluxDB 监控您的数据:
- 监控数据和发送警报:包含如何使用 Flux 监控时间序列的一般信息。
- 监控状态:包含关于如何监控状态的一般信息。
- Flux InfluxDB 监控包:详细说明了 Flux 包 的监控功能,包括向端点发送通知的功能。如果您想了解更多关于通知和警报的信息,请查看此 Flux Discord 包。
问题:检查和警报之间有什么区别?答案:检查会在 InfluxDB 中查询您的数据,并对其应用状态。警报是基于您设置的 通知规则 发送到您的 通知端点 的通知。
问题:如何创建检查?答案:您可以通过 UI 创建检查。让我们创建一个检查系统可用内存百分比的检查。以下是创建检查的步骤。
-
-
- 在UI中切换到“警报”标签,创建一个新的检查。在这个例子中,我们将创建一个阈值检查。不过,您也可以创建一个死时间检查。 2. 给您的检查命名,例如“可用内存百分比”。使用数据探索器选择您想要创建检查的字段。对数据进行聚合操作。在这里,我们每15秒监控一次可用内存百分比的最高值。
创建检查的步骤1。定义查询并对其应用聚合操作。 3. 配置您的阈值。由于我们监控的是可用百分比,我将检查状态设置为“CRIT”,当系统可用内存低于20%时。我将检查状态设置为“WARN”,当系统可用内存介于20%-30%之间时(如果您仔细看,您会看到我将“WARN”状态定义为20.5%-29.5%的内存可用,以便您可以轻松地可视化阈值)。尽管这里没有显示配置,但当系统可用内存超过30%时,我将检查状态设置为“OK”。最后,我可以点击右上角的绿色勾选框来创建我的检查。-
创建检查的步骤2。配置检查。“CRIT”(红色线),“WARN”(黄色线)和“OK”(绿色线)为可用内存百分比配置的状态。
-
- 在UI中切换到“警报”标签,创建一个新的检查。在这个例子中,我们将创建一个阈值检查。不过,您也可以创建一个死时间检查。 2. 给您的检查命名,例如“可用内存百分比”。使用数据探索器选择您想要创建检查的字段。对数据进行聚合操作。在这里,我们每15秒监控一次可用内存百分比的最高值。
_level
列在哪里?答:切换到您的InfluxDB实例中的默认_monitoring
桶,并筛选您的检查ID或检查名称以查看结果。查看检查输出 问:阈值检查或死时间检查对我目前来说没有用。我需要先进行数据处理才能利用它。我该怎么做?答:您可以创建一个任务来先转换数据,并将输出写入新的桶或度量。然后您可以在转换后的数据上创建检查。例如,假设您想对超过某个值的功率水平发出警报,但您只有电流和电压数据。为了在功率上创建检查,您首先需要运行一个任务来从电压和电流计算功率。创建一个包含以下步骤的任务
现在,如果您需要当电池放电时发出警报,您可以创建一个检查来过滤您的数据,当from(bucket: "solar") |> range(start: -task.every) |> filter(fn: ® => r["_measurement"] == "battery") |> filter(fn: ® => r["_field"] == "kWh") |> derivative(unit: 3s, nonNegative: false, columns: ["_value"], timeColumn: "_time") |> map(fn: ® => ({ r with _battery_level: if r._value > 0.0 then "CH" else "DH" }))
|> filter(fn: ® => r["_level"] == "DH")
并且当值小于0时。通过创建以下消息将检查状态与您的自定义状态关联起来:Check: ${ r._check_name } is:${string(v: r._battery_level)}
这里使用Flux字符串插值是多余的,因为我们的_battery_level
已经是字符串。但是,我包含它以演示如何将字段类型转换为包含值以供消息使用。 重要说明:如果您使用此工作流程进行自定义状态,请确保不要将自定义状态列标记为_level
,因为这已被保留用于检查状态。 问题:我需要为我的检查添加超过4个状态。我该怎么办?答案:遗憾的是,您无法在一个检查中添加超过4个状态。但是,您始终可以创建一个新的检查以包含更多状态。例如,您可以用描述性名称将检查分开,以基于标签或阈值级别区分状态。再次,我鼓励您利用通知消息来使警报更加清晰。注意:如果您觉得这种方法很繁琐,并且对允许您为一个检查添加超过4个状态的特性增强感兴趣,请在此问题#19208上留言。 -