특정 로그 메시지를 명명된 파이프로 전달하도록 rsyslog를 구성했습니다 /tmp/logger.pipe
. 그런 다음 명명된 파이프에서 데이터를 읽는 별도의 프로세스가 있습니다. 관련 부품은 다음에서 제공됩니다./etc/rsyslog.conf
# Remote Logging (silly conditional rule needed for specific logging scenario)
$template RFC5424Format,"<%PRI%>1 %timegenerated:1:10:date-rfc3339%T%timegenerated:12:19:date-rfc3339%.%timegenerated:21:26:date-rfc3339%Z %HOSTNAME% - - -%msg%\n"
if ($msg contains 'remote="true"') then /tmp/logger.pipe;RFC5424Format
/tmp/logger.pipe에 대한 권한
prwxrwxrwx 1 ftp root
이 애플리케이션을 두 개의 서로 다른 컴퓨터에 배포하고 있습니다. 한 시스템에는 rsyslog v3.xx가 장착되어 있고 다른 시스템에는 v5.xx가 장착되어 있습니다.
rsyslog v5.xx를 사용하는 컴퓨터에서는 애플리케이션이 제대로 실행되지만 rsyslog v3.xx를 사용하는 컴퓨터에서는 이상한 동작이 발생합니다. 구체적으로 다음과 같습니다.
- rsyslogd는 초기 시작 시 시작하는 데 시간이 오래 걸리는 경우가 있습니다(새 규칙을 추가하기 전에는 매우 빨랐습니다).
- 프로세스 읽기가
logger.pipe
다시 시작되면 rsyslogd는 청취 프로세스가 재개된 후 명명된 파이프에 데이터 쓰기를 중지하는 것으로 보입니다. 이 문제를 해결하는 유일한 방법은 rsyslogd를 수동으로 다시 시작하는 것입니다.
명명된 파이프를 사용할 때 rsyslog 구성에 누락된 몇 가지 트릭이 있습니까? 제가 간과할 수 있는 다른 권한 문제가 있습니까? v5.xx rsyslog 버전에서는 매우 안정적으로 실행되기 때문에 애플리케이션에 대한 확신이 있습니다. 안타깝게도 문제가 있는 컴퓨터에서는 v3.xx 버전을 업데이트할 수 없습니다.
어떤 아이디어가 있나요?
업데이트: 문제를 진단했을 수 있습니다. 판독기가 없는 경우 rsyslogd가 파이프에 대한 쓰기 연결을 닫는 문제인 것 같습니다. 그러나 판독기 응용 프로그램은 해당 기록기가 나타날 때까지 차단하는 fopen()을 사용합니다.
어떤 이유로 이것은 rsyslog v5.xx에서는 문제가 되지 않습니다.
- rsyslogd 및 logger.out이 파이프의 초기 상태를 성공적으로 열었습니다.
- _logger.out에서 다시 시작 문제, rsyslogd에 여전히 파이프에 대한 쓰기가 열려 있습니다.
- _logger.out이 복구되고 모든 것이 다시 잘 작동합니다.
그러나 이 동작은 rsyslog v3.xx에서는 다릅니다.
- rsyslogd 및 logger.out이 파이프의 초기 상태를 성공적으로 열었습니다.
- _logger.out에서 문제를 다시 시작합니다.rsyslogd가 어떤 이유로 파이프에 대한 연결을 닫았습니다.