我应该如何使用systemd处理远程日志记录



我在Google计算引擎(GCE)上运行多个CoreOS实例。CoreOS使用systemd的日志记录功能。如何将所有日志推送到远程目的地?据我所知,systemd日志没有远程日志记录功能。我目前的工作是这样的:

journalctl -o short -f | ncat <addr> <ip>

与https://logentries.com通过TCP:使用基于令牌的输入

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包括通过客户端/服务器进程对进行远程日志记录的功能。

http://www.freedesktop.org/software/systemd/man/systemd-journal-remote.html

使用-o short的缺点是格式很难解析;CCD_ 2较好。如果您使用的是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输出。

您也可以在Rsyslog中使用rsyslog-kafka模块。

Rsyslog with moduels:
 - imfile - input file
 - omkafka - output to Kafka

定义json模板并将其推送给Apache Kafka。当日志在卡夫卡。。。

相关内容

  • 没有找到相关文章

最新更新