我应该如何处理与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输出。