【问题标题】:mosquitto: log message contentsmosquitto:记录消息内容
【发布时间】:2019-09-24 00:39:59
【问题描述】:

我使用 mosquitto 作为 MQTT 代理,虽然它提供了广泛的日志记录功能,但我不知道如何将实际主题的消息记录到文件(甚至是按主题排序的文件树,甚至数据库)。我看到了 log_desc topic 选项,但要么它没有按照我的预期做,要么它不起作用(可能是第一个)。

我知道我可以从另一个进程订阅同一台机器上的一个(或所有)主题并将其通过管道传输到一个文件中,我知道有一种解决方案可以使用 python 将再次客户端获取的数据写入数据库,但是我想知道代理本身是否可以将其传输的数据写入某处,而不仅仅是元数据。

最后我可能还是需要将它写入数据库,但现在可以将数据写入文件树,甚至只是一个大日志文件。代理服务能做到吗?

【问题讨论】:

    标签: mqtt mosquitto


    【解决方案1】:

    不,mosquitto 代理不会记录它自己的所有消息内容。

    你能得到的最接近的是这样的:

    1569256583: Received PUBLISH from mosq/F7RrCcwvgdVzEVpHi3 (d0, q0, r0, m0, 'test', ... (3 bytes))
    

    这包括消息的主题和大小,但不包括消息本身。

    重要的是要记住消息内容不一定是文本,它可以是任何字节。

    log_dest 标志只是写入日志输出的位置,您可以使用 log_type 条目设置日志记录级别。

    【讨论】:

    • 所以这里的最佳做法是订阅另一个进程并记录该数据?因为这对我来说似乎是一个次优的解决方案,因为很难保证订阅的进程真的得到了一切......
    • 使用 mosquitto,您唯一的选择是单独的客户端,如果它以 QOS 2 订阅,那么您可以确信它会收到所有消息。其他经纪人提供其他选择,例如HiveMQ 具有直接日志记录,否则 Mosca 会让您自己编写