【问题标题】:MQTT Broker - Mosquitto Event LoggingMQTT 代理 - Mosquitto 事件记录
【发布时间】:2014-01-26 07:49:27
【问题描述】:

是否可以在 Ubuntu 12.04 上使用 MQTT Broker Mosquitto 将所有事件(例如发布到所有通道、订阅、客户端连接/断开连接和错误的消息)记录到带有时间戳的日志文件中,然后插入程序这个放到数据库是MongoDB还是SQL?

如果是这样,如何实现?

【问题讨论】:

    标签: mongodb logging mqtt database


    【解决方案1】:

    是的,你可以这样做。

    您可以通过执行以下示例将时间戳数据添加到 Mosquitto 输出:

    mosquitto_sub -v -t '#' | xargs -d$'\n' -L1 sh -c 'date "+%D %T $0"'

    您显然也可以通过执行以下操作将其输出到文本文件:

    mosquitto_sub -v -t '#' | xargs -d$'\n' -L1 sh -c 'date "+%D %T $0"' > /var/tmp/My_Mosquitto.log

    您可以通过以下方式查看日志文件:

    cat /var/tmp/My_Mosquitto.log

    然后您必须编写一个 php 脚本来读取此文本文件并将数据添加到数据库表中。

    另一个(更好)选项是使用 node.js 将所有 MQTT 数据记录到 mysql 数据库表中。网上有很多关于如何做到这一点的例子——我就是这样做的。

    【讨论】:

    • 这只记录发布的消息,它不记录只能从它自己的代理看到的订阅或连接
    【解决方案2】:

    AFAIK 现在用 mosquitto 是不可能的。对于这样的用例,我建议使用具有插件和消息拦截系统的 MQTT 代理,例如 HiveMQ。要查看所有交互,可以使用一些开源插件,例如 Message Log Plugin。源代码也可以在Github获得。

    写例如将消息发送到数据库look at this blog post,这应该可以帮助您入门。

    请注意,我可能有偏见,因为我在 HiveMQ 上工作。

    【讨论】:

    • 谢谢 我想出了一个使用 python MQTT 客户端和 pymongo 的解决方案。收到消息后,它会将其记录到带有时间戳、主题和消息有效负载的 mongodb 集合中。一旦我解决了错误,我会将其发布为答案。现在,设备在断开连接和连接时也会向通道发布消息。
    • @Keenan 你在哪里发布答案?