추가 읽기

추가 읽기

내가 정의한 형식으로 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_LOCALimuxsock

Python 프로그램에서 수행하는 작업은 이 답변의 범위를 벗어납니다.

추가 읽기

관련 정보