나는 명백한 것을 간과하고 있다고 생각하지만 Arch Linux 서버를 사용하여 원격 시스템에서 메시지를 systemd
수신하고 기록하는 방법을 모릅니다 .syslog
저는 Cisco 678 DSL 모뎀과 DD-WRT WAP를 가지고 있는데 둘 다 syslog 형식의 메시지를 다른 컴퓨터로 보내도록 구성할 수 있습니다. 나는 그 머신이 나의 Arch Linux 서버가 되기를 원합니다.
나는 그것을 검색했고 내가 찾은 것은 "systemd replacement syslog"이거나 더 이상 실행할 필요가 없거나 syslog
내 문제와 관련이 없는 것뿐이었습니다.
고쳐 쓰다
나는 물어 보았다아치 포럼관련 답변을 받지 못했습니다. UDP 포트 514를 수신하기 위해 syslog-ng를 설치했습니다. syslog-ng는 내 Cisco 678과 내가 가지고 있는 DD-WRT WAP에서 메시지를 작성합니다. 불행하게도 이러한 메시지는 systemd의 로그가 아닌 플랫 파일에 기록됩니다. 따라서 정확한 해결책은 없지만 해결 방법이 있습니다. 나는 syslog 메시지를 플랫 파일보다 로그에 넣는 것을 선호합니다.
답변1
당신은가난한 사람의 syslog 서버작업하기가 매우 쉽습니다.소캇. 필요한 것은 다음과 같은 서비스 단위뿐입니다.
[Service]
Restart=on-success
ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT
syslog 서비스 포트에서 수신된 모든 내용을 맹목적으로 systemd 로그로 보냅니다. 위의 내용을 다른 이름으로 저장 /etc/systemd/system/syslog.service
한 다음
# systemctl daemon-reload
# systemctl start syslog
그런 다음 수신 서버의 UDP 포트 514로 메시지를 보내려면 소스가 필요합니다.
실제로 수신된 데이터를 구문 분석하고 형식을 지정하기 위해 이 기능을 향상시킬 수 있지만 수신된 데이터만 기록하려는 경우에는 이것이 필요하지 않습니다.
(소캇아치 리눅스에서추가의저장소 pacman -S socat
:)
답변2
그래서 여기에 약간의 간격이 있습니다.
Systemd는 systemd-journal-gateway 구성 요소를 통해 원격 메시징을 지원합니다. 즉, 이러한 메시지는 syslog 형식이 아닙니다. Syslog(형식)는 RFC 5424에 문서화된 IETF 승인 사양입니다(이전 버전인 RFC 3164는 더 이상 사용되지 않음).
이를 함께 만드는 데 따른 더 많은 복잡성은 여기에 문서화되어 있습니다.
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) systemd가 여러 줄 메시지를 지원하지 않는다는 점을 지적했습니다.
답변3
나는 Arch 배포판에 대해 모른다. 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.
답변4
syslog-ng 및 systemd 로그
~에서시스템 로그
syslog-ng 버전 3.6.1부터 system()
systemd를 사용하는 Linux 시스템의 기본 소스는 Journald를 표준 system()
소스로 사용합니다.
Journald 및 syslog-ng 파일을 모두 사용하려면 다음 설정이 유효한지 확인하세요. systemd-journald의 경우 /etc/systemd/journald.conf 파일에서 Storage=는 auto 또는 설정 해제(기본값은 auto)로 설정되고 ForwardToSyslog=는 no 또는 설정 해제(기본값은 no)로 설정됩니다. /etc/syslog-ng/syslog-ng.conf의 경우 다음 소스 스탠자가 필요합니다.
source src {
system();
internal();
};
반면, 로깅 로그를 유지하지 않고 syslog-ng의 텍스트 로그만 유지 하려면 Storage=volatile
및 ForwardToSyslog=yes
. /etc/systemd/journald.conf
그러면 로그인이 메모리에 저장됩니다. syslog-ng 3.6.3부터 syslog-ng는 Journald를 소스로 사용하므로 system()
Storage=none이 설정된 경우 systemd 로그는 모든 메시지를 삭제하고 syslog-ng로 전달하지 않습니다.
변경 후 다시 시작 systemd-journald.service
하고 데몬화합니다.syslog-ng.service