OpenTSDB 消息存储

    EMQX 3.1 版本后推出强大的规则引擎用于替换插件,建议您前往使用保存数据到 OpenTSDB规则引擎中创建 保存数据到 OpenTSDB

    配置文件:etc/plugins/emqx_backend_opentsdb.conf:

    OpenTSDB Backend 消息存储规则参数:

    示例:

    1. backend.influxdb.hook.message.publish.1 = {"topic": "sensor/#", "action": {"function": "on_message_publish"}, "pool": "pool1"}
    2. ## 存储主题为 "stat/#" 的 PUBLISH 消息
    3. backend.influxdb.hook.message.publish.2 = {"topic": "stat/#", "action": {"function": "on_message_publish"}, "pool": "pool1"}

    OpenTSDB Backend 支持 Hook 与 相应内置函数列表:

    由于 MQTT Message 无法直接写入 OpenTSDB, OpenTSDB Backend 提供了 emqx_backend_opentsdb.tmpl 模板文件将 MQTT Message 转换为可写入 OpenTSDB 的 DataPoint。

    模板文件采用 Json 格式, 组成部分:

    • key - MQTT Topic, 字符串, 支持通配符主题
    • value - Template, Json 对象, 用于将 MQTT Message 转换成 OpenTSDB 的 DataPoint。

    Template 格式如下:

    1. {
    2. "tags": {
    3. <Tag Key>: <Tag Value>
    4. },
    5. "value": <Value>,
    6. "timestamp": <Timestamp>
    7. }

    measurementvalue 为必选项, 与 timestamp 为可选项。

    所有的值 (例如 <Measurement>) 你都可以直接在 Template 中配置为一个固定值, 它支持的数据类型依赖于你定义的数据表。当然更符合实际情况的是,你可以通过我们提供的占位符来获取 MQTT 消息中的数据。

    目前我们支持的占位符如下:

    $payload 与 $<Number>:

    你可以直接使用 $payload 取得完整的消息载荷, 也可以通过 ["$payload", <Key>, ...] 取得消息载荷内部的数据。

    例如 payload{"data": {"temperature": 23.9}}, 你可以通过占位符 ["$payload", "data", "temperature"] 来获取其中的 23.9

    一个简单例子, ["$payload", "$0", "temp"] 将从 [{"temp": 20}, {"temp": 21}] 中取得 [20, 21], 而 将只取得 20

    值得注意的是, 当你使用 $0 时,我们希望你取得的数据个数都是相等的。因为我们需要将这些数组转换为多条记录写入 OpenTSDB, 而当你一个字段取得了 3 份数据, 另一个字段却取得了 2 份数据, 我们将无从判断应当怎样为你组合这些数据。

    Example

    data/templates 目录下提供了一个示例模板 (emqx_backend_opentsdb_example.tmpl, 正式使用时请去掉文件名中的 “_example” 后缀) 供用户参考:

    当 Topic 为 “sample” 的 MQTT Message 拥有以下 Payload 时:

    1. {
    2. "data": [
    3. {
    4. "host": "serverA",
    5. "region": "hangzhou"
    6. },
    7. {
    8. "temp": 2,
    9. "host": "serverB",
    10. "region": "ningbo"
    11. }
    12. ]

    Backend 将 MQTT Message 转换为以下数据写入 OpenTSDB:

    启用 OpenTSDB 消息存储: