Logagent input plugin for systemd-journal-upload.service
Receive data from systemd-journal-upload.service¶
Plugin to receive events via HTTP from systemd-journal-upload.service. You can scale the HTTP service to multiple processes by setting 'worker' property > 0.
Use cases:
- Use the powerful Logagent features with lightweight
systemd
integration servicesystemd-journal-upload.service
- Filter by SYSTEMD_UNIT, remove fields, and add tags to each log
- Receive system journal events via HTTP and fan out processed data to multiple outputs like Elasticsearch, Sematext Cloud, InfluxDB, Kafka, or MQTT
Configuration¶
# Global options
options:
includeOriginalLine: true
input:
journal-upload:
module: input-journald-upload
port: 9090
worker: 0
systemdUnitFilter:
include: !!js/regexp /.*/i
# exclude: !!js/regexp /docker|containerd/i
# add static tags to every log event
tags:
# _index is special tag for log routing with elasticsearch output-plugin
_index: MY_INDEX_FOR_ELASTICSEARCH_OUTPUT
# you can add any other static tag
node_role: kubernetes_worker
log_shipper: logagent
# journald might provide many fields,
# to reduce storage usage you can remove
# non-relevant fields
removeFields:
- __CURSOR
- __REALTIME_TIMESTAMP
- _SOURCE_REALTIME_TIMESTAMP
- __MONOTONIC_TIMESTAMP
- _TRANSPORT
- JOURNAL_NAME
- JOURNAL_PATH
- CURRENT_USE
- CURRENT_USE_PRETTY
- MAX_USE
- MAX_USE_PRETTY
- DISK_KEEP_FREE
- DISK_KEEP_FREE_PRETTY
- DISK_AVAILABLE_PRETTY
- DISK_AVAILABLE
- LIMIT
- LIMIT_PRETTY
- AVAILABLE
- AVAILABLE_PRETTY
- _CAP_EFFECTIVE
- _SYSTEMD_SLICE
output:
# output data for debugging on stdout in YAML format
# stdout: yaml
sematext-cloud:
module: elasticsearch
url: https://logsene-receiver.sematext.com
# url: https://logsene-receiver.eu.sematext.com
index: YOUR_SEMATEXT_LOGS_TOKEN_HERE
Start Logagent
logagent --config myconfig.yml
Test the processing with curl, simulating systemd-journal-upload.service
curl -vvv -X POST http://127.0.0.1:9090/upload -d '
__CURSOR=s=d5c6de465016430b8b47552b08d35c07;i=36893d;b=671303be039c460f898b637b5bca7697;m=4f8ec78ad23;t=58635495306a8;x=f88836c4f568bc1f
__REALTIME_TIMESTAMP=1554938305119912
__MONOTONIC_TIMESTAMP=5467165732131
_BOOT_ID=671303be039c460f898b637b5bca7697
_TRANSPORT=syslog
PRIORITY=6
SYSLOG_FACILITY=4
SYSLOG_IDENTIFIER=sshd
_UID=0
_GID=0
_COMM=sshd
_EXE=/usr/sbin/sshd
_CMDLINE=sshd: root [priv]
_CAP_EFFECTIVE=3fffffffff
_SYSTEMD_CGROUP=/system.slice/ssh.service
_SYSTEMD_UNIT=ssh.service
_SYSTEMD_SLICE=system.slice
_BOOT_ID=671303be039c460f898b637b5bca7697
_MACHINE_ID=400518d7368b56325877a28f6f43d32c
_HOSTNAME=docker-demo
SYSLOG_PID=4196
_PID=4196
MESSAGE=Disconnected from 218.92.0.208 port 47994 [preauth]
_SOURCE_REALTIME_TIMESTAMP=1554938305119518
__CURSOR=s=d5c6de465016430b8b47552b08d35c07;i=36893e;b=671303be039c460f898b637b5bca7697;m=4f8ec78af45;t=58635495308ca;x=efef7cd6e15b4416
__REALTIME_TIMESTAMP=1554938305120458
__MONOTONIC_TIMESTAMP=5467165732677
_BOOT_ID=671303be039c460f898b637b5bca7697
_TRANSPORT=syslog
SYSLOG_IDENTIFIER=sshd
_UID=0
_GID=0
_COMM=sshd
_EXE=/usr/sbin/sshd
'
Setup systemd-journal-upload.service
Use the following command to install systemd-journal-remote
sudo apt-get install systemd-journal-remote
Edit /etc/systemd/journal-upload.conf
.
[Upload]
URL=http://127.0.0.1:9090
# ServerKeyFile=/etc/ssl/private/journal-upload.pem
# ServerCertificateFile=/etc/ssl/certs/journal-upload.pem
# TrustedCertificateFile=/etc/ssl/ca/trusted.pem
To make sure journal-upload auto-starts on boot.
Note that upload service might stop if creating the HTTP connection doesn't work.
Should that happen the service stores the current cursor position in the journal.
Therefore, you should set useful restart options in the service definition.
Edit /etc/systemd/system/multi-user.target.wants/systemd-journal-upload.service
to change restart options.
[Unit]
Description=Journal Remote Upload Service
Documentation=man:systemd-journal-upload(8)
After=network.target
[Service]
ExecStart=/lib/systemd/systemd-journal-upload \
--save-state
User=systemd-journal-upload
SupplementaryGroups=systemd-journal
PrivateTmp=yes
PrivateDevices=yes
#WatchdogSec=3min
Restart=always
TimeoutStartSec=1
TimeoutStopSec=1
StartLimitBurst=1000
StartLimitIntervalSec=5
# If there are many split up journal files we need a lot of fds to
# access them all and combine
LimitNOFILE=16384
[Install]
WantedBy=multi-user.target
Apply changes and restart journal-upload after configuration:
systemctl daemon-reload
sudo systemctl enable systemd-journal-upload.service