我应该如何处理与systemd远程日志logging?
我在Google Compute Engine(GCE)上运行多个CoreOS实例。 CoreOS使用systemd的日志loggingfunction。 我如何将所有日志推送到远程目的地? 据我所知,systemd日志不带有远程日志function。 我目前的解决方法如下所示:
journalctl -o short -f | ncat <addr> <ip>
使用https://logentries.com 通过TCP使用基于令牌的input :
journalctl -o short -f | awk '{ print "<token>", $0; fflush(); }' | ncat data.logentries.com 10000
有更好的方法吗?
编辑: https : //medium.com/coreos-linux-for-massive-server-deployments/defb984185c5
systemd过去的版本216包括通过客户机/服务器进程对的远程loggingfunction。
http://www.freedesktop.org/software/systemd/man/systemd-journal-remote.html
使用-o short
缺点是格式很难parsing; short-iso
更好。 如果您使用的是ELK堆栈,则以JSON格式导出会更好。 像下面这样的systemd服务将把JSON格式的日志很好地发送到远程主机。
[Unit] Description=Send Journalctl to Syslog [Service] TimeoutStartSec=0 ExecStart=/bin/sh -c '/usr/bin/journalctl -o json -f | /usr/bin/ncat syslog 515' Restart=always RestartSec=5s [Install] WantedBy=multi-user.target
另一方面, logstash.conf
对我来说包括:
input { tcp { port => 1515 codec => json_lines type => "systemd" } } filter { if [type] == "systemd" { mutate { rename => [ "MESSAGE", "message" ] } mutate { rename => [ "_SYSTEMD_UNIT", "program" ] } } }
这导致整个journalctl数据结构可供Kibana / Elasticsearch使用。
Kelsey Hightower的journal-2-logentries对我们来说工作得非常好: https ://logentries.com/doc/coreos/
如果你想放下并启用没有舰队的单位:
#!/bin/bash # # Requires the Logentries Token as Parameter if [ -z "$1" ]; then echo "You need to provide the Logentries Token!"; exit 0; fi cat << "EOU1" > /etc/systemd/system/systemd-journal-gatewayd.socket [Unit] Description=Journal Gateway Service Socket [Socket] ListenStream=/run/journald.sock Service=systemd-journal-gatewayd.service [Install] WantedBy=sockets.target EOU1 cat << EOU2 > /etc/systemd/system/journal-2-logentries.service [Unit] Description=Forward Systemd Journal to logentries.com After=docker.service Requires=docker.service [Service] TimeoutStartSec=0 Restart=on-failure RestartSec=5 ExecStartPre=-/usr/bin/docker kill journal-2-logentries ExecStartPre=-/usr/bin/docker rm journal-2-logentries ExecStartPre=/usr/bin/docker pull quay.io/kelseyhightower/journal-2-logentries ExecStart=/usr/bin/bash -c \ "/usr/bin/docker run --name journal-2-logentries \ -v /run/journald.sock:/run/journald.sock \ -e LOGENTRIES_TOKEN=$1 \ quay.io/kelseyhightower/journal-2-logentries" [Install] WantedBy=multi-user.target EOU2 systemctl enable systemd-journal-gatewayd.socket systemctl start systemd-journal-gatewayd.socket systemctl start journal-2-logentries.service rm -f $0
最近的一个python包我很有用: journalpump
支持Elastic Search,Kafka和logplex输出。