Install AxoSyslog on Debian, Ubuntu, RHEL, Fedora, or AlmaLinux, run it with Docker, Podman, or Helm, upgrade to a newer version, or upgrade from syslog-ng.
To upgrade an existing AxoSyslog installation to a newer version (packages, container images, or the Helm chart), see Upgrade AxoSyslog to a newer version.
Upgrade syslog-ng to AxoSyslog
If you’re already using syslog-ng, you can upgrade your existing syslog-ng deployments to AxoSyslog in a matter of minutes. For details, see Upgrade syslog-ng to AxoSyslog.
Forward Windows logs
Axoflow provides a custom OpenTelemetry Collector distribution that you can use to collect logs on Windows hosts and forward them to AxoSyslog. For details, see Forward Windows logs.
1 - Install AxoSyslog with Podman and systemd
This page shows you how to run AxoSyslog as a systemd service using podman.
AxoSyslog provides cloud-ready images. These images differ from the upstream syslog-ng images, because:
They’re based on Alpine Linux, instead of Debian testing for reliability and smaller size (thus smaller attack surface).
They incorporate cloud-native features and settings, such as the Kubernetes source.
They incorporate container-level optimizations for better performance and improved security. For example, they use an alternative malloc library.
They support the ARM architecture.
The AxoSyslog images support the following architectures:
amd64
arm/v7
arm64
Prerequisites
Podman version 4.6.1.
The steps in this procedure were tested on CentOS 9, but should work on other similar distributions as well.
Install AxoSyslog as a systemd service
Make sure that there is no axosyslog.service unit file on the system. Run the following commands:
Terminal window
sudo rm /etc/systemd/system/axosyslog.service
Expected output:
Terminal window
rm: cannot remove '/etc/systemd/system/axosyslog.service': No such file or directory
Terminal window
sudo systemctl cat axosyslog.service
Expected output:
Terminal window
No files found for axosyslog.service.
Create a systemd unit file called /etc/containers/systemd/axosyslog.container based on the following template:
Edit the unit file as needed for your environment.
We recommend using the default mount points:
Purpose
On the host
In the container
Disk-buffer and persist files
/var/lib/syslog-ng
/var/lib/syslog-ng
syslog-ng configuration file
/opt/axosyslog/etc
/etc/syslog-ng
Output log files
/opt/axosyslog/var/log
/var/log
(Optional) Create an override.conf file to set custom environment values. This can be useful if you don’t want to modify /etc/containers/systemd/axosyslog.container. Run:
Terminal window
systemctl edit axosyslog
Later you can edit this file by running the previous command again.
Create the /opt/axosyslog/etc/syslog-ng.conf configuration file based on the following template.
With the following sample configuration file AxoSyslog collects the local system logs and logs received from the network into the /var/log/messages file.
You can customize the configuration file according to your needs. For a few pointers, see Configuring AxoSyslog as a logserver and the rest of this guide.
Run the following commands to reload the systemd configuration and launch the axosyslog service. Though the systemctl commands are run as root, the container will run as the specified user if set appropriately in the unit file.
If there aren’t any errors, these commands don’t have any output.
Run the following command to verify that the service was properly started:
Terminal window
journalctl -b -u axosyslog | tail -100
The output should be similar to:
Terminal window
Feb 12 09:04:40 <your-hostname> systemd[1]: Starting AxoSyslog Container...
Feb 12 09:04:40 <your-hostname> podman[2783]: 2024-02-12 09:04:40.454665314 -0500 EST m=+0.167732500 system refresh
Feb 12 09:04:40 <your-hostname> axosyslog[2783]: Trying to pull ghcr.io/axoflow/axosyslog:latest...
Feb 12 09:04:40 <your-hostname> axosyslog[2783]: Pulling image //ghcr.io/axoflow/axosyslog:latest inside systemd: setting pull timeout to 5m0s
Feb 12 09:04:41 <your-hostname> axosyslog[2783]: Getting image source signatures
Feb 12 09:04:41 <your-hostname> axosyslog[2783]: Copying blob sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1
Feb 12 09:04:41 <your-hostname> axosyslog[2783]: Copying blob sha256:619be1103602d98e1963557998c954c892b3872986c27365e9f651f5bc27cab8
Feb 12 09:04:41 <your-hostname> axosyslog[2783]: Copying blob sha256:b061f41886afb563aff2a5f731f3286ba54ea6f657ed3e282f5339a12a64c5ef
Feb 12 09:04:41 <your-hostname> axosyslog[2783]: Copying blob sha256:1b8d965a650c6a05227bd5c549930c9898071e8e7abb26886d4169a99762de0a
Feb 12 09:04:41 <your-hostname> axosyslog[2783]: Copying blob sha256:b5b0ce6ebef193c4f909379188cfb59443e8a1809816fbb476074908b170b4d1
Feb 12 09:04:50 <your-hostname> axosyslog[2783]: Copying config sha256:c379d94ef2c5ec348dfb3a93eed9a19aed667c396008db85edc354c8f4f8cb6a
Feb 12 09:04:50 <your-hostname> axosyslog[2783]: Writing manifest to image destination
Feb 12 09:04:50 <your-hostname> podman[2783]: 2024-02-12 09:04:50.422390687 -0500 EST m=+10.135457863 container create 477c9f011684f767aae138a0f88602ff30a8c95a46d616bb3b95318ec3a4b79f (image=ghcr.io/axoflow/axosyslog:latest, name=AxoSyslog, org.opencontainers.image.documentation=https://axoflow.com/docs/axosyslog/docs/, org.opencontainers.image.url=https://axoflow.io/, org.opencontainers.image.source=https://github.com/axoflow/axosyslog, org.opencontainers.image.authors=Axoflow, org.opencontainers.image.title=AxoSyslog, org.opencontainers.image.vendor=Axoflow, PODMAN_SYSTEMD_UNIT=axosyslog.service, org.opencontainers.image.description=A cloud-native distribution of syslog-ng by Axoflow, maintainer=axoflow.io, org.opencontainers.image.licenses=GPL-3.0-only)Feb 12 09:04:50 <your-hostname> podman[2783]: 2024-02-12 09:04:50.402626446 -0500 EST m=+10.115693622 image pull c379d94ef2c5ec348dfb3a93eed9a19aed667c396008db85edc354c8f4f8cb6a ghcr.io/axoflow/axosyslog:latest
Feb 12 09:04:50 <your-hostname> podman[2783]: 2024-02-12 09:04:50.489925509 -0500 EST m=+10.202992695 container init 477c9f011684f767aae138a0f88602ff30a8c95a46d616bb3b95318ec3a4b79f (image=ghcr.io/axoflow/axosyslog:latest, name=AxoSyslog, org.opencontainers.image.authors=Axoflow, org.opencontainers.image.licenses=GPL-3.0-only, org.opencontainers.image.vendor=Axoflow, maintainer=axoflow.io, PODMAN_SYSTEMD_UNIT=axosyslog.service, org.opencontainers.image.url=https://axoflow.io/, org.opencontainers.image.documentation=https://axoflow.com/docs/axosyslog/docs/, org.opencontainers.image.title=AxoSyslog, org.opencontainers.image.description=A cloud-native distribution of syslog-ng by Axoflow, org.opencontainers.image.source=https://github.com/axoflow/axosyslog)Feb 12 09:04:50 <your-hostname> systemd[1]: Started AxoSyslog Container.
Feb 12 09:04:50 <your-hostname> podman[2783]: 2024-02-12 09:04:50.500050669 -0500 EST m=+10.213117845 container start 477c9f011684f767aae138a0f88602ff30a8c95a46d616bb3b95318ec3a4b79f (image=ghcr.io/axoflow/axosyslog:latest, name=AxoSyslog, PODMAN_SYSTEMD_UNIT=axosyslog.service, org.opencontainers.image.source=https://github.com/axoflow/axosyslog, org.opencontainers.image.authors=Axoflow, org.opencontainers.image.description=A cloud-native distribution of syslog-ng by Axoflow, org.opencontainers.image.documentation=https://axoflow.com/docs/axosyslog/docs/, org.opencontainers.image.licenses=GPL-3.0-only, org.opencontainers.image.vendor=Axoflow, org.opencontainers.image.title=AxoSyslog, maintainer=axoflow.io, org.opencontainers.image.url=https://axoflow.io/)Feb 12 09:04:50 <your-hostname> axosyslog[2783]: 477c9f011684f767aae138a0f88602ff30a8c95a46d616bb3b95318ec3a4b79f
Feb 12 09:04:50 <your-hostname> AxoSyslog[2821]: [2024-02-12T14:04:50.806054] syslog-ng starting up;version='4.6.0'
Send a test message to the service (requires nc to be installed):
Terminal window
echo'<5> localhost test: this is a test message'| nc localhost 514
Check that the test message has arrived into the log file:
Terminal window
cat /opt/axosyslog/var/log/messages
The output should be similar to:
Terminal window
Feb 19 15:49:12 localhost test: this is a test message
Customize the configuration
To customize the configuration, edit the /opt/axosyslog/etc/syslog-ng.conf file on the host, then reload the service.
Managing the AxoSyslog systemd service
You can reload syslog-ng running in the container via systemctl. The following command reloads the syslog-ng.conf file, without stopping/starting syslog-ng itself.
Terminal window
sudo systemctl reload axosyslog
You can access syslog-ng-ctl from the host, for example by running:
If you use syslog-ng-ctl regularly, you can create the /opt/axosyslog/bin/syslog-ng-ctl file with the following content, make it executable, and add it to your path. That way running syslog-ng-ctl <command> will execute the command in the AxoSyslog container.
The traditional method of starting a service at boot (systemctl enable) is not supported for container services. To automatically start the AxoSyslog service, make sure that the following line is included in the unit file. (It is included in the sample template.)
[Install]WantedBy=default.target
2 - Install AxoSyslog on Debian/Ubuntu
You can install AxoSyslog 4.8 and newer on your Debian-based system from Axoflow’s APT repository. AxoSyslog is a drop in replacement for the syslog-ng Debian package, all the AxoSyslog binaries and configuration files are stored at the same place on your system.
The following x86-64 distributions are supported:
Distribution
sources.list component
Debian 13 (x86-64)
debian-trixie
Debian 12 (x86-64)
debian-bookworm
Debian 11 (x86-64)
debian-bullseye
Debian Unstable (x86-64)
debian-sid
Debian Testing (x86-64)
debian-testing
Ubuntu 26.04 (x86-64)
ubuntu-resolute
Ubuntu 25.04 (x86-64)
ubuntu-plucky
Ubuntu 24.04 (x86-64)
ubuntu-noble
Ubuntu 22.04 (x86-64)
ubuntu-jammy
Ubuntu 20.04 (x86-64)
ubuntu-focal
Which package to install?
AxoSyslog supports many features, but you rarely need all of them on a single host. Sources and destinations that depend on external libraries live in separate modules, so you install only the ones you actually use. For example, the gRPC-based destinations (like loki() and opentelemetry()) come from the gRPC module, while HTTP-based destinations (like elasticsearch-http() and sumologic-http()) come from the HTTP module.
The Prerequisites section of every source, destination, and parser names the module it needs.
If a module isn’t installed, AxoSyslog doesn’t start, and reports a syntax error that points at the name of the driver you configured. For details, see Error: unexpected LL_IDENTIFIER.
The following table lists the AxoSyslog modules, the configuration objects each provides, and the package to install.
linux-audit(), default-network-drivers(), mbox(), nodejs(), osquery(), pacct(), snmptrap(), jellyfin(), pihole-ftl(), qbittorrent(), radarr() and the other *arr() sources, collectd(), graylog2(), loggly(), logmatic(), syslog-ng(), ewmm(), the application adapters (apache-accesslog-parser(), cisco-parser(), panos-parser(), sudo-parser(), and so on), and every HTTP-based destination
axosyslog-scl
gRPC
opentelemetry(), axosyslog-otlp() (formerly syslog-ng-otlp()), loki(), bigquery(), clickhouse(), google-pubsub-grpc(), the otel_*() and protobuf_message() FilterX functions
axosyslog-mod-grpc
HTTP
http() destination, ehttp(), elasticsearch-bulk(), and splunk-hec() sources, azure-auth-header(), and all SCL destinations built on HTTP: elasticsearch-http(), elasticsearch-datastream(), opensearch(), openobserve-log(), logscale(), splunk-hec-event(), splunk-hec-raw(), sumologic-http(), slack(), discord(), telegram(), azure-monitor(), google-pubsub()
axosyslog-mod-http
Python
python() source, destination, parser and template function, python-fetcher(), python-http-header(), and the Python-based SCL drivers kubernetes(), kubernetes-metadata-parser(), s3(), webhook(), webhook-json(), hypr-app-audit-trail()
axosyslog-mod-python
Cloud authentication
cloud-auth(), used by azure-monitor() and google-pubsub()
axosyslog-mod-cloud-auth
Kafka
kafka-c() and the kafka() SCL destination
axosyslog-mod-rdkafka
MQTT
mqtt() source and destination
axosyslog-mod-mqtt
AMQP
amqp()
axosyslog-mod-amqp
MongoDB
mongodb()
axosyslog-mod-mongodb
SQL
sql()
axosyslog-mod-sql
Redis
redis()
axosyslog-mod-redis
Riemann
riemann()
axosyslog-mod-riemann
SMTP
smtp()
axosyslog-mod-smtp
SNMP
snmp(), snmptrapd-parser(), and the snmptrap() SCL source
axosyslog-mod-snmp
GeoIP2
geoip2() parser and the $(geoip2) template function
axosyslog-mod-geoip2
Java
java(). Only the HDFS Java module is shipped, the Java implementations of the Elasticsearch and HTTP destinations aren’t.
axosyslog-mod-java, axosyslog-mod-java-common-lib
HDFS
hdfs()
axosyslog-mod-hdfs (also requires axosyslog-mod-java and axosyslog-mod-java-common-lib)
Secure logging
$(slog) template function and the slog* command-line tools
axosyslog-mod-slog
eBPF
ebpf()
axosyslog-mod-bpf
XML parser
xml(), windows-eventlog-xml-parser(), and the parse_xml(), format_xml(), parse_windows_eventlog_xml(), format_windows_eventlog_xml() FilterX functions
axosyslog-mod-xml-parser
STOMP
stomp()
axosyslog-mod-stomp
Graphite
$(graphite-output) template function and the graphite() SCL destination
The axosyslog metapackage installs axosyslog-core, axosyslog-scl, and recommends every optional module, so apt install axosyslog gives you a working setup with the common modules.
AxoSyslog supports the sun-streams(), darwin-oslog(), darwin-oslog-stream(), and openbsd() drivers only on Solaris, macOS, and OpenBSD respectively. The Debian/Ubuntu and RHEL packages don’t include them.
Usually, you install the base package axosyslog, and the packages of specific modules that you want to use. We also provide debuginfo packages for every module, but you only need these in certain troubleshooting scenarios.
Steps
To install AxoSyslog from the APT repository, complete the following steps.
Run the following commands to add the APT repository of your distribution (for example, Ubuntu 24.04) to the APT sources list:
echo"deb [signed-by=/usr/share/keyrings/axoflow-code-signing-pub.gpg] https://pkg.axoflow.io/apt stable ubuntu-noble"| tee --append /etc/apt/sources.list.d/axoflow.list
Terminal window
apt update
Note
Nightly builds are also available:
Terminal window
echo"deb [signed-by=/usr/share/keyrings/axoflow-code-signing-pub.gpg] https://pkg.axoflow.io/apt nightly ubuntu-noble"| tee --append /etc/apt/sources.list.d/axoflow.list
Install the AxoSyslog package.
Terminal window
apt install axosyslog
Using AxoSyslog
After you’ve installed AxoSyslog, you can configure it just like syslog-ng, using the same configurations files (/etc/syslog-ng/syslog-ng.conf by default). For details, see the Quick-start guide.
Getting help
If you run into any issues while installing or configuring AxoSyslog, or you have any questions, you can find us on our Discord server.
3 - Install AxoSyslog on RHEL/Fedora/AlmaLinux
You can install AxoSyslog 4.8 and newer on your RPM-based system from Axoflow’s RPM repository. AxoSyslog is a drop in replacement for the syslog-ng RPM package, all the AxoSyslog binaries and configuration files are stored at the same place on your system.
The following distributions are supported:
Red Hat Enterprise Linux (RHEL) 10 x86-64 / AlmaLinux 10 x86-64
Red Hat Enterprise Linux (RHEL) 9 x86-64 / AlmaLinux 9 x86-64
Red Hat Enterprise Linux (RHEL) 8 x86-64 / AlmaLinux 8 x86-64
Fedora 44 x86-64
(The packages for AlmaLinux probably work for Rocky Linux as well, but we haven’t tested it.)
Which package to install?
AxoSyslog supports many features, but you rarely need all of them on a single host. Sources and destinations that depend on external libraries live in separate modules, so you install only the ones you actually use. For example, the gRPC-based destinations (like loki() and opentelemetry()) come from the gRPC module, while HTTP-based destinations (like elasticsearch-http() and sumologic-http()) come from the HTTP module.
The Prerequisites section of every source, destination, and parser names the module it needs.
If a module isn’t installed, AxoSyslog doesn’t start, and reports a syntax error that points at the name of the driver you configured. For details, see Error: unexpected LL_IDENTIFIER.
The following table lists the AxoSyslog modules, the configuration objects each provides, and the package to install.
linux-audit(), default-network-drivers(), mbox(), nodejs(), osquery(), pacct(), snmptrap(), jellyfin(), pihole-ftl(), qbittorrent(), radarr() and the other *arr() sources, collectd(), graylog2(), loggly(), logmatic(), syslog-ng(), ewmm(), the application adapters (apache-accesslog-parser(), cisco-parser(), panos-parser(), sudo-parser(), and so on), and every HTTP-based destination
Part of the axosyslog base package
gRPC
opentelemetry(), axosyslog-otlp() (formerly syslog-ng-otlp()), loki(), bigquery(), clickhouse(), google-pubsub-grpc(), the otel_*() and protobuf_message() FilterX functions
axosyslog-grpc
HTTP
http() destination, ehttp(), elasticsearch-bulk(), and splunk-hec() sources, azure-auth-header(), and all SCL destinations built on HTTP: elasticsearch-http(), elasticsearch-datastream(), opensearch(), openobserve-log(), logscale(), splunk-hec-event(), splunk-hec-raw(), sumologic-http(), slack(), discord(), telegram(), azure-monitor(), google-pubsub()
axosyslog-http
Python
python() source, destination, parser and template function, python-fetcher(), python-http-header(), and the Python-based SCL drivers kubernetes(), kubernetes-metadata-parser(), s3(), webhook(), webhook-json(), hypr-app-audit-trail()
axosyslog-python
Cloud authentication
cloud-auth(), used by azure-monitor() and google-pubsub()
axosyslog-cloud-auth
Kafka
kafka-c() and the kafka() SCL destination
axosyslog-kafka
MQTT
mqtt() source and destination
axosyslog-mqtt
AMQP
amqp()
axosyslog-amqp
MongoDB
mongodb()
axosyslog-mongodb
SQL
sql()
axosyslog-sql
Redis
redis()
axosyslog-redis
Riemann
riemann()
axosyslog-riemann
SMTP
smtp()
axosyslog-smtp
SNMP
snmp(), snmptrapd-parser(), and the snmptrap() SCL source
axosyslog-afsnmp
GeoIP2
geoip2() parser and the $(geoip2) template function
axosyslog-geoip
Java
java(). Only the HDFS Java module is shipped, the Java implementations of the Elasticsearch and HTTP destinations aren’t.
axosyslog-java
HDFS
hdfs()
axosyslog-java
Secure logging
$(slog) template function and the slog* command-line tools
axosyslog-slog
eBPF
ebpf()
axosyslog-bpf
XML parser
xml(), windows-eventlog-xml-parser(), and the parse_xml(), format_xml(), parse_windows_eventlog_xml(), format_windows_eventlog_xml() FilterX functions
Part of the axosyslog base package
STOMP
stomp()
Part of the axosyslog base package
Graphite
$(graphite-output) template function and the graphite() SCL destination
Note that the RPM package names differ from the Debian package names: they don’t have the mod- part, and some of them use a different name (for example, the GeoIP2 module is axosyslog-geoip, and the Kafka module is axosyslog-kafka).
AxoSyslog supports the sun-streams(), darwin-oslog(), darwin-oslog-stream(), and openbsd() drivers only on Solaris, macOS, and OpenBSD respectively. The Debian/Ubuntu and RHEL packages don’t include them.
Usually, you install the base package axosyslog-<version-number>.<distro>.x86_64.rpm, and the packages of specific modules that you want to use. We also provide debuginfo packages for every module, but you only need these in certain troubleshooting scenarios.
Steps
To install AxoSyslog on RedHat Enterprise Linux 9 or AlmaLinux 9, complete the following steps. The instructions for AlmaLinux probably work for Rocky Linux 9 as well, but we haven’t tested it.
Run the following commands to enable the EPEL repositories for your distribution. This is needed to install some dependencies of AxoSyslog. (For RHEL 8 and compatible distributions, use these instructions.)
AxoSyslog 544 B/s |488 B 00:00
AxoSyslog 5.2 kB/s | 3.2 kB 00:00
Importing GPG key 0x5F25E107:
Userid : "Axoflow Code Signing Key <support@axoflow.com>"Fingerprint: 365A 4340 FA76 89B4 78ED 617C 3605 FFAD 5F25 E107
From : https://pkg.axoflow.io/axoflow-code-signing-pub.asc
AxoSyslog 68 kB/s |56 kB 00:00
Extra Packages for Enterprise Linux 9 - x86_64 8.2 MB/s |23 MB 00:02
Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64 1.1 kB/s | 2.5 kB 00:02
Dependencies resolved.
Nothing to do.
Complete!
Install AxoSyslog.
To install AxoSyslog with every available module, run:
Terminal window
sudo yum install axosyslog-*
To install only the base package, run:
Terminal window
sudo yum install axosyslog
Then install other packages for the modules you want to use as needed. For example, to use the gRPC-based destinations (like loki() or opentelemetry()), install the axosyslog-grpc-* package. For HTTP-based destinations like elasticsearch-http() or sumologic-http(), you need the axosyslog-http-* package.
(Optional) If you don’t want to run other log collectors on the host, you can delete the existing one (which is rsyslog by default):
Terminal window
sudo yum remove rsyslog.x86_64
Using AxoSyslog
After you’ve installed AxoSyslog, you can configure it just like syslog-ng, using the same configurations files (/etc/syslog-ng/syslog-ng.conf by default). For details, see the Quick-start guide.
Getting help
If you run into any issues while installing or configuring AxoSyslog, or you have any questions, you can find us on our Discord server.
4 - Install AxoSyslog with Helm
Install AxoSyslog on Kubernetes with the Helm chart, as a collector, an aggregator, or both.
The chart has parameters for the following use cases:
As a collector: The collector uses the kubernetes() source to collect the local logs. It sends the logs to the aggregator, to a syslog server, to an OpenSearch node, or to a different AxoSyslog node.
As an aggregator: The aggregator receives RFC3164 and RFC5424 syslog messages from all senders, and axosyslog-otlp() messages from other AxoSyslog nodes. It stores the messages locally, or sends them to remote destinations.
By default, the collector sends the logs to the aggregator. You can configure and deploy the two components independently. To use other sources and destinations, use the config.raw parameter of the collector or the aggregator. For the list of parameters and their default values, see Parameters of the AxoSyslog Helm chart.
Install the Helm chart
To install the axosyslog chart, complete the following steps.
NAME: axosyslog-1713953907
LAST DEPLOYED: Wed Apr 24 12:18:28 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Watch the axosyslog-1713953907 containers start.
$ kubectl get pods --namespace=default -l app.kubernetes.io/instance=axosyslog-1713953907,app.kubernetes.io/name=axosyslog -w
The NAME field shows the name of the release. In the following commands, replace <release-name> with this name.
Check that the pods are running.
Terminal window
kubectl get pods
The output should list the pods that are running: a collector pod on every node and an aggregator pod for the default settings. For example, on a single-node cluster:
NAME READY STATUS RESTARTS AGE
axosyslog-1713953907-collector-ddftq 1/1 Running 0 57s
axosyslog-1713953907-aggregator-0 1/1 Running 0 57s
Configure the settings of the pods for your use case.
Create a file called my-values.yaml.
Add the configuration needed for your use case. The settings in this file override the default configuration settings of the chart.
Update your deployment using the my-values.yaml file by running:
Release "axosyslog-1713953907" has been upgraded. Happy Helming!
...
Tip
To list the non-default values of a release, run helm get values <release-name>.
Send the collector logs to another destination
By default, the collector sends the logs in JSON format to the aggregator over TCP. To send the logs to a different destination, configure the destination in your values file, then run helm upgrade. For example, the following values file sends the logs in JSON format to the 192.0.2.10:514 address over TCP:
How to use disk-buffers in containers and Kubernetes
When you are running AxoSyslog in a container or in Kubernetes, and you want to use disk-buffers, there are some additional things to configure.
Make sure to mount the disk-buffer files and the persist file (by default, both are stored in /var/lib/syslog-ng) in a way they are not lost when the pod or container is restarted.
In Kubernetes, add a persistent volume to your pod and store the disk buffer files (/var/lib/syslog-ng) there.
In a container, mount the disk-buffer directory from the host, or store it on a local volume.
Use a reliable disk-buffer only if your storage is fast enough. For example, a low-speed persistent volume in Kubernetes can cause a significant performance degradation for AxoSyslog.
Use the latest available version of AxoSyslog, as many related improvements and performance improvements (for example, disk-buffer related metrics) are only supported in recent versions.
If you are using syslog-ng without disk-buffering configured, syslog-ng stores everything in memory, which results in great performance. If you enable disk-buffering, the performance decreases. Make sure to size your observability pipeline appropriately.
Upgrade the Helm chart
To upgrade the chart to a newer version, and to roll back an upgrade, see Upgrade the Helm chart.
Uninstall the Helm chart
Tip
To list the installed releases, run helm list.
To uninstall a release of the chart, run:
Terminal window
helm uninstall <release-name>
4.1 - Parameters of the AxoSyslog Helm chart
Configurable parameters and default values of the AxoSyslog Helm chart for the collector, aggregator, and metrics exporter.
The following tables list the configurable parameters of the axosyslog Helm chart and their default values. For details on installing the chart, see Install AxoSyslog with Helm.
The chart has two components that you can enable or disable independently:
The collector is a DaemonSet that runs on every node, collects the pod logs, and forwards them to a destination. By default, it forwards the logs to the aggregator.
The aggregator is a StatefulSet that receives syslog and axosyslog-otlp() messages from the network (including the messages of the collector), and routes them to local or remote destinations.
Collector parameters
When you deploy AxoSyslog as a collector (which is a DaemonSet), it collects and forwards local logs to a destination. You can use the following parameters to configure the collector. The parameters for specific destinations are shown in subsequent sections.
Parameter
Description
Default
collector.enabled
Deploy AxoSyslog as a collector to collect and forward local logs.
true
collector.config.destinations
The configurations of destinations that can be configured using chart values: syslog, opensearch, and axosyslogOtlp. For destinations and options not available as chart values, you can use the collector.config.raw option.
The syslog destination is enabled, and sends the logs to the aggregator.
collector.config.raw
A complete syslog-ng configuration. If this parameter is set, all other parameters in the collector.config section are ignored. You can use this to set parameters that are not available as chart values. For details on how to create a configuration for syslog-ng, see the AxoSyslog documentation.
""
collector.config.rewrites.set
A list of name-value pairs to set for the collected log messages. Uses the set rewrite rule.
{}
collector.config.sources.kubernetes.enabled
Collect pod logs using the kubernetes() source. If disabled, the chart doesn’t configure any source. For the list of available sources, see the Sources chapter.
true
collector.config.sources.kubernetes.prefix
Set JSON prefix for logs collected from the Kubernetes cluster.
""
collector.config.sources.kubernetes.keyDelimiter
Set JSON key delimiter for logs collected from the Kubernetes cluster.
""
collector.config.sources.kubernetes.maxContainers
The maximum number of containers to collect logs from. Sets the max-containers() option of the kubernetes() source.
""
collector.config.stats.level
Specifies the level of statistics AxoSyslog collects about the processed messages. For details, see level().
2
The following example uses the collector.config.raw parameter to configure a custom destination:
Send logs over the network, conforming to RFC3164 using the network() destination driver. By default, the collector uses this destination to send the logs to the aggregator in JSON format.
Parameter
Description
Default
collector.config.destinations.syslog.enabled
Enables the destination.
true
collector.config.destinations.syslog.address
The IP address or hostname of the destination host. Can include Helm templates.
A directory containing a set of trusted CA certificates in PEM format. The name of the files must be the 32-bit hash of the subject’s name. AxoSyslog verifies the certificate of the server using these CA certificates.
The CA certificate in PEM format to use when verifying the certificate of the server.
""
collector.config.destinations.opensearch.tls.Cert
Name of a file containing an X.509 certificate or a certificate chain in PEM format. AxoSyslog authenticates with this certificate on the server, with the private key set in the collector.config.destinations.opensearch.tls.Key field. If the file contains a certificate chain, the file must begin with the certificate of the host, followed by the CA certificate that signed the certificate of the host, and any other signing CAs in order.
""
collector.config.destinations.opensearch.tls.Key
Name of a file containing an unencrypted private key in PEM format. AxoSyslog authenticates with this key and the certificate set in the collector.config.destinations.opensearch.tls.Cert field.
If true, AxoSyslog verifies the certificate of the server with the CA certificates set in collector.config.destinations.opensearch.tls.CAFile and collector.config.destinations.opensearch.tls.CADir.
Additional annotations for the collector DaemonSet and its pods.
{}
collector.extraVolumes
Additional volumes to add to the collector pod.
[]
collector.extraVolumeMounts
Additional volume mounts to add to the collector container.
[]
collector.hostAliases
Custom entries added to /etc/hosts for collector pods.
[]
collector.hostNetworking
Use the host network namespace for collector pods.
false
collector.labels
Additional labels for the collector DaemonSet and its pods.
{}
collector.maxUnavailable
The maximum number of unavailable pods during a rolling update of the DaemonSet.
1
collector.nodeSelector
Node selector for collector pod assignment.
{}
collector.resources
CPU and memory resource requests and limits for the collector. If not set, the global resources value is used.
{}
collector.secretMounts
Secrets to mount as files into the collector container.
[]
collector.securityContext
Container-level security context for the collector. If not set, the global securityContext value is used.
{}
collector.tolerations
Tolerations for collector pod scheduling.
[]
Aggregator parameters
When you deploy AxoSyslog as an aggregator (which is a StatefulSet), it receives incoming data from the network and routes it to a local or remote destination. You can use the following parameters to configure the aggregator. The parameters for specific sources and destinations are shown in subsequent sections.
Parameter
Description
Default
aggregator.enabled
Deploy AxoSyslog as an aggregator to receive logs from the network.
true
aggregator.replicaCount
The number of aggregator replicas.
1
aggregator.bufferStorage.enabled
Configures a storage using PersistentVolumes to use as disk-buffer.
false
aggregator.bufferStorage.storageClass
The class of the storage to use, for example, standard.
standard
aggregator.bufferStorage.size
The maximum size of the storage to use as disk-buffer, for example, 10Gi.
10Gi
aggregator.logFileStorage.enabled
Configures a storage using PersistentVolumes to store the log files. The volume is mounted to /var/log.
false
aggregator.logFileStorage.storageClass
The class of the storage to use, for example, standard.
standard
aggregator.logFileStorage.size
The maximum size of the storage to use for log storage, for example, 50Gi.
50Gi
aggregator.config.raw
A complete syslog-ng configuration. If this parameter is set, all other parameters in the aggregator.config section are ignored. You can use this to set parameters that are not available as chart values. For details on how to create a configuration for syslog-ng, see the AxoSyslog documentation.
""
aggregator.config.stats.level
Specifies the level of statistics AxoSyslog collects about the processed messages. For details, see level().
2
aggregator.config.rewrites.set
A list of name-value pairs to set for the received log messages. Uses the set rewrite rule.
{}
aggregator.config.sources
The configurations of the sources that can be configured using chart values: syslog and axosyslogOtlp. For sources not available as chart values, you can use the aggregator.config.raw option.
Both sources are enabled.
aggregator.config.destinations
The configurations of destinations that can be configured using chart values: file, syslog, opensearch, and axosyslogOtlp. For destinations not available as chart values, you can use the aggregator.config.raw option.
You can use the syslog source to receive RFC3164 or RFC5424 formatted syslog messages. The source uses the default-network-drivers() source driver. The following table shows the ports where the aggregator receives the messages:
Traffic
Container port
Service port
NodePort
RFC3164 over UDP
1514
514
30514
RFC3164 over TCP
1514
514
30514
RFC5424 over TCP
1601
601
30601
RFC5424 over TLS (only if aggregator.config.sources.syslog.tls is set)
6514
6514
30614
The NodePorts are used only if service.type is NodePort or LoadBalancer. If needed, you can open additional ports using the service.extraPorts option.
Parameter
Description
Default
aggregator.config.sources.syslog.enabled
Enable receiving syslog messages.
true
aggregator.config.sources.syslog.rfc3164UdpPort
The NodePort for RFC3164-formatted messages over UDP.
30514
aggregator.config.sources.syslog.rfc3164TcpPort
The NodePort for RFC3164-formatted messages over TCP.
30514
aggregator.config.sources.syslog.rfc5424TcpPort
The NodePort for RFC5424-formatted messages over TCP.
30601
aggregator.config.sources.syslog.rfc5424TlsPort
The NodePort for RFC5424-formatted messages over TLS.
If true, AxoSyslog requests a certificate from the peers. In this case, you must also set the CA directory or the CA file.
false
aggregator.config.sources.syslog.tls.CAFile
A file containing trusted CA certificates. For details, see TLS options.
""
aggregator.config.sources.syslog.tls.CADir
The directory for the trusted CA files. For details, see TLS options.
""
aggregator.config.sources.syslog.tls.Cert
The certificate file to show to the peer. For details, see TLS options.
""
aggregator.config.sources.syslog.tls.Key
The private key file for the certificate. For details, see TLS options.
""
Aggregator axosyslogOtlp source
Initializes an axosyslog-otlp() source to receive messages from another AxoSyslog node that sends telemetry data using the axosyslog-otlp() destination driver. The source receives the messages on port 4317 (container and service port).
Parameter
Description
Default
aggregator.config.sources.axosyslogOtlp.enabled
Enable receiving axosyslog-otlp() messages.
true
aggregator.config.sources.axosyslogOtlp.port
The NodePort for axosyslog-otlp() messages. Used only if service.type is NodePort or LoadBalancer.
30317
Aggregator file destination
To write the received logs into files, configure the aggregator.logFileStorage and the aggregator.config.destinations.file options.
Other options of the file() destination. If the directories used in aggregator.config.destinations.file.path do not exist, set extraOptionsRaw: "create-dirs(yes)".
A directory containing a set of trusted CA certificates in PEM format. The name of the files must be the 32-bit hash of the subject’s name. AxoSyslog verifies the certificate of the server using these CA certificates.
Name of a file containing an X.509 certificate or a certificate chain in PEM format. AxoSyslog authenticates with this certificate on the server, with the private key set in the aggregator.config.destinations.opensearch.tls.Key field. If the file contains a certificate chain, the file must begin with the certificate of the host, followed by the CA certificate that signed the certificate of the host, and any other signing CAs in order.
""
aggregator.config.destinations.opensearch.tls.Key
Name of a file containing an unencrypted private key in PEM format. AxoSyslog authenticates with this key and the certificate set in the aggregator.config.destinations.opensearch.tls.Cert field.
If true, AxoSyslog verifies the certificate of the server with the CA certificates set in aggregator.config.destinations.opensearch.tls.CAFile and aggregator.config.destinations.opensearch.tls.CADir.
The transport protocol to use. Possible values: tcp, udp
tcp
For example:
aggregator:enabled:truebufferStorage:enabled:truestorageClass:standardsize:10Giconfig:destinations:syslog:enabled:truetransport:tcpaddress:192.0.2.10port:514# convert incoming data to JSON#template: "$(format-json .*)\n"# use standard syslog logfile#template: "$ISODATE $HOST $MSGHDR$MSG\n"extraOptionsRaw:"time-reopen(10)"
Aggregator axosyslogOtlp destination
Send data using the axosyslog-otlp() destination driver to another AxoSyslog node.
Additional annotations for the aggregator StatefulSet and its pods.
{}
aggregator.extraVolumes
Additional volumes to add to the aggregator pod.
[]
aggregator.extraVolumeMounts
Additional volume mounts to add to the aggregator container.
[]
aggregator.hostAliases
Custom entries added to /etc/hosts for aggregator pods.
[]
aggregator.labels
Additional labels for the aggregator StatefulSet and its pods.
{}
aggregator.nodeSelector
Node selector for aggregator pod assignment.
{}
aggregator.resources
CPU and memory resource requests and limits for the aggregator. If not set, the global resources value is used.
{}
aggregator.secretMounts
Secrets to mount as files into the aggregator container.
[]
aggregator.securityContext
Container-level security context for the aggregator. If not set, the global securityContext value is used.
{}
aggregator.tolerations
Tolerations for aggregator pod scheduling.
[]
Metrics parameters
You can deploy axosyslog-metrics-exporter as a sidecar container of the collector to expose the metrics of AxoSyslog in Prometheus format on port 9577. If you use the Prometheus Operator, you can also deploy a PodMonitor to scrape the metrics.
Parameter
Description
Default
metricsExporter.enabled
Deploy axosyslog-metrics-exporter as a sidecar on the collector DaemonSet.
false
metricsExporter.image.repository
The image repository of the metrics exporter.
ghcr.io/axoflow/axosyslog-metrics-exporter
metricsExporter.image.tag
The image tag of the metrics exporter.
latest
metricsExporter.image.pullPolicy
The image pull policy of the metrics exporter. If not set, the default policy of Kubernetes applies.
""
metricsExporter.resources
CPU and memory resource requests and limits for the metrics exporter sidecar.
{}
metricsExporter.securityContext
Container-level security context for the metrics exporter sidecar.
{}
podMonitor.enabled
Deploy a PodMonitor custom resource for the Prometheus Operator. Requires metricsExporter.enabled.
false
podMonitor.labels
Additional labels for the PodMonitor.
{}
podMonitor.annotations
Additional annotations for the PodMonitor.
{}
Generic chart parameters
The following parameters apply to both the collector and the aggregator. Where a component has its own parameter with the same name (for example, collector.resources or aggregator.resources), the component-level setting overrides the generic one.
Parameter
Description
Default
image.repository
The container image repository.
ghcr.io/axoflow/axosyslog
image.pullPolicy
The container image pull policy.
IfNotPresent
image.tag
The container image tag. If not set, the appVersion of the chart is used.
""
image.extraArgs
Additional arguments passed to the syslog-ng process.
[]
imagePullSecrets
The names of secrets containing private registry credentials.
[]
nameOverride
Override the chart name.
""
fullnameOverride
Override the fully qualified chart name.
""
rbac.create
Create a ClusterRole and a ClusterRoleBinding for the collector.
true
rbac.extraRules
Additional RBAC rules to add to the ClusterRole.
[]
openShift.enabled
Set to true when deploying on OpenShift.
false
openShift.securityContextConstraints.create
Create SecurityContextConstraints on OpenShift.
true
openShift.securityContextConstraints.annotations
Annotations to apply to SecurityContextConstraints.
{}
service.create
Create a service so the aggregator can receive incoming connections.
true
service.type
The type of the service. Possible values: NodePort, LoadBalancer, ClusterIP, ExternalName
NodePort
service.annotations
Annotations to apply to the service.
{}
service.extraPorts
Additional ports to expose on the service of the aggregator.
[]
serviceAccount.create
Create a service account for the pods.
true
serviceAccount.annotations
Annotations to apply to the service account.
{}
namespace
The Kubernetes namespace to deploy to. If not set, the namespace of the Helm release is used.
""
podAnnotations
Annotations applied to all pods.
{}
podSecurityContext
Pod-level security context applied to all pods.
{}
securityContext
Default container-level security context for all components.
{}
resources
Default CPU and memory resource requests and limits for all components.
{}
nodeSelector
Default node selector for all pods.
{}
tolerations
Default tolerations for all pods.
[]
affinity
Default affinity rules for all pods.
{}
updateStrategy
Update strategy for the DaemonSet and the StatefulSet.
You can also use it as a base image in your Dockerfile:
Terminal window
FROM ghcr.io/axoflow/axosyslog:latest
If you want to test a development version, you can use the nightly builds:
Terminal window
podman pull ghcr.io/axoflow/axosyslog:nightly
Note: These named packages are automatically updated when a new package is released. To install a specific version, run podman pull ghcr.io/axoflow/axosyslog:<version-number>, for example:
Terminal window
podman pull ghcr.io/axoflow/axosyslog:4.28.0
Customize the configuration
The AxoSyslog container image stores the configuration file at /etc/syslog-ng/syslog-ng.conf. By default, AxoSyslog collects the local system logs and logs received from the network into the /var/log/messages and /var/log/messages-kv.log files using this configuration file from the syslog-ng repository.
To customize the configuration, create your own configuration file and override the file in the container image with it, for example:
Terminal window
podman run --rm --volume <path-to-your/syslog-ng.conf>:/etc/syslog-ng/syslog-ng.conf ghcr.io/axoflow/axosyslog:latest
How to use disk-buffers in containers and Kubernetes
When you are running AxoSyslog in a container or in Kubernetes, and you want to use disk-buffers, there are some additional things to configure.
Make sure to mount the disk-buffer files and the persist file (by default, both are stored in /var/lib/syslog-ng) in a way they are not lost when the pod or container is restarted.
In Kubernetes, add a persistent volume to your pod and store the disk buffer files (/var/lib/syslog-ng) there.
In a container, mount the disk-buffer directory from the host, or store it on a local volume.
Use a reliable disk-buffer only if your storage is fast enough. For example, a low-speed persistent volume in Kubernetes can cause a significant performance degradation for AxoSyslog.
Use the latest available version of AxoSyslog, as many related improvements and performance improvements (for example, disk-buffer related metrics) are only supported in recent versions.
If you are using syslog-ng without disk-buffering configured, syslog-ng stores everything in memory, which results in great performance. If you enable disk-buffering, the performance decreases. Make sure to size your observability pipeline appropriately.
Expose port to receive incoming traffic
To receive incoming network in a container, you must expose the port from the container where you want to receive the traffic to the host that’s running the container. Typically, this is only needed if you are running AxoSyslog as a relay or a server/aggregator.
By default, the AxoSyslog container images expose the ports commonly used to receive syslog traffic:
514/udp, typically used for RFC3164 (BSD-syslog) formatted traffic.
601/tcp, typically used for RFC5424 (IETF-syslog) formatted traffic.
6514/tcp, typically used for RFC5424 (IETF-syslog) formatted traffic over TLS.
To expose a specific port, use the --expose option when starting the container. Make sure to include the IP address of the host to make the port externally accessible.
For example, if you are receiving OpenTelemetry messages using the opentelemetry() source, expose the 4317 port:
Terminal window
podman run --rm --expose 127.0.0.1:4317:4317/tcp --volume <path-to-your/syslog-ng.conf>:/etc/syslog-ng/syslog-ng.conf ghcr.io/axoflow/axosyslog:latest
Using AxoSyslog
After you’ve installed AxoSyslog, you can configure it just like syslog-ng, using the same configurations files (/etc/syslog-ng/syslog-ng.conf by default). For details, see the Quick-start guide.
Getting help
If you run into any issues while installing or configuring AxoSyslog, or you have any questions, you can find us on our Discord server.
6 - Install AxoSyslog with Docker
AxoSyslog provides cloud-ready images. These images differ from the upstream syslog-ng images, because:
They’re based on Alpine Linux, instead of Debian testing for reliability and smaller size (thus smaller attack surface).
They incorporate cloud-native features and settings, such as the Kubernetes source.
They incorporate container-level optimizations for better performance and improved security. For example, they use an alternative malloc library.
They support the ARM architecture.
The AxoSyslog images support the following architectures:
You can also use it as a base image in your Dockerfile:
Terminal window
FROM ghcr.io/axoflow/axosyslog:latest
If you want to test a development version, you can use the nightly builds:
Terminal window
docker pull ghcr.io/axoflow/axosyslog:nightly
Note: These named packages are automatically updated when a new package is released. To install a specific version, run docker pull ghcr.io/axoflow/axosyslog:<version-number>, for example:
Terminal window
docker pull ghcr.io/axoflow/axosyslog:4.28.0
Customize the configuration
The AxoSyslog container image stores the configuration file at /etc/syslog-ng/syslog-ng.conf. By default, AxoSyslog collects the local system logs and logs received from the network into the /var/log/messages and /var/log/messages-kv.log files using this configuration file from the syslog-ng repository.
To customize the configuration, create your own configuration file and override the file in the container image with it, for example:
Terminal window
docker run --rm --volume <path-to-your/syslog-ng.conf>:/etc/syslog-ng/syslog-ng.conf ghcr.io/axoflow/axosyslog:latest
How to use disk-buffers in containers and Kubernetes
When you are running AxoSyslog in a container or in Kubernetes, and you want to use disk-buffers, there are some additional things to configure.
Make sure to mount the disk-buffer files and the persist file (by default, both are stored in /var/lib/syslog-ng) in a way they are not lost when the pod or container is restarted.
In Kubernetes, add a persistent volume to your pod and store the disk buffer files (/var/lib/syslog-ng) there.
In a container, mount the disk-buffer directory from the host, or store it on a local volume.
Use a reliable disk-buffer only if your storage is fast enough. For example, a low-speed persistent volume in Kubernetes can cause a significant performance degradation for AxoSyslog.
Use the latest available version of AxoSyslog, as many related improvements and performance improvements (for example, disk-buffer related metrics) are only supported in recent versions.
If you are using syslog-ng without disk-buffering configured, syslog-ng stores everything in memory, which results in great performance. If you enable disk-buffering, the performance decreases. Make sure to size your observability pipeline appropriately.
Expose port to receive incoming traffic
To receive incoming network in a container, you must expose the port from the container where you want to receive the traffic to the host that’s running the container. Typically, this is only needed if you are running AxoSyslog as a relay or a server/aggregator.
By default, the AxoSyslog container images expose the ports commonly used to receive syslog traffic:
514/udp, typically used for RFC3164 (BSD-syslog) formatted traffic.
601/tcp, typically used for RFC5424 (IETF-syslog) formatted traffic.
6514/tcp, typically used for RFC5424 (IETF-syslog) formatted traffic over TLS.
To expose a specific port, use the --expose option when starting the container. Make sure to include the IP address of the host to make the port externally accessible.
For example, if you are receiving OpenTelemetry messages using the opentelemetry() source, expose the 4317 port:
Terminal window
docker run --rm --expose 127.0.0.1:4317:4317/tcp --volume <path-to-your/syslog-ng.conf>:/etc/syslog-ng/syslog-ng.conf ghcr.io/axoflow/axosyslog:latest
Using AxoSyslog
After you’ve installed AxoSyslog, you can configure it just like syslog-ng, using the same configurations files (/etc/syslog-ng/syslog-ng.conf by default). For details, see the Quick-start guide.
Getting help
If you run into any issues while installing or configuring AxoSyslog, or you have any questions, you can find us on our Discord server.
7 - AxoSyslog on macOS
Build AxoSyslog from source on macOS with Homebrew dependencies, and see which modules the macOS build leaves out.
AxoSyslog has no official macOS package or Homebrew formula. For production use, run AxoSyslog on a Linux host or as a container. For details, see Install AxoSyslog and Install AxoSyslog with Docker.
To develop, test, or collect logs locally on a Mac, build AxoSyslog from source. The upstream CI builds and tests AxoSyslog on macOS 15 and the latest macOS GitHub runner.
Note
The macOS CI workflow is the authoritative source for the exact environment variables and build flags. The steps on this page are an outline, and the flags can change between releases.
The CMake build also disables the gRPC-based modules, for example, opentelemetry(), loki(), and bigquery(). On macOS 14, an incompatibility between Apache Arrow and Apple clang (apache/arrow#49841) breaks the arrow-flight module. Disable it with --disable-arrow-flight (autotools) or -DENABLE_ARROW_FLIGHT=OFF (CMake).
Collect macOS system logs
macOS has its own logging system. To collect its logs, use the darwin-oslog() and darwin-oslog-stream() sources. For details, see Collect native macOS system logs.
Run as a service
The source tree includes a sample launchd property list at contrib/com.syslog-ng.syslog-ng.plist. Adjust the paths to match your <install-dir> before you use it.
8 - Upgrade AxoSyslog to a newer version
Upgrade an existing AxoSyslog installation from packages, container images, or the Helm chart, update the configuration version, and roll back if needed.
Use this page if you already run AxoSyslog and you want to move to a newer release. To replace the syslog-ng packages of your distribution with AxoSyslog, see Upgrade syslog-ng to AxoSyslog instead.
An upgrade has two independent parts:
Upgrade the AxoSyslog binaries: the packages, the container image, or the Helm chart.
Update the @version: line of your configuration file. This step is optional. Until you do it, AxoSyslog keeps the behavior of the declared version. For details, see Update the configuration version.
Before you upgrade AxoSyslog
Check which version you run now. Write it down, so that you can roll back to it if necessary.
Terminal window
syslog-ng --version
The first line of the output shows the version of the binary, for example:
/etc/syslog-ng/: the configuration files, including the files that you include from the main configuration file.
/var/lib/syslog-ng/: the persist file (syslog-ng.persist) and the disk-buffer files. If you store these files in a different location (for example, with the --persist-file command-line option, or the dir() option of a disk-buffer), back up that location too.
For example:
Terminal window
sudo tar -czf axosyslog-backup-$(date +%Y%m%d).tar.gz /etc/syslog-ng /var/lib/syslog-ng
For containers, back up the host directories that you mount into the container. For example, with the default Podman with systemd setup, these are /opt/axosyslog/etc and /var/lib/syslog-ng.
Upgrade the AxoSyslog packages
The packages keep your existing configuration file (/etc/syslog-ng/syslog-ng.conf). Upgrade the module packages together with the base package: the installed axosyslog-* module packages must have the same version as the base package.
Upgrade the AxoSyslog packages.
Debian and Ubuntu:
Update the package lists.
Terminal window
sudo apt update
Upgrade every installed AxoSyslog package.
Terminal window
sudo apt install --only-upgrade axosyslog*
To upgrade all the packages on the host, run sudo apt upgrade instead of the previous step.
RHEL, Fedora, and AlmaLinux:
Update the package lists.
Terminal window
sudo dnf update
Upgrade every installed AxoSyslog package.
Terminal window
sudo dnf upgrade 'axosyslog*'
This command upgrades the base package and every installed module package. To upgrade all the packages on the host, run sudo dnf upgrade instead of the previous step.
Restart the service to start the new binary.
Terminal window
sudo systemctl restart syslog-ng
Check that the service runs.
Terminal window
sudo systemctl status syslog-ng
Make sure that the Active: line of the output shows active (running).
Check the version of the binary.
Terminal window
syslog-ng --version
Make sure that the first line of the output shows the new version.
Check the log of AxoSyslog for warnings about your configuration file. For example:
Terminal window
sudo journalctl -u syslog-ng -b | grep -i warning
If your configuration declares an older version, you see warnings about compatibility mode and about incompatible changes. AxoSyslog works in this state. To resolve the warnings, see Update the configuration version.
Upgrade containers
The AxoSyslog container images are available at ghcr.io/axoflow/axosyslog. The latest tag moves to every new release automatically. For production, pin a specific version, such as ghcr.io/axoflow/axosyslog:4.28.0. Then you decide when to upgrade, and you can roll back to a known tag. For the available tags, see the list of image tags.
Upgrade a Docker or Podman container
If you use Podman, replace docker with podman in the commands of this section.
Pull the new image. Replace <new-version> with the version number, such as 4.28.0.
Check your configuration file with the new image. The entrypoint of the image is /usr/sbin/syslog-ng -F, so you can add the --syntax-only option to the end of the command. Mount the directory that contains your configuration file, so that the check also finds the files that you include from it:
Terminal window
docker run --rm --volume <path-to-your/config-directory>:/etc/syslog-ng ghcr.io/axoflow/axosyslog:<new-version> --syntax-only
If the configuration is valid, the command doesn’t print errors. Check the output for warnings about incompatible changes.
Start a new container from the new image. Use the same options, port mappings, and volume mounts that you used for the old container, and change only the image tag. For example:
Replace the -p options with the ports that your old container published. Mount the same /var/lib/syslog-ng directory as before. It stores the persist file and the disk-buffer files. For details, see Install AxoSyslog with Docker and Install AxoSyslog with Podman.
Check the logs of the new container.
Terminal window
docker logs <container-name>
The startup message shows the new version, for example: syslog-ng starting up; version='4.28.0'.
Upgrade a Podman systemd service
The AXOSYSLOG_IMAGE environment variable sets the image of the Podman systemd service. The default value in /etc/containers/systemd/axosyslog.container is:
If you use a pinned version, change the tag in /etc/containers/systemd/axosyslog.container. Alternatively, run sudo systemctl edit axosyslog, and set the variable in the override file:
The chart version and the AxoSyslog version are different. Every chart version has an appVersion, and the chart uses the image with that tag by default. If you set the image.tag parameter, the chart uses that image tag, independently of the chart version. For the list of parameters, see Parameters of the AxoSyslog Helm chart.
CAUTION:
If you don’t set the collector.config.raw or aggregator.config.raw parameters, the chart generates the configuration file. The generated @version: is the major and minor version of the appVersion of the chart. A chart upgrade therefore changes the configuration version, and turns on the new default behavior of that release. Read What’s new before you upgrade the chart.
If you use config.raw, you control the @version: line of the configuration. The chart doesn’t change it.
Update the chart repository.
Terminal window
helm repo update
List the available chart versions. The APP VERSION column shows the AxoSyslog version of each chart version.
Terminal window
helm search repo axosyslog/axosyslog --versions
Upgrade the release. Use your values file, so that you keep your settings. To install a specific chart version, add the --version <chart-version> option.
Release "<release-name>" has been upgraded. Happy Helming!
...
The collector DaemonSet and the aggregator StatefulSet use the RollingUpdate update strategy, so Kubernetes replaces the pods one by one. For the collector, the collector.maxUnavailable parameter sets how many pods can be unavailable during the update (default: 1).
Check that the new pods run.
Terminal window
kubectl get pods
Check the revision history of the release. You need the revision number to roll back.
The @version: line of the configuration file declares which version of the configuration syntax and default behavior you use. For example:
Terminal window
@version: 4.28
@include "scl.conf"
The @version: line must be the first line of the main configuration file, before any @include statement. If the configuration contains more than one @version: line, AxoSyslog uses only the first one. For details, see The configuration syntax in detail.
AxoSyslog handles the declared version as follows:
If you set @version: current, AxoSyslog uses the version of the installed binary. This is convenient, but every upgrade can change the behavior of your configuration, without a change in the configuration file.
If the declared version is older than the version in the Config version: line of syslog-ng --version, AxoSyslog runs in compatibility mode. It keeps the old default behavior, and logs the Configuration file format is too old, syslog-ng is running in compatibility mode warning. It also logs a warning for each version-dependent default that your configuration uses.
If the declared version is newer than the version of the binary, AxoSyslog logs a warning, and runs with the newest version that it supports.
To update the configuration version, complete the following steps.
Upgrade the binary first. Keep the old @version: line for now.
Check the configuration, and read the warnings.
Terminal window
sudo syslog-ng --syntax-only
You can also find the warnings in the log of AxoSyslog after a restart.
Resolve every warning about incompatible changes. For each warning, do one of these: set the option explicitly to keep the old behavior, or accept the new default behavior.
Change the @version: line to the new version, for example:
Terminal window
@version: 4.28
Check the configuration again.
Terminal window
sudo syslog-ng --syntax-only
Reload the configuration.
Terminal window
sudo syslog-ng-ctl reload
Alternatively, restart the service: sudo systemctl restart syslog-ng.
Roll back an AxoSyslog upgrade
If the new version doesn’t work as you expect, go back to the version that you wrote down in Before you upgrade AxoSyslog.
If you changed the @version: line of the configuration, restore the configuration from your backup. An older binary can’t use a newer configuration version. It uses its own newest version instead, so the behavior can change.
Roll back the packages
Debian and Ubuntu:
List the available versions of the package.
Terminal window
apt-cache policy axosyslog
You can also run apt list -a axosyslog.
Install the previous version. Install the same version of every module package that you use. Replace <package-version> with a version from the output of the previous step. For example:
Start the container again with the previous image tag. Use the same options and volume mounts as for the new container. For Podman with systemd, set the previous tag in the AXOSYSLOG_IMAGE variable, then run sudo systemctl daemon-reload and sudo systemctl restart axosyslog.
If you used the latest tag before the upgrade, latest now points to the new release. Use the version-number tag of the old version, for example, ghcr.io/axoflow/axosyslog:<old-version>. You wrote down this version in Before you upgrade AxoSyslog.
Roll back the Helm chart
List the revisions of the release.
Terminal window
helm history <release-name>
Roll back to the revision before the upgrade.
Terminal window
helm rollback <release-name> <revision>
Get help with an upgrade
If AxoSyslog doesn’t start after an upgrade or a rollback, keep the backup of /etc/syslog-ng/ and /var/lib/syslog-ng/, and contact us.
9 - Upgrade syslog-ng to AxoSyslog
If you’re already using syslog-ng, you can upgrade your existing syslog-ng deployments to AxoSyslog in a matter of minutes, by simply installing AxoSyslog on the host.
The installation replaces the syslog-ng packages with AxoSyslog packages, but provides the same binaries (for example, /usr/sbin/syslog-ng). It will keep using the existing configuration files (/etc/syslog-ng/syslog-ng.conf), certificates, and so on.
Check that the syslog-ng service is still running:
Terminal window
sudo systemctl status syslog-ng
The output should be identical to the earlier result:
Terminal window
syslog-ng.service - System Logger Daemon
Loaded: loaded (/usr/lib/systemd/system/syslog-ng.service; enabled; preset>
Active: active (running) since Thu 2025-02-27 17:07:41 CET; 42s ago
Docs: man:syslog-ng(8)Main PID: 1936(syslog-ng) Tasks: 2(limit: 9594) Memory: 79.9M (peak: 83.1M) CPU: 462ms
CGroup: /system.slice/syslog-ng.service
└─1936 "[rosetta]" /usr/sbin/syslog-ng /usr/sbin/syslog-ng -F
Check the version of syslog-ng you have by running:
Axoflow provides a custom OpenTelemetry Collector distribution that you can use to collect logs on Windows hosts and forward them to AxoSyslog using the OpenTelemetry Protocol (OTLP/gRPC).
The distribution provides installers for AMD64 and ARM64 based Windows for:
Windows Server 2025
Windows Server 2022
Windows Server 2019
Windows 11
Steps
To forward Windows logs to AxoSyslog, complete the following steps.
Configure an opentelemetry() source on the AxoSyslog that will receive the Windows logs.
Run the installer on your Windows host. The installer installs:
the collector agent (by default) to C:\Program Files\Axoflow\OpenTelemetry Collector\axoflow-otel-collector.exe, and
a default configuration file (C:\ProgramData\Axoflow\OpenTelemetry Collector\config.yaml) that must be edited before use.
Open the configuration file (C:\ProgramData\Axoflow\OpenTelemetry Collector\config.yaml).
Set the IP address and port of the AxoSyslog host where you want to send data from this Windows host. Use the IP address and port of an opentelemetry() source. For example:
Configure receivers to collect logs of the Windows host, and the pipelines to forward them. For example, to collect event logs from the Application, System, and Security channels: