1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
|
**********************************************************
omazureeventhubs: Microsoft Azure Event Hubs Output Module
**********************************************************
=========================== ===========================================================================
**Module Name:** **omazureeventhubs**
**Author:** Andre Lorbach <alorbach@adiscon.com>
**Available since:** v8.2304
=========================== ===========================================================================
Purpose
=======
The purpose of the rsyslog output plugin omazureeventhubs is to provide a
fast and reliable way to send log data from rsyslog to Microsoft Azure Event Hubs.
This plugin uses the Advanced Message Queuing Protocol (AMQP) to securely transmit
log data from rsyslog to Microsoft Azure, where it can be centralized, analyzed, and stored.
The plugin uses the "Qpid Proton C API" library to implement the AMQP protocol,
providing a flexible and efficient solution for sending log data to Microsoft Azure Event Hubs.
AMQP is a reliable and secure binary protocol for exchanging messages between applications,
and it is widely used in the cloud and enterprise messaging systems. The use of AMQP in the
omazureeventhubs plugin, in combination with the Qpid Proton C API library, ensures that
log data is transmitted in a robust and reliable manner, even in the presence of network
outages or other disruptions.
The omazureeventhubs plugin supports various configuration options, allowing organizations to
customize their log data pipeline to meet their specific requirements.
This includes options for specifying the Event Hubs endpoint, port, and authentication credentials.
With this plugin, organizations can easily integrate their rsyslog infrastructure with
Microsoft Azure Event Hubs, providing a scalable and secure solution for log management.
The plugin is designed to work with the latest versions of rsyslog and Microsoft Azure,
ensuring compatibility and reliability.
Requirements
============
To output logs from rsyslog to Microsoft Azure Event Hubs, you will need to fulfill the
following requirements:
- Qpid Proton C Library Version 0.13 or higher including Qpid Proton ProActor
- The AMQP Protocol needs to have firewall Ports 5671 and 443 TCP to be open for outgoing connections.
Configuration Parameters
========================
.. note::
Parameter names are case-insensitive.
Action Parameters
-----------------
azurehost
^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"word", "none", "yes", "none"
Specifies the fully qualified domain name (FQDN) of the Event Hubs instance that
the rsyslog output plugin should connect to. The format of the hostname should
be **<namespace>.servicebus.windows.net**, where **<namespace>** is the name
of the Event Hubs namespace that was created in Microsoft Azure.
azureport
^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"word", "5671", "no", "none"
Specifies the TCP port number used by the Event Hubs instance for incoming connections.
The default port number for Event Hubs is 5671 for connections over the
AMQP Secure Sockets Layer (SSL) protocol. This property is usually optional in the configuration
file of the rsyslog output plugin, as the default value of 5671 is typically used.
azure_key_name
^^^^^^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive", "Available since"
:widths: auto
:class: parameter-table
"word", "none", "yes", "none"
The configuration property for the Azure key name used to connect to Microsoft Azure Event Hubs is
typically referred to as the "Event Hubs shared access key name". It specifies the name of
the shared access key that is used to authenticate and authorize connections to the Event Hubs instance.
The shared access key is a secret string that is used to securely sign and validate requests
to the Event Hubs instance.
azure_key
^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"word", "none", "yes", "none"
The configuration property for the Azure key used to connect to Microsoft Azure Event Hubs is
typically referred to as the "Event Hubs shared access key". It specifies the value of the
shared access key that is used to authenticate and authorize connections to the Event Hubs instance.
The shared access key is a secret string that is used to securely sign and validate requests
to the Event Hubs instance.
container
^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"word", "none", "yes", "none"
The configuration property for the Azure container used to connect to Microsoft Azure Event Hubs is
typically referred to as the "Event Hubs Instance". It specifies the name of the Event Hubs Instance,
to which log data should be sent.
template
^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"word", "RSYSLOG_FileFormat", "no", "none"
Specifies the template used to format and structure the log messages that will be sent from rsyslog to
Microsoft Azure Event Hubs.
The message template can include rsyslog variables, such as the timestamp, hostname, or process name,
and it can use rsyslog macros, such as $rawmsg or $json, to control the formatting of log data.
For a message template sample with valid JSON output see the sample below:
.. code-block:: none
template(name="generic" type="list" option.jsonf="on") {
property(outname="timestamp" name="timereported" dateFormat="rfc3339" format="jsonf")
constant(value="\"source\": \"EventHubMessage\", ")
property(outname="host" name="hostname" format="jsonf")
property(outname="severity" name="syslogseverity" caseConversion="upper" format="jsonf" datatype="number")
property(outname="facility" name="syslogfacility" format="jsonf" datatype="number")
property(outname="appname" name="syslogtag" format="jsonf")
property(outname="message" name="msg" format="jsonf" )
property(outname="etlsource" name="$myhostname" format="jsonf")
}
amqp_address
^^^^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"word", "none", "no", "none"
The configuration property for the AMQP address used to connect to Microsoft Azure Event Hubs is
typically referred to as the "Event Hubs connection string". It specifies the URL that is used to connect
to the target Event Hubs instance in Microsoft Azure. If the amqp_address is configured, the configuration
parameters for **azurehost**, **azureport**, **azure_key_name** and **azure_key** will be ignored.
A sample Event Hubs connection string URL is:
.. code-block:: none
amqps://[Shared access key name]:[Shared access key]@[Event Hubs namespace].servicebus.windows.net/[Event Hubs Instance]
eventproperties
^^^^^^^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"array", "none", "no", "none"
The **eventproperties** configuration property is an array property used to add key-value pairs as additional properties to the
encoded AMQP message object, providing additional information about the log event.
These properties can be used for filtering, routing, and grouping log events in Azure Event Hubs.
The event properties property is specified as a list of key-value pairs separated by comma,
with the key and value separated by an equal sign.
For example, the following configuration setting adds two event properties:
.. code-block:: none
eventproperties=[ "Table=TestTable",
"Format=JSON"]
In this example, the Table and Format keys are added to the message object as event properties,
with the corresponding values of TestTable and JSON, respectively.
closeTimeout
^^^^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"integer", "2000", "no", "none"
The close timeout configuration property is used in the rsyslog output module
to specify the amount of time the output module should wait for a response
from Microsoft Azure Event Hubs before timing out and closing the connection.
This property is used to control the amount of time the output module will wait
for a response from the target Event Hubs instance before giving up and
assuming that the connection has failed. The close timeout property is specified in milliseconds.
statsname
^^^^^^^^^
.. csv-table::
:header: "type", "default", "mandatory", "|FmtObsoleteName| directive"
:widths: auto
:class: parameter-table
"word", "omazureeventhubs", "no", "none"
The name assigned to statistics specific to this action instance. The supported set of
statistics tracked for this action instance are **submitted**, **accepted**, **failures** and **failures_other**.
See the :ref:`statistics-counter_omazureeventhubs_label` section for more details.
.. _statistics-counter_omazureeventhubs_label:
Statistic Counter
=================
This plugin maintains global :doc:`statistics <../rsyslog_statistic_counter>` for omazureeventhubs that
accumulate all action instances. The statistic origin is named "omazureeventhubs" with following counters:
- **submitted** - This counter tracks the number of log messages that have been submitted by the rsyslog process
to the output module for delivery to Microsoft Azure Event Hubs.
- **accepted** - This counter tracks the number of log messages that have been successfully delivered to
Microsoft Azure Event Hubs by the output module.
- **failures** - This counter tracks the number of log messages that have failed to be delivered to
Microsoft Azure Event Hubs due to various error conditions, such as network connectivity issues,
incorrect configuration settings, or other technical problems. This counter provides important information about
any issues that may be affecting the delivery of log data to Microsoft Azure Event Hubs.
- **failures_other** - This counter tracks the number of log messages that have failed to be delivered due to
other error conditions, such as incorrect payload format or unexpected data.
These statistics counters are updated in real-time by the rsyslog output module as log data is processed,
and they provide valuable information about the performance and operation of the output module.
For multiple actions using statistics callback, there will be one record for each action.
.. _omazureeventhubs-examples-label:
Examples
========
Example 1: Use AMQP URL
-----------------------
The following sample does the following:
- loads the omazureeventhubs module
- outputs all logs to Microsoft Azure Event Hubs with standard template
- Uses amqp_address parameter
.. code-block:: none
module(load="omazureeventhubs")
action(type="omazureeventhubs" amqp_address="amqps://<AccessKeyName>:<AccessKey>@<EventHubsNamespace>.servicebus.windows.net/<EventHubsInstance>")
Example 2: RAW Format
---------------------
The following sample does the following:
- loads the omazureeventhubs module
- outputs all logs to Microsoft Azure Event Hubs with simple custom template
- Uses **azurehost**, **azureport**, **azure_key_name** and **azure_key**
parameters instead of **amqp_address** parameter
.. code-block:: none
module(load="omazureeventhubs")
template(name="outfmt" type="string" string="%msg%\n")
action(type="omazureeventhubs"
azurehost="<EventHubsNamespace>.servicebus.windows.net"
azureport="5671"
azure_key_name="<AccessKeyName>"
azure_key="<AccessKey>"
container="<EventHubsInstance>"
template="outfmt"
)
Example 3: JSON Format
----------------------
The following sample does the following:
- loads the omazureeventhubs module
- outputs all logs to Microsoft Azure Event Hubs with JSON custom template
- Uses **azurehost**, **azureport**, **azure_key_name** and **azure_key**
parameters instead of **amqp_address** parameter
- Uses **eventproperties** array parameter to set additional message properties
.. code-block:: none
module(load="omazureeventhubs")
template(name="outfmtjson" type="list" option.jsonf="on") {
property(outname="timestamp" name="timereported" dateFormat="rfc3339" format="jsonf")
constant(value="\"source\": \"EventHubMessage\", ")
property(outname="host" name="hostname" format="jsonf")
property(outname="severity" name="syslogseverity" caseConversion="upper" format="jsonf" datatype="number")
property(outname="facility" name="syslogfacility" format="jsonf" datatype="number")
property(outname="appname" name="syslogtag" format="jsonf")
property(outname="message" name="msg" format="jsonf" )
property(outname="etlsource" name="$myhostname" format="jsonf")
}
action(type="omazureeventhubs"
azurehost="<EventHubsNamespace>.servicebus.windows.net"
azureport="5671"
azure_key_name="<AccessKeyName>"
azure_key="<AccessKey>"
container="<EventHubsInstance>"
template="outfmtjson"
eventproperties=[ "Table=CustomTable",
"Format=JSON"]
)
Example 4: High Performance
---------------------------
To achieve high performance when sending syslog data to Azure Event Hubs, you should consider configuring your output module to use multiple worker instances. This can be done by setting the "workerthreads" parameter in the configuration file.
The following example is for high performance (Azure Premium Tier) and does the following:
- loads the omazureeventhubs module
- outputs all logs to Microsoft Azure Event Hubs with JSON custom template
- Uses **azurehost**, **azureport**, **azure_key_name** and **azure_key**
parameters instead of **amqp_address** parameter
- Uses **eventproperties** array parameter to set additional message properties
- Uses **Linkedlist** In-Memory Queue which enables multiple omazureeventhubs workers running at the same time. Using a dequeue size of 2000 and a dequeue timeout of 1000 has shown very good results in performance tests.
- Uses 8 workerthreads in this example, which will be spawn automatically if more than 2000 messages are waiting in the Queue. To achieve more performance, the number can be incremented.
.. code-block:: none
module(load="omazureeventhubs")
template(name="outfmtjson" type="list" option.jsonf="on") {
property(outname="timestamp" name="timereported" dateFormat="rfc3339" format="jsonf")
constant(value="\"source\": \"EventHubMessage\", ")
property(outname="host" name="hostname" format="jsonf")
property(outname="severity" name="syslogseverity" caseConversion="upper" format="jsonf" datatype="number")
property(outname="facility" name="syslogfacility" format="jsonf" datatype="number")
property(outname="appname" name="syslogtag" format="jsonf")
property(outname="message" name="msg" format="jsonf" )
property(outname="etlsource" name="$myhostname" format="jsonf")
}
action(type="omazureeventhubs"
azurehost="<EventHubsNamespace>.servicebus.windows.net"
azureport="5671"
azure_key_name="<AccessKeyName>"
azure_key="<AccessKey>"
container="<EventHubsInstance>"
template="outfmtjson"
eventproperties=[ "Table=CustomTable",
"Format=JSON"]
queue.type="linkedList"
queue.size="200000"
queue.saveonshutdown="on"
queue.dequeueBatchSize="2000"
queue.minDequeueBatchSize.timeout="1000"
queue.workerThreads="8"
queue.workerThreadMinimumMessages="2000"
queue.timeoutWorkerthreadShutdown="10000"
queue.timeoutshutdown="1000"
)
|