syslog-ng Open Source Edition 3.26 - Administration Guide

Preface Introduction to syslog-ng The concepts of syslog-ng Installing syslog-ng The syslog-ng OSE quick-start guide The syslog-ng OSE configuration file source: Read, receive, and collect log messages
How sources work default-network-drivers: Receive and parse common syslog messages internal: Collecting internal messages file: Collecting messages from text files wildcard-file: Collecting messages from multiple text files linux-audit: Collecting messages from Linux audit logs network: Collecting messages using the RFC3164 protocol (network() driver) nodejs: Receiving JSON messages from nodejs applications mbox: Converting local email messages to log messages osquery: Collect and parse osquery result logs pipe: Collecting messages from named pipes pacct: Collecting process accounting logs on Linux program: Receiving messages from external applications python: writing server-style Python sources python-fetcher: writing fetcher-style Python sources snmptrap: Read Net-SNMP traps sun-streams: Collecting messages on Sun Solaris syslog: Collecting messages using the IETF syslog protocol (syslog() driver) system: Collecting the system-specific log messages of a platform systemd-journal: Collecting messages from the systemd-journal system log storage systemd-syslog: Collecting systemd messages using a socket tcp, tcp6, udp, udp6: Collecting messages from remote hosts using the BSD syslog protocol— OBSOLETE unix-stream, unix-dgram: Collecting messages from UNIX domain sockets stdin: Collecting messages from the standard input stream
destination: Forward, send, and store log messages
amqp: Publishing messages using AMQP collectd: sending metrics to collectd elasticsearch2: Sending messages directly to Elasticsearch version 2.0 or higher (DEPRECATED) elasticsearch-http: Sending messages to Elasticsearch HTTP Bulk API file: Storing messages in plain-text files graphite: Sending metrics to Graphite Sending logs to Graylog hdfs: Storing messages on the Hadoop Distributed File System (HDFS) Posting messages over HTTP http: Posting messages over HTTP without Java kafka: Publishing messages to Apache Kafka (Java implementation) kafka: Publishing messages to Apache Kafka (C implementation, using the librdkafka client) loggly: Using Loggly logmatic: Using mongodb: Storing messages in a MongoDB database network: Sending messages to a remote log server using the RFC3164 protocol (network() driver) osquery: Sending log messages to osquery's syslog table pipe: Sending messages to named pipes program: Sending messages to external applications pseudofile() python: writing custom Python destinations redis: Storing name-value pairs in Redis riemann: Monitoring your data with Riemann slack: Sending alerts and notifications to a Slack channel smtp: Generating SMTP messages (email) from logs snmp: Sending SNMP traps Splunk: Sending log messages to Splunk sql: Storing messages in an SQL database stomp: Publishing messages using STOMP syslog: Sending messages to a remote logserver using the IETF-syslog protocol syslog-ng(): Forward logs to another syslog-ng node tcp, tcp6, udp, udp6: Sending messages to a remote log server using the legacy BSD-syslog protocol (tcp(), udp() drivers) Telegram: Sending messages to Telegram unix-stream, unix-dgram: Sending messages to UNIX domain sockets usertty: Sending messages to a user terminal: usertty() destination Write your own custom destination in Java or Python Client-side failover
log: Filter and route log messages using log paths, flags, and filters Global options of syslog-ng OSE TLS-encrypted message transfer template and rewrite: Format, modify, and manipulate log messages parser: Parse and segment structured messages db-parser: Process message content with a pattern database (patterndb) Correlating log messages Enriching log messages with external data Statistics of syslog-ng Multithreading and scaling in syslog-ng OSE Troubleshooting syslog-ng Best practices and examples The syslog-ng manual pages Creative Commons Attribution Non-commercial No Derivatives (by-nc-nd) License Glossary

Summary of changes

This section lists the changes of The syslog-ng Open Source Edition (syslog-ng OSE) Administration Guide.

Version 3.25 - 3.26

Version 3.26 of syslog-ng Open Source Edition includes the following main features.

New plugin: Python HTTP header

The Python HTTP header plugin makes it possible for users to implement HTTP header plugins in Python language.

For more information, see The Python HTTP header plugin.

New plugin: Azure auth header

The Azure auth header generates authorization headers for applications connecting to Azure.

For more information, see The Azure auth header plugin.

Persist name assigned to Python sources and destinations

Starting with 3.26, syslog-ng OSE assigns a persist name (which is generated from the class name) to Python sources and destinations.

For more information, see Python code in external files.

Disabling and forcing using TLSv1.3 in TLS contexts
  • The tlsv1_3 value has been added to the available values of ssl-version() for drivers based on the http().

  • The no-tlsv13 value has been added to the available values of ssl-options() in TLS contexts.

New rewrite function: set-severity()

It is possible to set the severity field with the set-severity() rewrite function.

For more information, see Setting severity with the set-severity() rewrite function.

New template function: list-search

The list-search template function searches the elements of a list starting at the specified start index, then returns the index of the first match of the pattern within the list.

For more information, see under List manipulation subsection in Template functions of syslog-ng OSE.

New multi-line file sources option: multi-line-timeout()

After waiting for the configured number of seconds without reading new data from the file, the last (potentially partial) message will be flushed and sent through the pipeline as a LogMessage.

Version 3.24 - 3.25

Version 3.25 of syslog-ng Open Source Edition includes the following main features.

List configuration options for sources and destinations

You can use the utility to list the available options of configuration objects. For example, you can list all the options that can be set in the file source, and so on. For details, see "Listing configuration options" in the Administration Guide.

Visualize the running configuration

Starting with syslog-ng OSE 3.25, you convert the configuration of a running syslog-ng OSE instance into DOT format, and visualize it or convert it into PNG or PDF format. For details, see "Visualize the configuration" in the Administration Guide.

  • The default-network-drivers() source now supports the max-connections() option.

    NOTE: Starting with 3.26, syslog-ng OSE assigns a persist name to Python sources and destinations. The persist name is generated from the class name. If you want to use the same Python class multiple times in your syslog-ng OSE configuration, add a unique persist-name() to each source or destination, otherwise syslog-ng OSE will not start. For example:

    log {
        source { python(class(PyNetworkSource) options("port" "8080") persist-name("<unique-string>); };
        source { python(class(PyNetworkSource) options("port" "8081")); };

    Alternatively, you can include the following line in the Python package: @staticmethod generate_persist_name. For example:

    from syslogng import LogSource
      class PyNetworSource(LogSource):
        def generate_persist_name(options):
            return options["port"]
        def run(self):
        def request_exit(self):

The type() and flags() options of regular expressions were separated in the documentation. For further details, see Options of regular expressions.

Version 3.23 - 3.24

Version 3.24 of syslog-ng Open Source Edition includes the following main features.

Use flattened JSON in output

The format-flat-json template function is identical to the format-json template function, but nested JSON objects are flattened in the output. For details, see "Template functions of syslog-ng OSE" in the Administration Guide.

Modify timezone using rewrite rules

You can set, fix, or guess the timezone of messages using timezone-specific rewrite rules. For details, see "Rewrite the timezone of a message" in the Administration Guide.

Wildcards in add-contextual-data()

You can now use shell-style globbing (wildcards) in the selector of add-contextual-data() databases. For details, see "Shell-style globbing in the selector" in the Administration Guide.

Server Name Identification (SNI) support

You can now send Server Name Identification (SNI) information when using transport(tls) by enabling the sni(yes) option. For details, see "TLS options" in the Administration Guide.

  • You can use ISO 8601 compliant week numbering using the ${ISOWEEK} macro and its variants: S_ISOWEEK, R_ISOWEEK and C_ISOWEEK. For details, see "Macros of syslog-ng OSE" in the Administration Guide.

  • The ${LOGHOST} macro now honours the use-fqdn() option.

  • You can now reference the location of your configuration file in the configuration file using the `syslog-ng-sysconfdir` variable.

  • You can now assign disk-queue files to entries in the persist file. For details, see dqtool --help.

Version 3.22 - 3.23

Version 3.23 of syslog-ng Open Source Edition includes the following main features.

  • In syslog-ng OSE version 3.23 and later, you can specify a comma-separated list of formats to parse multiple date formats with a single parser. For example:

        "%F %T,%f",
        "%F %T"

    For details, see "Options of date-parser() parsers" in the Administration Guide.

  • You can now display the preprocessed configuration of syslog-ng OSE on the standard output using the syslog-ng --preprocess-into=/dev/stdout command.

  • You can now move or rename disk-buffer files using the dqtool relocate command.

  • You can now set the time-reap() option separately for each destination. Note that how this option works has also changed. For details, see "Global options" in the Administration Guide.

Version 3.21 - 3.22

Version 3.22 of syslog-ng Open Source Edition includes the following main features.

Dynamic flow-control

Starting with version 3.22, syslog-ng OSE uses the log-iw-size() option to allocate a static message window to every flow-controlled log path using the network() and syslog() drivers. In addition, you can configure a dynamic memory buffer that syslog-ng OSE can use to dynamically increase the message window of flow-controlled log paths that have higher traffic. This can be useful in low-memory environments, where only a small subset of the active clients sends messages at high rate.

As a result of these changes the log-fifo-size() option only affects log paths that are not flow-controlled. It is expected that after configuring the dynamic message window, you can decrease the value of log-fifo-size(). For details, see .


Flow control and the log-fifo-size() option works differently starting with syslog-ng OSE 3.22 to avoid dropping flow-controlled messages when log-fifo-size() is misconfigured. From now on, log-fifo-size() only affects log paths that are not flow-controlled. (Flow-controlled log paths have a file destination, or have the flags(flow-control) option set.)

The new behavior is automatically enabled when you update your the @version string in your configuration file. Consider lowering the value of log-fifo-size() option after updating the @version string. For details, see .

SNMP destination

You can now send SNMP traps directly from syslog-ng OSE using the snmp() destination driver. For details, see .

Dynamic template function

A new template function called template can resolve static and dynamic templates in template functions. For example, the name of the template to be invoked can be extracted from the message, or from a name-value pair set using the add-contextual-data() feature. For details, see .

Floating point calculations and numerical template functions

Numerical template functions can now handle floating-point numbers. For details, see the ceil, floor, numerical operations, and round template functions.

  • HTTP-based destinations can now accept multiple URLs in various formats.

  • The message rate of the loggen command can be changed while loggen is running. Send SIGUSR1 to double the message rate, or SIGUSR2 to halve it, for example: kill -USR1 <loggen-pid>

  • The Check Point Log Exporter parser can now parse Check Point log messages in the Splunk format. For details, see .

  • New constants are available in the fetch method of the Python source. For details, see .

  • Global option can be defined in reusable blocks. For details, see .

  • The date-parser() now supports microseconds (%f). For details, see .

  • The value of add-contextual-data() selectors can be a template or a template function, not only a string. For details, see .

Version 3.20 - 3.21
Changes in product:
Changes in documentation:

You can use a relay for many different use cases. For more information, see Example relay use cases.

Version 3.19 - 3.20
Changes in product:
  • The Websense parser can parse the log messages of Websense Content Gateway (Raytheon|Websense, now Forcepoint). These messages do not completely comply with the syslog RFCs, making them difficult to parse. The websense-parser() of syslog-ng OSE solves this problem, and can separate these log messages to name-value pairs. For details, see "Websense parser" in the Administration Guide.

  • The Netskope parser can parse Netskope log messages. These messages do not completely comply with the syslog RFCs, making them difficult to parse. The netskope-parser() of syslog-ng OSE solves this problem, and can separate these log messages to name-value pairs. For details, see "Netskope parser" in the Administration Guide.

  • The persist-tool utility is now part of the syslog-ng OSE package. For details, see the persist-tool manual page.

  • Since ElasticSearch version 1.x has reached its end of life, its support has been removed from syslog-ng OSE. Use the elasticsearch2 destination instead.

Version 3.18 - 3.19
Changes in product:
  • The http() destination now supports load balancing, so a single syslog-ng OSE instance can feed log data to multiple HTTP servers, for example, multiple ingestion nodes of an Elasticsearch cluster. For details, see "Batch mode and load balancing" in the Administration Guide.

    HTTP and HTTPS redirections now also handled automatically.

    The use-system-cert-store() allows you to use the certificate store of the system for verifying HTTPS certificates. For details, see the curl documentation.

  • The slack() destination driver sends messages to a Slack channel using the Slack Web API. For the list of available optional parameters, see Slack destination options. This destination is available in version 3.19 and later.

  • The syslog() and network() drivers now support the so-reuseport() option that allows multiple sockets on the same host to bind to the same port, improving the performance of multithreaded network server applications running on top of multicore systems.

  • The allow-compress() option is now available for TLS connections.

  • The loaders() option is available for python destinations.

  • The exclude-kmsg() option of the internal() and linux-audit() source is not supported anymore.

  • The Cisco parser now supports Cisco Catalyst formatted triplets.

  • The flush-bytes(), flush-lines(), and flush-timeout() options have been renamed to batch-bytes(), batch-lines(), and batch-timeout().

Version 3.17 - 3.18
Changes in product:
Changes in documentation:
Version 3.16 - 3.17
Changes in product:
  • A new source driver, linux-audit(), has been added. The linux-audit() source reads and automatically parses the Linux audit logs. For details, see linux-audit: Collecting messages from Linux audit logs.

  • A new system source option, exclude-kmsg() makes it possible to avoid duplicate collection of kernel logs or errors in kernel log collection (for example, in scenarios where the log management on the host system and the containerized solution are collecting the kernel logs simultaneously). When set to yes, syslog-ng OSE will omit kernel logs on platforms where they are available separately.

  • You can now refer to any additional parameters at the end of the argument in a block by adding three dots to it (). It tells syslog-ng OSE that this macro accepts `__VARARGS__`, therefore any name-value pair can be passed without validation. For details, see Passing arguments to configuration blocks.

  • You can now make parameters mandatory in block definitions by defining them with empty brackets (). For details, see Mandatory parameters.

  • The failover() option allows you to specify what happens after syslog-ng OSE fails over to a secondary server. Additionally, the failover-servers() option has been deprecated and removed from the document. For more information about the failover() option, see Client-side failover.

  • Added support for the timestamp format used by Cisco Unified Call Manager in the Cisco parser. For details, see the source code of this parser on GitHub.

Changes in documentation:
  • A note about JVM still running after deleting all Java destinations and reloading syslog-ng has been added to the description of Java destinations.

  • The default value of the --skip-tokens parameter of the loggen application has been changed to 0. For details, see The loggen manual page.

Version 3.15 - 3.16
Changes in product:
  • A new destination driver, telegram(), has been added. The telegram() destination sends log messages to Telegram, which is a secure, cloud-based mobile and desktop messaging app. For more information, see Telegram: Sending messages to Telegram.

  • A new template function, urlencode, has been added. You can use the urlencode template function together with the telegram() destination to send syslog messages to Telegram. For more information, see Template functions of syslog-ng OSE.

  • To ensure that a module is loaded, you can use the @requires statement. For more information, see Loading modules.
  • The add-contextual-data() has been extended with the ignore-case() option. For more information, see Options add-contextual-data().
  • The hook-commands() has been added, which makes it possible to execute external programs when they are initialized or torn down. The hook-commands() can be used for both source and destination drivers. For more information, see hook-commands().
Version 3.14 - 3.15
Changes in product:
  • It is now possible to use if {}, elif {}, and else {} blocks to configure conditional expressions. For details, see if-else-elif: Conditional expressions.

  • A new log path flag, drop-unmatched, has been added. The new flag causes messages to be dropped along a log path when they do not match a filter or are discarded by a parser. For details, see Log path flags.

  • Support for Elasticsearch's Shield has been removed.

  • Support for POSIX regular expressions has been removed.

Version 3.13 - 3.14
Changes in product:
  • You can use password-protected private keys in the network() and syslog() source and destination drivers. For details, see Password-protected keys.

  • To better control to which log messages you add contextual data, you can use filters as selectors. In this case, the first column of the CSV database file must contain the name of a filter. For each message, syslog-ng OSE evaluates the filters in the order they appear in the database file. If a filter matches the message, syslog-ng OSE adds the name-value pair related to the filter. For details, see Using filters as selector.

Version 3.12 - 3.13
Changes in product:
Changes in documentation:
  • A new section describing common error messages has been added to the document. For more information, see Error messages .

  • Several corrections and editorial changes.

Version 3.11 - 3.12
Changes in product:
Changes in documentation:
  • Added section about commercial version of syslog-ng. For more information, see Commercial version of syslog-ng.

  • Added warning about the requirement to delete the persist file once the dir() option of disk-buffer() has been modified or a new one has been added. For more information, see destination: Forward, send, and store log messages.

  • Clarified information about the Python parser's deinit() method. It runs not only at a syslog-ng graceful stop, but at a reload too. For details, see Methods of the python() parser.

  • Several corrections and editorial changes.

Version 3.10 - 3.11
Changes in product:
Changes in documentation:
Version 3.9 - 3.10
Changes in product:
Changes in documentation:
Version 3.8 - 3.9
Changes in product:
Changes in documentation:
  • Corrections and editorial changes.

Version 3.7 - 3.8
Changes in product:
Changes in documentation:
Version 3.6 - 3.7
Changes in product:
Changes in documentation:
Version 3.5 - 3.6
Changes in product:
Changes in documentation:

Was this topic helpful?

[Select Rating]


One Identity would like to express its gratitude to the syslog-ng users and the syslog-ng community for their invaluable help and support.

Was this topic helpful?

[Select Rating]

Introduction to syslog-ng

This chapter introduces the syslog-ng Open Source Edition application in a non-technical manner, discussing how and why is it useful, and the benefits it offers to an existing IT infrastructure.

Was this topic helpful?

[Select Rating]

What syslog-ng is

The syslog-ng Open Source Edition (syslog-ng OSE) application is a flexible and highly scalable system logging application that is ideal for creating centralized and trusted logging solutions. Among others, syslog-ng OSE allows you the following.

Secure and reliable log transfer

The syslog-ng OSE application enables you to send the log messages of your hosts to remote servers using the latest protocol standards. You can collect and store your log data centrally on dedicated log servers. Transfer log messages using the TCP protocol ensures that no messages are lost.

Disk-based message buffering

To minimize the risk of losing important log messages, the syslog-ng OSE application can store messages on the local hard disk if the central log server or the network connection becomes unavailable. The syslog-ng application automatically sends the stored messages to the server when the connection is reestablished, in the same order the messages were received. The disk buffer is persistent – no messages are lost even if syslog-ng is restarted.

Secure logging using TLS

Log messages may contain sensitive information that should not be accessed by third parties. Therefore, syslog-ng OSE supports the Transport Layer Security (TLS) protocol to encrypt the communication. TLS also allows you to authenticate your clients and the logserver using X.509 certificates.

Flexible data extraction and processing

Most log messages are inherently unstructured, which makes them difficult to process. To overcome this problem, syslog-ng OSE comes with a set of built-in parsers, which you can combine to build very complex things.

Filter and classify

The syslog-ng OSE application can sort the incoming log messages based on their content and various parameters like the source host, application, and priority. You can create directories, files, and database tables dynamically using macros. Complex filtering using regular expressions and boolean operators offers almost unlimited flexibility to forward only the important log messages to the selected destinations.

Parse and rewrite

The syslog-ng OSE application can segment log messages to named fields or columns, and also modify the values of these fields. You can process JSON messages, key-value pairs, and more.

To get the most information out of your log data, syslog-ng OSE allows you to correlate log messages and aggregate the extracted information into a single message. You can also use external information to enrich your log data.

Big data clusters

The log data that your organization has to process, store, and review increases daily, so many organizations use big data solutions for their logs. To accomodate this huge amount of data, syslog-ng OSE natively supports storing log messages in HDFS files and Elasticsearch clusters.

Message queue support

Large organizations increasingly rely on queuing infrastructure to transfer their data. For that purpose, syslog-ng OSE supports Apache Kafka, the Advanced Message Queuing Protocol (AMQP), and the Simple Text Oriented Messaging Protocol (STOMP).

SQL, NoSQL, and monitoring

Storing your log messages in a database allows you to easily search and query the messages and interoperate with log analyzing applications. The syslog-ng application supports the following databases: MongoDB, MSSQL, MySQL, Oracle, PostgreSQL, and SQLite.

syslog-ng OSE also allows you to extract the information you need from your log data, and directly send it to your Graphite, Redis, or Riemann monitoring system.

Wide protocol and platform support
syslog protocol standards

syslog-ng not only supports legacy BSD syslog (RFC3164) and the enhanced RFC5424 protocols but also JavaScript Object Notation (JSON) and journald message formats.

Heterogeneous environments

The syslog-ng OSE application is the ideal choice to collect logs in massively heterogeneous environments using several different operating systems and hardware platforms, including Linux, Unix, BSD, Sun Solaris, HP-UX, and AIX.

IPv4 and IPv6 support

The syslog-ng application can operate in both IPv4 and IPv6 network environments, and can receive and send messages to both types of networks.

Was this topic helpful?

[Select Rating]

Related Documents