MQTT代理Mosquitto:日志消息内容

4
我正在使用 Mosquitto 作为 MQTT-broker,它提供了广泛的日志记录功能,但我无法找到如何将实际主题消息记录到文件中(甚至是按主题排序的文件树或数据库)。我看到有一个 "log_desc topic" 选项,但它要么不能像我期望的那样工作,要么就根本不起作用(可能是前者)。
我知道我可以从另一个进程在同一台机器上订阅一个(或所有)主题并将其导入文件,也知道有一种方法可以使用 Python 将再次获取的客户端数据写入数据库,但我想知道 Broker 是否能够将其通道数据写入某个地方,而不仅仅是元数据。
最终,我可能仍需要将其写入数据库,但现在将数据写入文件树甚至只写入一个大的日志文件也是可以的。Broker 服务是否能够实现这一点?
2个回答

6
不会的,mosquitto代理不会记录所有消息内容本身。最接近的做法是像下面这样:
1569256583: Received PUBLISH from mosq/F7RrCcwvgdVzEVpHi3 (d0, q0, r0, m0, 'test', ... (3 bytes))

这包括主题和消息大小,但不包括消息本身。
需要记住的重要一点是,消息内容不一定是文本,它可以是任何字节。 log_dest标志只是指定日志输出的位置,您可以使用log_type条目设置记录级别。

所以在这里最好的做法是让另一个进程订阅并记录那些数据吗?因为对我来说,这似乎是一个次优解决方案,因为很难保证订阅的进程确实获取到所有数据... - John Alba
2
使用mosquitto,您唯一的选择是单独的客户端,如果它以QOS 2订阅,则可以确信它将获取所有消息。其他代理商提供其他选项,例如HiveMQ具有直接日志记录功能,而Mosca则允许您编写自己的客户端。 - hardillb

5

我也在使用Mosquitto,想要记录一个主题的消息。

首先安装Mosquitto客户端。
对于Debian/Ubuntu,安装命令如下:

sudo apt install mosquitto-clients -y

那么

mosquitto_sub -v -t "topic/name" > mylog.txt

更多信息可以在文档中找到:
https://mosquitto.org/man/mosquitto_sub-1.html


我该如何在mosquitto启动后立即运行它?我尝试将其放在@reboot的cron下,但那不起作用。我猜这是因为mosquitto在cron之后启动了? - Joooeey

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