如何使用 InfluxDB 3 Processing Engine 设置实时 SMS/WhatsApp 警报

导航至

在工业物联网实时监控中,及时警报至关重要。虽然 Slack 和电子邮件通知很常见,但它们很容易被错过或淹没在大量其他通知中。另一方面,SMS 和 WhatsApp 提供了难以忽视的即时性和直接性。将 InfluxDB 3 Core 与 SMS 和 WhatsApp 警报结合使用,可以提供实时答案和信息,以便在问题发生时纠正问题,使员工能够实时纠正问题并节省停机时间造成的成本。

本文将指导您通过利用 InfluxDB 3 的嵌入式 Python 处理引擎设置 SMS 和 WhatsApp 警报。我们还将使用第三方服务 Twilio 进行消息传递和一个简单的 Python 插件。

为什么选择 InfluxDB 3

InfluxDB 3 是一个独立的数据库,可以轻松部署在云端或在本地运行,例如在 Raspberry Pi 5 或 Linux 机器上,这两者在工业物联网中都很常用。对于我们的示例项目,SMS/WhatsApp 插件可以与 InfluxDB 3 CoreEnterprise 一起使用,因为两者都支持处理引擎。

在开始之前,您需要在您的机器上安装 Core 或 Enterprise。您可以在此处免费下载数据库。

用例:SMS/WhatsApp 警报

我们将使用工业物联网中的一个典型示例:实时温度监控。持续高温可能表明冷却系统出现故障,可能导致硬件损坏或停机。系统会将周期性传感器测量值写入 InfluxDB 3(Core/Enterprise),如果温度超过预定义的阈值,则发送 SMS/WhatsApp 警报。

SMS Alert

短信警报

WhatsApp Alert

WhatsApp 警报

除了温度监控之外,此警报系统还可以适应各种关键场景,例如

  • 物联网
    • 制冷装置故障警报(温度等)
    • 工业设备故障警告(压力、振动等)
    • 环境监控(湿度、空气质量)
  • DevOps(包括安全运维)
    • 服务器崩溃通知。
    • 服务不可用
    • 应用程序错误率飙升
    • 入侵检测警报
    • 可疑登录尝试
    • 防火墙入侵通知

架构

此代码演示将与 InfluxDB 3(Core/Enterprise)一起使用,我们将利用其强大的新处理引擎来处理传入的流式温度数据,并在数据库中执行自定义 Python 代码(使用插件)。这消除了许多常见警报和转换任务对外部任务运行器或复杂数据管道的需求。

数据流如下

  1. 数据源:温度传感器(或其他数据源)
  2. InfluxDB 客户端 API 或 CLI:使用行协议写入数据
  3. 处理引擎(触发器和插件):InfluxDB 3 处理引擎是一个嵌入式 Python VM,用于在数据库内部运行代码以处理和转换数据。它运行的代码称为插件。该插件具有一个 Python 函数,该函数具有与处理引擎触发器兼容的签名,如下面的代码片段所示。

InfluxDB 3 提供以下类型的触发器

  • WAL Flush 触发器:将一批写入的数据(针对特定表或所有表)发送到插件(默认情况下,每秒一次)。我们将使用此触发器进行 SMS 警报逻辑。
  • 计划触发器:在用户配置的计划(使用 crontab 或持续时间)执行插件,对于数据收集和死信监控非常有用。
  • 按需触发器:将插件绑定到 /api/v3/engine/<ENDPOINT> 的自定义 HTTP API 端点。插件接收 HTTP 请求标头和内容,然后可以解析、处理数据并将其发送到数据库或第三方服务。
#WAL-Flush trigger
def` process_writes(influxdb3_local, table_batches, args):
    success, config = get_config(args)
    if not success:
        # ... handle errors ...
        return
    process_wal_flush(influxdb3_local, table_batches, config)


1. Twilio (SMS/WhatsApp 消息传递):插件代码依赖于一个流行的第三方服务 Twilio 以编程方式发送 SMS 或 WhatsApp 消息。如果需要,您可以轻松替换为其他消息传递服务。

此项目的完整示例代码可以在 GitHub 上找到。

在本地创建包含以下内容的配置文件

#.env file
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_FROM_NUMBER=xxxxxxxxxx
TWILIO_TO_NUMBER=xxxxxxxxxx
# Optional: For WhatsApp

TWILIO_FROM_WHATSAPP_NUMBER=xxxxxxxxxx
TWILIO_TO_WHATSAPP_NUMBER=xxxxxxxxxx

2. 启动 InfluxDB 3 Core

有关如何安装和设置 InfluxDB 3 的详细指南,请参阅官方指南。要遵循此项目的详细步骤,请参阅此 GitHub README。要激活处理引擎,我们添加选项 --plugin-dir <PLUGIN_DIR>,它指向文件系统中插件“sms-alert.py”所在的目录。

influxdb3 serve \
  --node-id host01 \
  --object-store file \
  --data-dir ~/.influxdb3
  --plugin-dir ~/.plugins

3. 安装插件代码所需的包

influxdb3 install package twilio python-dotenv

4. 创建数据库

influxdb3 create database room-temp

5. 创建表

influxdb3 create table temp

6. 创建触发器

influxdb3 create trigger \
  --trigger-spec "all_tables:" \
  --plugin-filename "sms-alert.py" \
  --database room-temp \
  wal_alert \
  --trigger-arguments "field_name=temperature,threshold=22.5"

7. 启用触发器

influxdb3 enable trigger --database room-temp wal_alert

8. 使用 wal_plugin 测试触发器以发送 SMS/Whatsapp 警报

influxdb3 test wal_plugin \
  --lp "temp,location=factory temperature=90i 1678886400000000000" \
  --input-arguments "field_name=temperature,threshold=80" \
  --database room-temp \
  sms-alert.py

在此测试中,值为 90 的温度超过了我们的阈值 80,从而发送了 SMS/WhatsApp 警报。这就是使用 WAL Flush Trigger 创建具有直接规则的 SMS/Whatsapp 警报的全部内容。

总结

InfluxDB 3 处理引擎功能非常强大。在未来的文章中,我们将介绍如何使用 Raspberry Pi 收集温度和湿度数据,并使用不同的触发器(例如计划触发器和 HTTP 触发器)构建其他插件。欢迎您克隆/fork 此项目或分享您自己的处理引擎插件——我们很高兴重点介绍您的项目!同时,我们欢迎您在 #influxdb3_core 频道中的 Discord、#influxdb3_core 频道中的 Slack 或我们的 社区论坛上提供您的反馈、问题和评论。