在Ubuntu 12.04上,是否可以使用MQTT Broker Mosquitto记录所有事件,例如发布到所有频道的消息、订阅、客户端连接/断开和错误,并将其带有时间戳的日志文件插入到数据库中,无论是Mongodb还是SQL?
如果可以,如何实现?
是的,你可以这样做。
例如,您可以通过以下方式向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数据库表中。互联网上有许多如何执行此操作的示例 - 这就是我所做的。
据我所知,目前使用mosquitto是不可能实现这个功能的。对于这种情况,我建议使用一个带有插件和消息拦截系统的MQTT代理,比如HiveMQ。为了查看所有的交互,有一些开源的插件可用,比如Message Log Plugin。源代码也可以在Github上找到。
如果想将消息写入数据库,请参考这篇博客文章,这应该能帮助你入门。
请注意,由于我在HiveMQ工作,所以我的观点可能有偏见。