使用 InfluxDB 3 Core 和 Enterprise 进行告警
作者:Anais Dotis-Georgiou / 开发者
2025 年 3 月 11 日
导航至
监控的价值取决于告警的有效性,告警需要在关键问题失控之前将其浮出水面。借助 InfluxDB 3 Core 和 Enterprise,您可以通过利用自定义 Python 处理插件来扩展告警功能,超越内置解决方案。无论您需要实时通知以在超出阈值时发出警报,还是需要针对您的基础设施量身定制的高级异常检测,开发自定义告警逻辑都能确保您在正确的时间收到正确的警报。在这篇文章中,我们将深入探讨如何在 InfluxDB 3 中构建和集成告警插件。具体来说,我们将学习如何集成一个自定义告警插件,该插件会在关键指标超过阈值时通过 Slack、Discord 或其他 HTTP 端点通知您。这篇文章将逐步介绍如何设置和配置告警插件,涵盖其功能、设置和实际用例。
为什么自定义告警在 InfluxDB 3 中至关重要
InfluxDB 3 提供了强大的时序数据存储和查询功能,但实时检测异常需要高效的告警系统。告警插件可以在传感器值、CPU 使用率或任何受监控字段超过阈值时启用动态通知。
主要功能包括
- 多平台通知 – 支持 Slack、Discord 和通用 HTTP 端点
- 可配置的阈值 – 设置用于触发告警的自定义条件
- 灵活的消息 – 使用动态变量自定义告警内容
- 带有退避的重试 – 通过指数退避机制确保交付
- 环境变量支持 – 安全地配置 Webhook URL
虽然此插件侧重于为简单的基于阈值的条件发送告警,但您可以通过构建执行复杂异常检测或预测的自定义处理插件来扩展其功能。例如,您可以开发一个插件来分析趋势、检测异常并将标记的事件写入单独的数据库。然后,通过将阈值设置为 0
并将此告警插件指向异常数据库,您可以在每次检测到新异常时触发告警。这种模块化方法允许您将高级异常检测与实时通知集成,从而确保更智能和主动的监控系统。
入门:先决条件
这篇博文假设您已安装并正在使用 InfluxDB 3 Core 或 InfluxDB 3 Enterprise。此外,在设置告警之前,请安装 HTTP 请求所需的软件包
influxdb3 install package httpx
本教程还假设您已使用以下命令创建了两个数据库
influxdb3 create database my_databaseinflxudb3 create database alerts_history
设置通知
要将告警发送到 Slack,请设置 Webhook URL。对于测试,请使用公共 Webhook(不适用于生产环境)
export SLACK_WEBHOOK_URL= "https://hooks.slack.com/services/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"
这会将告警发布到 InfluxData Slack 社区的 #notifications-testing 频道。对于生产环境,请使用您自己的 Slack Webhook
export SLACK_WEBHOOK_URL="[your slack webhook]"
同样,要利用 Discord 集成,请设置 Discord Webhook
export DISCORD_WEBHOOK_URL="[your discord webhook]"
测试 influxdata/Anaisdg/Alerts/alert.py 插件
在运行以下命令之前,请确保将 alert.py 脚本放在 ~/influxdb3/plugins 中。
配置完成后,使用示例数据测试告警。例如,要在温度超过 20°C 时发送 Slack 告警,请运行
influxdb3 test wal_plugin \
--database my_database \
--lp="sensor_data,sensor=TempSensor1,location=living_room temperature=25 123456789" \
--input-arguments "name=temp_alert,endpoint_type=slack,threshold=20,field_name=temperature,notification_text=Alert: Temperature ${temperature} exceeds threshold,webhook_url=$SLACK_WEBHOOK_URL" \
alert.py
预期行为:温度字段超过 20,因此向 Slack 发送通知,消息为
"Temperature 25 exceeds threshold"
input-arguments
标志定义了插件的所有配置选项。以下是如何微调此特定插件
参数 | 是否必需? | 描述 |
名称 | 是 | 告警实例的唯一标识符 |
endpoint_type | 是 | 选择 slack、discord 或 http 作为告警 |
field_name | 是 | 要监控的字段(例如,temperature、cpu_usage) |
threshold | 是 | 触发告警的数值 |
notification_text | 可选 | 自定义告警消息(支持变量) |
webhook_url | 可选 | 覆盖环境变量 webhook |
headers | 可选 | HTTP 端点的 Base64 编码标头 |
alerts_db | 可选 | 用于存储告警历史记录以进行跟踪和分析的数据库 |
发送和跟踪告警
现在我们已经测试了插件,我们准备好设置并启用告警触发器。对于此示例,我们将向 Discord 发送告警通知并使用 alerts_db 选项
influxdb3 create trigger \
--database my_database \
--plugin-filename alert.py \
--trigger-spec "table:sensor_data" \
--trigger-arguments "name=temp_alert_trigger,endpoint_type=discord,threshold=20,field_name=temperature,notification_text=Value is \${temperature},webhook_url=$DISCORD_WEBHOOK_URL,alert_db=alerts_history" \
temperature_alert
influxdb3 enable trigger --database my_database temperature_alert
现在,我们可以写入测试数据并检查 alerts_history 数据库以确认我们的通知已发送,并且我们正在成功写入告警指标
influxdb3 write --database my_database "sensor_data,sensor=TempSensor1,location=living_room temperature=25"
influxdb3 query --database alerts_history "select * from sensor_data"
您的查询输出应如下所示
time | alert_message | sensor | location | plugin_name | processed_at | temperature |
---|---|---|---|---|---|---|
2025-02-25T00:25:40Z | Value is 25.0 | TempSensor1 | living_room | temp_alert | 2025-02-25T00:25:45Z | 25.0 |
最终想法
用于 InfluxDB 3 的 influxdata/Anaisdg/alert 插件提供了一种强大而灵活的方式来监控关键指标并实时触发通知。无论您需要 Slack、Discord 还是自定义 HTTP 告警,此插件都有助于确保关键问题永远不会被忽视。我希望本教程能帮助您开始使用 Python 插件进行告警,并在 InfluxDB 3 Core 和 Enterprise 中使用 Docker 启用触发器。我鼓励您查看 InfluxData/influxdb3_plugins,我们会在此处添加示例和插件。另外,请贡献您自己的插件!要了解有关构建自己的插件的更多信息,请查看以下资源
我邀请您在此处贡献您创建的任何插件。查看我们的 Core 入门指南 和 Enterprise,并在 Discord 的 #influxdb3_core 频道、Slack 的 #influxdb3_core 频道或我们的 社区论坛 上与我们的开发团队分享您的反馈。