Using the current implementation of the mqtt() destination has the following prerequisites:
Using the mqtt() destination of syslog-ng OSE has the following limitations:
-
You can only use the mqtt() destination with syslog-ng OSE 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.
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 syslog-ng OSE 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 | no |
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, syslog-ng OSE will use the fallback-topic() option to send messages.
NOTE: If instead of strings, you use actual templates (that is, a macro like ${MESSAGE}, or a template function like $(format-json)) in the topic() option, configuring the fallback-topic() option is required.
TIP: Occasionally, the reason why syslog-ng OSE cannot post messages to the configured topic() is that the topic contains invalid characters that originate from templates.
http-proxy()
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 syslog-ng OSE 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 syslog-ng OSE sends to the MQTT broker.
If you want to use macros in templates, see Macros of syslog-ng OSE.
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.
NOTE: The current implementation of the mqtt() destination does not support using the following characters for topic names:
username()
Type: |
string |
Default: |
N/A |
Description: The username used to authenticate on the MQTT broker.
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.
"ERROR, while init threaded dest. ..." |
The syslog-ng OSE application will not start. |
You can try the following methods:
-
Restart syslog-ng OSE.
-
Stop some of the programs running on your computer.
-
Restart your computer, and then restart syslog-ng OSE. |
"mqtt: the topic() argument is required for mqtt destinations. ..." |
The topic() option is not set in your configuration. The syslog-ng OSE 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 syslog-ng OSE 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 syslog-ng OSE application can not send the message, because syslog-ng OSE disconnected from the broker. By default, syslog-ng OSE attempts to reconnect to the broker and send the messages 3 times. |
If syslog-ng OSE 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 syslog-ng OSE as a client. |
"Max message inflight! (publish)" |
The syslog-ng OSE 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 syslog-ng OSE application will attempt to resend the message.
|
Wait until the broker can process the in-flight messages and syslog-ng OSE can attempt to resend the message. |
"Failure during publishing!" |
The syslog-ng OSE application can not send the message due to the failure broker response code. The syslog-ng OSE application will attempt to resend the message.
|
N/A |
"Error during publish!" |
The syslog-ng OSE 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:
|
"Disconnected while waiting the response!" |
The syslog-ng OSE application has sent the message, but the client disconnected from the broker before syslog-ng OSE received the response. The syslog-ng OSE application will attempt to reconnect, or to resend the message. |
The syslog-ng OSE application will attempt to reconnect to the broker and send the in-flight message. If the reconnect attempt fails, syslog-ng OSE will resend the message. |
"Error while waiting the response!"
|
The syslog-ng OSE application can not get any response from the broker, due to the failure broker response code. The syslog-ng OSE 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 syslog-ng OSE application can not connect to broker, and it will attempt to reconnect later. |
If the issue persists, you can try the following:
|
"Error creat mqtt client ..." |
The syslog-ng OSE application encountered an error while creating the MQTT client, and it will attempt to create it later.
Possible reasons:
|
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. |