This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

mqtt(): Send messages from a local network to an MQTT broker

From version 3.33, you can use the mqtt() destination to publish messages to MQTT brokers.

The mqtt() destination builds on the MQTT protocol, and uses its “client” and “broker” entities.

Declaration:

   destination d_mqtt { 
      mqtt(
        topic("<topic-name>"), 
        address("tcp://localhost:<port-number>"),   
        fallback_topic("<fallback-topic-name>")
      ); 
    }

Example: Using the mqtt() destination in your configuration

The following example illustrates a mqtt() destination configured to fetch messages from the localhost:4444 address, and send them to the broker running on localhost:4445, using the mqtt test/test topic.

   @version: 3.32
    @include "scl.conf"
    
      source s_net { 
        network(port(4444)
      ); 
    };
    
      destination d_mqtt { 
        mqtt(topic("test/test"), address("tcp://localhost:4445"), fallback_topic("test/test")
      ); 
    };
                    
    log { 
      source(s_net); 
      destination( d_mqtt); 
    };

1 - Prerequisites to using the mqtt() destination

Using the current implementation of the mqtt() destination has the following prerequisites:

  • Installing the eclipse-paho-mqtt-c library.

  • Having a broker entity in a functional MQTT system.

2 - Limitations to using the mqtt() destination

Using the mqtt() destination of AxoSyslog has the following limitations:

  • You can only use the mqtt() destination with AxoSyslog version 3.33 or higher.

  • You cannot use the mqtt() destination without installing the the eclipse-paho-mqtt-c library.

    For more information about how you can download and install the eclipse-paho-mqtt-c library, see Eclipse Paho on the Eclipse Foundation website.

  • The current implementation of the mqtt() destination supports versions 3.1 and 3.1.1 of the MQTT protocol.

3 - Options of the mqtt() destination

The mqtt() destination has the following options.

Required options: address(), fallback-topic(), and topic().

address()

Type:string
Default:tcp://localhost:1883
Required:yes

Description: Specifies the hostname or IP address, and the port number of the MQTT broker to which AxoSyslog will send the log messages.

Syntax: <protocol type>://<host>:<port>

Supported protocol types: TCP, WS, SSL andWSS.

client-id()

Type:string
Default:syslog-ng-source-{topic option}
Required:no

Description: The client-id() is used to identify the client to the MQTT server, which stores session data for each client. The session data can contains information regarding which message has been sent, received. It is not possible to set the client-id() to an empty string. To always start a new session see the cleansession() option.

cleansession()

Type:`yes
Default:no

Description: This option instruments the MQTT broker to clean the session data when connecting. The session data contains information about which message was processed.

fallback-topic()

Type:string
Default:N/A

Description: Required option when using templates in the topic() option.

If the resolved topic() template is not a valid topic, AxoSyslog will use the fallback-topic() option to send messages.

http-proxy()

Type:URL
Default:N/A

Description: Specifies HTTP/HTTPS proxy for WebSocket connections.

keep-alive()

Type:positive integer number (in seconds)
Default:60

Description: Specifies the number of seconds that AxoSyslog keeps the connection between the broker and clients open in case there is no message traffic. When keep-alive() number of seconds pass, the connection is terminated, and you have to reconnect.

On the MQTT side, the keep alive function provides a workaround method to access connections that are still open.

password()

Type:string
Default:N/A

Description: The password used to authenticate on the MQTT broker.

qos()

Type:number
Default:`0`

Possible values:

`0` - at most once (the fastest option)

`1` - at least once (a much slower option than `0`)

`2` - exactly once (the slowest option)

Description: The Quality of Service (QoS) level in MQTT messaging is an agreement between sender and receiver on the guarantee of delivering a message.

template()

Type:string
Default:$ISODATE $HOST $MSGHDR$MSG

Description: Specifies the message template that AxoSyslog sends to the MQTT broker.

If you want to use macros in templates, see Macros of AxoSyslog.

tls()

Type:tls options
Default:n/a

Description: This option sets various options related to TLS encryption, for example, key/certificate files and trusted CA locations. TLS can be used only with tcp-based transport protocols. For details, see TLS options.

The following options are relevant for the mqtt() tls() block: ca-dir(), ca-file(), cert-file(), cipher-suite(), key-file(), peer-verify(), ssl-version(), use-system-cert-store().

topic()

Type:string or template
Default:N/A

Description: Required option. Specifies the MQTT topic.

username()

Type:string
Default:N/A

Description: The username used to authenticate on the MQTT broker.

4 - Possible error messages you may encounter while using the mqtt() destination

While using the mqtt() destination, you may encounter issues and corresponding error messages originating from the MQTT system. The following table contains the error messages you may encounter, the possible reasons behind them, and potential workaround methods.

Complete error messagePossible reason(s)Possible solution(s)
ERROR, while init threaded dest.

The AxoSyslog application will not start.

You can try the following methods:

  • Restart AxoSyslog.

  • Stop some of the programs running on your computer.

  • Restart your computer, and then restart AxoSyslog.

mqtt: the topic() argument is required for mqtt destinations.

The topic() option is not set in your configuration. The AxoSyslog application will not start.

Set the missing topic() option in your configuration, then restart .

The mqtt destination does not support the batching of messages, ...

Your configuration may contain the batch-timeout() and / or batch-lines() options, which are not supported by the mqtt() destination. The AxoSyslog application will not start.

If your configuration contains the batch-timeout() and / or batch-lines() options, remove them from your configuration, and restart .

Disconnected during publish!

The AxoSyslog application can not send the message, because AxoSyslog disconnected from the broker. By default, AxoSyslog attempts to reconnect to the broker and send the messages 3 times.

If AxoSyslog fails all 3 attempts to reconnect to the broker and send the messages, you can try checking your configuration or restarting your MQTT system with AxoSyslog as a client.

Max message inflight! (publish)

The AxoSyslog application can not send the message due to the max message inflight broker response code (which signals that the broker has received too many messages, and it needs more time to process them). The AxoSyslog application will attempt to resend the message.

Wait until the broker can process the in-flight messages and AxoSyslog can attempt to resend the message.

Failure during publishing!

The AxoSyslog application can not send the message due to the failure broker response code. The AxoSyslog application will attempt to resend the message.

N/A

Error during publish!

The AxoSyslog application can not send the message, and drops it.

Possible reason: bad_utf8_string (topic), NULL parameter`.

That is, the most probable reasons behind this issue are either that the topic name in your configuration is not correct, or that the message field is empty.

You can try the following methods:

  • Modify the name of the topic() option in your configuration.

  • Make sure that the message field is not empty.

Disconnected while waiting the response!

The AxoSyslog application has sent the message, but the client disconnected from the broker before AxoSyslog received the response. The AxoSyslog application will attempt to reconnect, or to resend the message.

The AxoSyslog application will attempt to reconnect to the broker and send the in-flight message. If the reconnect attempt fails, AxoSyslog will resend the message.

"Error while waiting the response!"

The AxoSyslog application can not get any response from the broker, due to the failure broker response code. The AxoSyslog will attempt to resend the message.

In this case, you will receive a further error message, depending on what the problem is. Wait for the second error message for more information about how you can proceed.

"Error constructing topic ..."

Due to an issue with the configured topic template, the mqtt() destination will use the fallback-topic() option instead.

N/A
mqtt dest: topic name is illegal, it can't be empty

This error message is related to the "Error constructing topic ..." error message.

In this case, the topic template returns a 0 length string. As a result, the mqtt() destination will use the fallback-topic() option instead.

N/A
Error connecting mqtt client ...

The AxoSyslog application can not connect to broker, and it will attempt to reconnect later.

If the issue persists, you can try the following:

  • Update your eclipse-paho-mqtt-c library.

  • Restart AxoSyslog.

Error creat mqtt client ...

The AxoSyslog application encountered an error while creating the MQTT client, and it will attempt to create it later.

Possible reasons:

  • There is a wrong address() set in your configuration.

  • The broker is not running.

You can try the following methods:

  • Check the address() option in your configuration, and modify if necessary.

  • Check if the specified broker is running by connecting to it manually, and then sending the broker a message.