rsyslogd v3.xx가 명명된 파이프 대상에 대한 쓰기 연결을 예기치 않게 닫았습니다.

rsyslogd v3.xx가 명명된 파이프 대상에 대한 쓰기 연결을 예기치 않게 닫았습니다.

특정 로그 메시지를 명명된 파이프로 전달하도록 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를 사용하는 컴퓨터에서는 이상한 동작이 발생합니다. 구체적으로 다음과 같습니다.

  1. rsyslogd는 초기 시작 시 시작하는 데 시간이 오래 걸리는 경우가 있습니다(새 규칙을 추가하기 전에는 매우 빨랐습니다).
  2. 프로세스 읽기가 logger.pipe다시 시작되면 rsyslogd는 청취 프로세스가 재개된 후 명명된 파이프에 데이터 쓰기를 중지하는 것으로 보입니다. 이 문제를 해결하는 유일한 방법은 rsyslogd를 수동으로 다시 시작하는 것입니다.

명명된 파이프를 사용할 때 rsyslog 구성에 누락된 몇 가지 트릭이 있습니까? 제가 간과할 수 있는 다른 권한 문제가 있습니까? v5.xx rsyslog 버전에서는 매우 안정적으로 실행되기 때문에 애플리케이션에 대한 확신이 있습니다. 안타깝게도 문제가 있는 컴퓨터에서는 v3.xx 버전을 업데이트할 수 없습니다.

어떤 아이디어가 있나요?

업데이트: 문제를 진단했을 수 있습니다. 판독기가 없는 경우 rsyslogd가 파이프에 대한 쓰기 연결을 닫는 문제인 것 같습니다. 그러나 판독기 응용 프로그램은 해당 기록기가 나타날 때까지 차단하는 fopen()을 사용합니다.

어떤 이유로 이것은 rsyslog v5.xx에서는 문제가 되지 않습니다.

  1. rsyslogd 및 logger.out이 파이프의 초기 상태를 성공적으로 열었습니다.

여기에 이미지 설명을 입력하세요.

  1. _logger.out에서 다시 시작 문제, rsyslogd에 여전히 파이프에 대한 쓰기가 열려 있습니다.

여기에 이미지 설명을 입력하세요.

  1. _logger.out이 복구되고 모든 것이 다시 잘 작동합니다.

그러나 이 동작은 rsyslog v3.xx에서는 다릅니다.

  1. rsyslogd 및 logger.out이 파이프의 초기 상태를 성공적으로 열었습니다.

여기에 이미지 설명을 입력하세요.

  1. _logger.out에서 문제를 다시 시작합니다.rsyslogd가 어떤 이유로 파이프에 대한 연결을 닫았습니다.

여기에 이미지 설명을 입력하세요.

답변1

rsyslog 문서에 따르면 대상에는 파이프 기호가 포함되어야 합니다. 이 수정으로 내 문제가 해결되었습니다. rsyslog는 판독기가 닫혀 있어도 명명된 파이프에 대한 연결을 열어 둡니다.

이것이 rsyslog v3.xx에서만 문제가 되는 이유를 설명할 수 없습니다.

여기에 이미지 설명을 입력하세요.

관련 정보