簡體   English   中英

如何使用 mqtt mosquitto 登錄日志

[英]how to log to journal with mqtt mosquitto

Mosquitto 具有廣泛的日志記錄機制。 但它似乎只能記錄系統日志。

有沒有辦法在不將其作為服務運行的情況下在 systemd 的日志中捕獲日志?

注意:蚊子在 docker 容器內運行

mosquitto.conf 日志記錄部分是:

    # =================================================================
    # Logging
    # =================================================================
    
    # Places to log to. Use multiple log_dest lines for multiple
    # logging destinations.
    # Possible destinations are: stdout stderr syslog topic file dlt
    #
    # stdout and stderr log to the console on the named output.
    #
    # syslog uses the userspace syslog facility which usually ends up
    # in /var/log/messages or similar.
    #
    # topic logs to the broker topic '$SYS/broker/log/<severity>',
    # where severity is one of D, E, W, N, I, M which are debug, error,
    # warning, notice, information and message. Message type severity is used by
    # the subscribe/unsubscribe log_types and publishes log messages to
    # $SYS/broker/log/M/susbcribe or $SYS/broker/log/M/unsubscribe.
    #
    # The file destination requires an additional parameter which is the file to be
    # logged to, e.g. "log_dest file /var/log/mosquitto.log". The file will be
    # closed and reopened when the broker receives a HUP signal. Only a single file
    # destination may be configured.
    #
    # The dlt destination is for the automotive `Diagnostic Log and Trace` tool.
    # This requires that Mosquitto has been compiled with DLT support.
    #
    # Note that if the broker is running as a Windows service it will default to
    # "log_dest none" and neither stdout nor stderr logging is available.
    # Use "log_dest none" if you wish to disable logging.
    log_dest syslog
    log_dest file /var/log/mosquitto/mosquitto.log
    
    # Types of messages to log. Use multiple log_type lines for logging
    # multiple types of messages.
    # Possible types are: debug, error, warning, notice, information,
    # none, subscribe, unsubscribe, websockets, all.
    # Note that debug type messages are for decoding the incoming/outgoing
    # network packets. They are not logged in "topics".
    #log_type error
    #log_type warning
    #log_type notice
    log_type all
    
    
    # If set to true, client connection and disconnection messages will be included
    # in the log.
    #connection_messages true
    
    # If using syslog logging (not on Windows), messages will be logged to the
    # "daemon" facility by default. Use the log_facility option to choose which of
    # local0 to local7 to log to instead. The option value should be an integer
    # value, e.g. "log_facility 5" to use local5.
    log_facility 5
    
    # If set to true, add a timestamp value to each log message.
    #log_timestamp true
    
    # Set the format of the log timestamp. If left unset, this is the number of
    # seconds since the Unix epoch.
    # This is a free text string which will be passed to the strftime function. To
    # get an ISO 8601 datetime, for example:
    # log_timestamp_format %Y-%m-%dT%H:%M:%S
    #log_timestamp_format
    
    # Change the websockets logging level. This is a global option, it is not
    # possible to set per listener. This is an integer that is interpreted by
    # libwebsockets as a bit mask for its lws_log_levels enum. See the
    # libwebsockets documentation for more details. "log_type websockets" must also
    # be enabled.
    #websockets_log_level 0

因為指定了log_dest syslog ,所以應該啟用記錄到 syslog,不是嗎?

/var/log/syslog中有 mosquitto 的日志:

    Nov 17 23:08:29 raspberrypi mosquitto[40]: 1668726509: Opening ipv6 listen socket on port 1883.
    Nov 17 23:08:29 raspberrypi mosquitto[40]: 1668726509: Opening ipv4 listen socket on port 1883.
    Nov 17 23:08:29 raspberrypi mosquitto[40]: 1668726509: Opening websockets listen socket on port 9001.
    Nov 17 23:08:29 raspberrypi mosquitto[40]: 1668726509: mosquitto version 2.0.15 running
    ...
    Nov 30 12:12:18 raspberrypi mosquitto[39]: 1669810338: Sending PUBLISH to shell (d0, q0, r0, m0, '$SYS/broker/load/bytes/sent/1min', ... (4 bytes))
    Nov 30 12:12:29 raspberrypi mosquitto[39]: 1669810349: Sending PUBLISH to shell (d0, q0, r0, m0, '$SYS/broker/load/bytes/sent/1min', ... (4 bytes))
    Nov 30 12:12:40 raspberrypi mosquitto[39]: 1669810360: Sending PUBLISH to shell (d0, q0, r0, m0, '$SYS/broker/load/bytes/sent/1min', ... (4 bytes))

但它們最終不會出現在期刊中。 我懷疑這是因為沒有 systemd init 在運行。 這可以解決嗎?

只需將 mosquitto 配置為記錄到系統日志,它就會出現在日志中。

設置log_dest syslog應該可以正常工作。

為清楚起見進行編輯。

這適用於我的 Fedora 36 機器,其中 journald 似乎正在使用 syslogd 消息,這可以通過運行journalctl -f -t mosquitto看到,其中 output 是通常的 mosquitto 啟動日志信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM