시스템화 된 아치 리눅스로 Syslog 메시지 수신


25

나는 명백한 것을 간과 한 것처럼 느껴지지만 원격 시스템에서 메시지 systemd를 수신하고 기록 하는 데 사용하는 Arch Linux 서버를 얻는 방법을 알 수 없습니다 syslog.

Cisco 678 DSL 모뎀과 DD-WRT WAP가 있으며 syslog 형식 메시지를 다른 컴퓨터로 보내도록 구성 할 수 있습니다. 나는 그 기계를 나의 아치 리눅스 서버로 만들고 싶다.

나는 구글을 둘러 보았고, "systemd는 syslog를 대체한다"는 것, 또는 더 이상 실행할 필요가 syslog없거나 내 질문과 똑같이 관련이없는 것입니다.

최신 정보

나는 아치 포럼 에서 물었고 관련 답변을 얻지 못했습니다. UDP 포트 514를 수신하기 위해 syslog-ng를 설치했습니다. syslog-ng는 Cisco 678 및 DD-WRT WAP에서 메시지를 씁니다. 불행하게도, 메시지는 systemd의 저널이 아니라 플랫 파일이됩니다. 따라서 정확한 해결책은 아니지만 해결 방법이 있습니다. 오히려 플랫 파일이 아닌 저널에 syslog 메시지를 갖고 싶습니다.


systemd는 자체 로그를 사용합니다 . 또한 핵심 Arch repos에서 사용 가능한 metalog 도 있습니다. 개인적으로 syslog, systemd 's journal 및 metalog의 세 가지를 모두 사용합니다. 시스템 저널을 확인하십시오. 올바르게 기억한다면 syslog는 systemd로 전환 한 이후로 모든 메시지와 systemd 저널에 메시지를 보내도록 구성되었습니다.
Alexej Magura

답변:


11

가난한 사람의 syslog 서버를 아주 쉽게 작성할 수 있습니다. socat으로 . 다음과 같은 서비스 유닛이 필요합니다.

[Service]
Restart=on-success
ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT

syslog 서비스 포트에서 수신 한 모든 내용을 시스템 저널에 맹목적으로 보냅니다. 위와 같이 말한 /etc/systemd/system/syslog.service다음 저장하십시오.

# systemctl daemon-reload
# systemctl start syslog

그런 다음 청취 서버의 UDP 포트 514로 메시지를 보내려면 소스 만 있으면됩니다.

수신 된 데이터를 실제로 구문 분석하고 형식화하기 위해이 기능을 향상시킬 수 있지만 수신하려는 작업을 저널링하는 것만으로는 필요하지 않습니다.

( socat 은 Arch Linux Extra 저장소에 있습니다. pacman -S socat)


4
좋은 대답입니다. socat을 설치할 수 없었기 때문에 빠른 파이썬 스크립트를 사용했습니다.import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
awelkie

3

여기에는 약간의 차이가 있습니다.

Systemd는 systemd-journal-gateway 구성 요소를 통한 원격 메시징을 지원합니다. 이 메시지는 syslog 형식이 아닙니다. Syslog (형식)는 RFC 5424 (이전 버전 인 RFC 3164에서 사용되지 않음)에 문서화되어있는 IETF 인증 인증입니다.

이 게임들을 함께 멋지게 만드는 복잡한 부분은 다음과 같습니다.

http://www.freedesktop.org/wiki/Software/systemd/syslog/

그리고 여기 (man systemd-journald.service)

   systemd-journald is a system service that collects and stores logging data.
   It creates and maintains structured, indexed journals based on logging
   information that is received from the kernel, from user processes via the
   libc syslog(3) call, from STDOUT/STDERR of system services or via its native
   API. It will implicitly collect numerous meta data fields for each log
   messages in a secure and unfakeable way. See systemd.journal-fields(7) for
   more information about the collected meta data.

요약하면 메시지가 syslog-ng에서 STDOUT으로 전송되고 일지가 저널에 있어야합니다.

이것에 대해 조금 더 나아가서 나는 이것을 또한 발견했다.

https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md

누군가가 PostgreSQL에서 로깅을 위해 systemd에 바인딩을 작성하는 경우. 이것에서 그들은 현재 (파일 시점 현재 2013/06) 멀티 라인 메시지가 시스템에서 지원되지 않으므로 인용하십시오.


2

나는 아치 배포판을 모른다. Fedora 20 (systemd 포함)이 있고 원격 syslog 메시지를 수락하도록 구성했습니다.

IMHO,이 기능은 systemd와 관련이 없습니다. systemd-journald.service는 커널 / 사용자 공간 프로그램과 syslog 하위 시스템 사이에 자체적으로 개입합니다. 이 소스의 로컬 메시지 만 저널 데이터베이스로 캡처 한 다음 syslog로 전달합니다. 예를 들어 "man systemd-journald.service"(적어도 Fedora에서)를 참조하십시오.

제 경우에는 /etc/rsyslog.conf에 선택적 "TCP syslog 수신기 모듈"을 구성하여이를 활성화합니다.

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

UDP 모듈도 사용 가능합니다.

출력을 원하는 파일로 보내려면 (r) syslog 규칙을 추가해야합니다. 전체 설명서는 http://www.rsyslog.com/doc/을 참조하십시오.

HTH.


2

syslog-ng를 설치했으며 syslog 로그 메시지를 수신 할 수있었습니다. 그러나 내가 정말로 원했던 것은 syslog 로그 메시지를 수신 한 다음 해당 메시지를 저널링하는 것입니다. 원격 syslog 메시지를 저널링에 쓰도록 syslog-ng를 구성하는 방법을 찾을 수 없습니다.

그래서이 작업을 수행하는 유틸리티를 작성했습니다.

https://github.com/advantageous/rsyslog-journald-repeater

./rsyslog-journald-repeater -h
Usage of ./rsyslog-journald-repeater:
-debug
    debug flag
-host string
    hostname to listen on (default "0.0.0.0")
-port int
    port to listen on (default 5514 on darwin, default 514 on Linux, Unix, etc.)

테스트를위한 빌드 파일 및 지침 및 샘플 시스템 단위 파일이 프로젝트에 포함되어 있습니다. 즐겨!


0

syslog-ng 및 시스템 저널

에서 의 syslog-ng에

syslog-ng 버전 3.6.1부터 system()systemd를 사용하는 Linux 시스템 의 기본 소스는 저널링을 표준 system()소스 로 사용 합니다.

저널 및 syslog-ng 파일을 모두 사용하려면 다음 설정이 적용되는지 확인하십시오. systemd-journald의 경우 /etc/systemd/journald.conf 파일에서 Storage =는 auto 또는 unset (기본값은 auto)로 설정되고 ForwardToSyslog =는 no 또는 unset (기본값은 no)으로 설정됩니다. /etc/syslog-ng/syslog-ng.conf의 경우 다음 소스 스탠자가 필요합니다.

 source src {
   system();
   internal();
 };

반면에, 당신은 journald 로그 만의 시스템 로그 - ng를 텍스트 로그, 설정 유지하지 소원 경우 Storage=volatileForwardToSyslog=yes의를 /etc/systemd/journald.conf. 이것은 램으로 저널링됩니다. syslog-ng 3.6.3부터 syslog-ng는 저널링을 system()소스로 사용하므로 Storage = none을 설정하면 시스템 저널은 모든 메시지를 삭제하고 syslog-ng로 전달하지 않습니다.

변경 후 systemd-journald.servicesyslog-ng.service데몬을 다시 시작하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.