MQTT代理 - Mosquitto事件记录

3

在Ubuntu 12.04上,是否可以使用MQTT Broker Mosquitto记录所有事件,例如发布到所有频道的消息、订阅、客户端连接/断开和错误,并将其带有时间戳的日志文件插入到数据库中,无论是Mongodb还是SQL?

如果可以,如何实现?

2个回答

0

是的,你可以这样做。

例如,您可以通过以下方式向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数据库表中。互联网上有许多如何执行此操作的示例 - 这就是我所做的。


这仅记录已发布的消息,不会记录订阅或连接,这些只能从代理(broker)本身看到。 - hardillb

0

据我所知,目前使用mosquitto是不可能实现这个功能的。对于这种情况,我建议使用一个带有插件和消息拦截系统的MQTT代理,比如HiveMQ。为了查看所有的交互,有一些开源的插件可用,比如Message Log Plugin。源代码也可以在Github上找到。

如果想将消息写入数据库,请参考这篇博客文章,这应该能帮助你入门。

请注意,由于我在HiveMQ工作,所以我的观点可能有偏见。


1
谢谢,我用Python的MQTT客户端和pymongo找到了一个解决方案。当接收到消息时,它会将其记录到一个MongoDB集合中,并标记上时间戳、主题和消息载荷。一旦我解决了其中的问题,我会将其发布为答案。设备还会在断开连接和重新连接时向频道发布一条消息。 - Keenan
@Keenan,你把答案发布在哪里了? - Ali Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接