내가 정의한 형식으로 syslog 서버에 넣기 위해 구성 파일을 정의하는 데몬 systemd
에 로그인하는 서비스로 관리되는 간단한 Python 조각이 있습니다 . rsysogd
지금까지는 잘 작동합니다.
아래 코드에서는 서버에 로그인하려는 문자열로 매개변수를 전달합니다. 저는 아래 코드를 모듈로 사용하여 로깅에 단독으로 사용하고 있는데, 실제 스크립트에서는 이를 로깅에 사용합니다.
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
응용 프로그램은 이 응용 프로그램 systemd
에 의해 관리되므로 볼 때 사용 가능한 syslog 복사본을 만들고 syslog에 다른 중요한 정보를 기록하므로 그런 일이 발생하지 journalctl -xe
않기를 journalctl -u <my-service>
바랍니다.
서비스 정의는
[Unit]
Description=Computes device foobar availability status
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
WatchdogSec=60
RestartSec=10
Restart=always
LimitNOFILE=4096
[Install]
WantedBy=default.target
그리고 /etc/systemd/journald.conf
내가 활성화하지 않은 파일 에서어느사용 가능한 옵션. 이거 찾아봤는데로그 구성 파일설명서를 사용 ForwardToSyslog=no
하고 journald
서비스를 다시 시작하세요
systemctl restart systemd-journald
서비스 장치도 다시 시작했지만 syslog 서버에 대한 로그 출력이 표시됩니다.그리고또한 로그를 기록합니다. 여기서 어떤 옵션이 누락되었나요?
답변1
rsys[l]ogd 데몬 [...]에 기록하는 시스템 서비스로 관리되는 간단한 Python 조각이 있습니다.
아니요, 아직 안 하셨습니다.
당신이 가진 것은 시스템 로그에 기록하는 서비스입니다. Python 프로그램이 통신하고 있는 잘 알려진 소켓을 수신하는 /dev/log
서버 는 가 아닙니다 rsyslogd
. 이것은 systemd-journald
. rsyslogd
예반대편에 붙어있는, systemd-journald
그리고 Python 프로그램이 그것과 대화하지 않습니다.
이것으로 볼 때, 없이 무언가를 보내는 systemd-journald
유일한 방법은 분명해 보입니다.다른로 라우팅 rsyslogd
,아니요기본적으로 Python 라이브러리에서 사용되는 잘 알려진 소켓입니다. 그것은 모두 당신이 그것을 구성하는 방법에 따라 달라집니다 rsyslogd
.
- 다음 명령을 사용하여 UDP 서버 모듈을 켰을 수 있습니다
imudp
. 이 경우 해당 UDP 서버와 통신하는 다른 Python 라이브러리를 사용하여 Python 프로그램에 이 모듈을 사용하도록 지시할 수 있습니다. (Python syslog 라이브러리는 잘 알려진 로컬 소켓을 사용하도록 내장되어 있습니다.) - 또는(더 좋은 점은 UDP 서비스를 컴퓨터 외부에 공개하지 않도록 조심해야 한다는 점을 고려하면) 모듈 구성에서 이를 구성하여 수신 대기할
rsyslogd
두 번째 알 수 없는 소켓을 제공할 수 있다는 것입니다. 다시 말하지만, Python 프로그램에 이를 사용하고 다른 Python 라이브러리를 사용하도록 지시해야 합니다.AF_LOCAL
imuxsock
Python 프로그램에서 수행하는 작업은 이 답변의 범위를 벗어납니다.