2014-04-15 6 views
7

Google Compute Engine (GCE)에서 여러 CoreOS 인스턴스를 실행합니다. CoreOS는 systemd의 저널 로깅 기능을 사용합니다. 모든 로그를 원격 대상으로 푸시하려면 어떻게해야합니까? 내가 알기에, systemd 저널은 원격 로깅 능력을 가지고 있지 않다. 나의 현재 작업은 주위 다음과 같습니다 https://logentries.comsystemd로 원격 로깅을 어떻게 처리해야합니까?

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

사용하여 자신의 Token-based input via TCP : 거기에 더 나은 방법

journalctl -o short -f | awk '{ print "<token>", $0; fflush(); }' | ncat data.logentries.com 10000 

있습니까?

EDIT :는 클라이언트/서버 프로세스를 통해 쌍 (216), 원격 로깅 기능을 포함https://medium.com/coreos-linux-for-massive-server-deployments/defb984185c5

+0

''awk '{print "", $ 0; fflush(); } '''은 각 로그 라인 앞에''''을 붙입니다. – mattes

답변

6

-o short를 사용하는 단점은 포맷 해석하기 어려운 점이다; 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" ] } 
    } 
} 

이 키바/Elasticsearch에게 제공되는 전체 journalctl 데이터 구조를 초래한다.

+0

그 포트 번호가 같아야한다고 생각하십니까? 1515, 515? – user22866

0

켈시 하이 타워의 저널 2 logentries 우리를 위해 꽤 잘 근무하고있다 :

#!/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