rsyslog는 로그를 기록하지 않습니다.

rsyslog는 로그를 기록하지 않습니다.

이것은 이상한 질문입니다.

RHEL7 VM에서 chrony/ntp 서비스를 테스트하고 해당 시간과 호스트 시간을 재설정하고 있습니다. 일단 만족스러워서 확인해 /var/log/messages보니 한동안 변함이 없었습니다.

이제 rsyslog 서비스 자체를 다시 시작하는 것 외에는 무엇을 하든 아무것도 기록되지 않습니다.

Apr 15 13:59:43 mymachine1 rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="2847" x-info="http://www.rsyslog.com"] exiting on signal 2.

Apr 15 13:59:59 mymachine1 rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="2853" x-info="http://www.rsyslog.com"] start

Apr 15 14:00:11 mymachine1 rsyslogd-3000: sd_journal_get_cursor() failed: 'Cannot assign requested address'

"로그하지 않음"과 같은 작업을 시도했지만 logger testrsyslog 자체 메시지 외에는 아무 일도 일어나지 않는 것 같습니다. 매개변수를 사용하여 rsyslog를 수동으로 실행하면 -n -N1다음을 얻습니다.

rsyslogd: version 7.4.2, config validation run (level 1), master config /etc/rsyslog.conf

rsyslogd: End of config validation run. Bye

어떤 이유로 rsyslog를 통해 아무것도 기록되지 않는 것 같습니다. 동일한 rsyslog.conf 파일을 사용하여 동일한 호스트에 있는 두 번째 동일한 VM(ntp 비활성화, 날짜 변경 및 여러 번 재부팅과 같은 동일한 주기를 거치지 않고)은 정상적으로 기록됩니다.

이 시점에서 날짜/시간은 정확하고 chrony가 활성화되어 실행 중이며 몇 번 재부팅했습니다. 30초 동안 커널 메시지가 표시되고 나면 아무 것도 기록되지 않습니다.

아이디어?

답변1

이것은 직접적인 해결책은 아니지만 일부 디버깅을 활성화하여 뒤에서 무슨 일이 일어나고 있는지 확인하겠습니다.

아이디어 #1 - 디버그 로거

우선, logger명령을 실행할 때 STDERR에 메시지를 에코하여 이와 같이 명령을 실행할 수 있습니다.

$ logger -s "hi"
saml: hi

아이디어 #2 - 프로필 확인

rsyslog 구성 파일을 확인해 볼 수도 있습니다.

$ sudo rsyslogd -N6 | head -10
rsyslogd: version 7.2.6, config validation run (level 6), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.

6921.173842409:7f8b11df2780: rsyslogd 7.2.6 startup, module path '', cwd:/root
6921.175241008:7f8b11df2780: caller requested object 'net', not found (iRet -3003)
6921.175261977:7f8b11df2780: Requested to load module 'lmnet'
6921.175272711:7f8b11df2780: loading module '/lib64/rsyslog/lmnet.so'
6921.175505384:7f8b11df2780: module lmnet of type 2 being loaded (keepType=0).
6921.175520208:7f8b11df2780: entry point 'isCompatibleWithFeature' not present in module
6921.175528413:7f8b11df2780: entry point 'setModCnf' not present in module
6921.175535294:7f8b11df2780: entry point 'getModCnfName' not present in module
6921.175541502:7f8b11df2780: entry point 'beginCnfLoad' not present in module

아이디어 #3 - rsyslogd 디버깅 켜기

rsyslogd또한 더 많은 통찰력을 얻기 위해 데몬 디버깅을 활성화해 보겠습니다 .

$ sudo -i
$ export RSYSLOG_DEBUGLOG="/tmp/debuglog"
$ export RSYSLOG_DEBUG="Debug"

$ service rsyslog stop
$ rsyslogd -d | head -10    
7160.005597645:7fae096a3780: rsyslogd 7.2.6 startup, module path '', cwd:/root
7160.005872662:7fae096a3780: caller requested object 'net', not found (iRet -3003)
7160.005895004:7fae096a3780: Requested to load module 'lmnet'
7160.005906331:7fae096a3780: loading module '/lib64/rsyslog/lmnet.so'
7160.006023505:7fae096a3780: module lmnet of type 2 being loaded (keepType=0).
7160.006030872:7fae096a3780: entry point 'isCompatibleWithFeature' not present in module
7160.006033780:7fae096a3780: entry point 'setModCnf' not present in module
7160.006036209:7fae096a3780: entry point 'getModCnfName' not present in module
7160.006038359:7fae096a3780: entry point 'beginCnfLoad' not present in module
...
...
7160.006063913:7fae096a3780: rsyslog runtime initialized, version 7.2.6, current users 1
7160.006102179:7fae096a3780: source file syslogd.c requested reference for module 'lmnet', reference count now 2
7160.006113657:7fae096a3780: GenerateLocalHostName uses 'greeneggs'

버전 정보 확인

$ rsyslogd -version
rsyslogd 7.2.6, compiled with:
    FEATURE_REGEXP:             Yes
    FEATURE_LARGEFILE:          No
    GSSAPI Kerberos 5 support:      Yes
    FEATURE_DEBUG (debug build, slow code): No
    32bit Atomic operations supported:  Yes
    64bit Atomic operations supported:  Yes
    Runtime Instrumentation (slow code):    No
    uuid support:               Yes

See http://www.rsyslog.com for more information.

확인된 오류 및 해결 방법

OP는 이것을 Red Hat에 버그로 제출했습니다.

이 오류의 특징은 다음과 같습니다.

당연하게도 호스트의 시간을 설정해 보니 가상 머신의 시간이 호스트의 잘못된 시간과 같았습니다. 그때 나는 /var/log/messages가 더 이상 업데이트되지 않는다는 것을 알았습니다.

rsyslog 서비스 자체를 다시 시작하여 파일에 기록하는 것 외에는 할 일이 없는 것으로 나타났습니다. 이렇게 하면 다음과 같은 로그가 기록됩니다.

  ---
   Apr 15 16:39:39 rhel7time-dev rsyslogd-3000: sd_journal_get_cursor() failed: 'Cannot assign requested address'

  Apr 15 16:39:39 rhel7time-dev rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="574" x-info="http://www.rsyslog.com"] exiting on signal 15.
  Apr 15 16:39:39 rhel7time-dev rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="2117" x-info="http://www.rsyslog.com"] start
  ---

그렇지 않으면 로거를 포함하여 파일에 아무 것도 기록되지 않습니다.

rsyslog.conf에서 $OmitLocalLogging을 주석 처리하면 파일 로깅이 다시 시작됩니다(그때까지 rsyslog.conf를 변경하지 않았습니다).

로깅을 사용하면 이 모든 것에 면역이 됩니다. Journalctl -b는 로거가 보낸 모든 내용을 포함하여 저널 레코드를 표시합니다.

이에 대해 한 개발자는 이렇게 답했습니다.

이 문제가 발생하면 /var/lib/rsyslog/imjournal.state해결 방법으로 데몬을 제거하고 다시 시작할 수 있습니다.

rsyslog는 날짜를 직접 처리하지 않고 시스템 API를 통해서만 처리합니다. 얼마 전 imjournal에서 코드를 확인해 보니 systemd에 문제가 있는 것 같습니다.

참고로 다음을 참조하세요.https://github.com/rsyslog/rsyslog/issues/43

답변2

내 경우에는 systemctl restart systemd-journald도움이 되었기 때문에

File /run/log/journal/29c32d60f93c42489aabb4ebeb593f5b/system.journal corrupted or uncleanly shut down, renaming and replacing.
[12274404.541271] systemd-journald[15492]: Deleted empty journal /run/log/journal/29c32d60f93c42489aabb4ebeb593f5b/[email protected]~ (4096 bytes).

답변3

다음 명령을 사용하여 rsyslogconf를 확인해 보십시오.rsyslogd -f /etc/rsyslog.conf -N 1
모든 것이 제대로 작동하면 다음 명령을 사용하여 systemd-journald.socket을 다시 시작해 보세요. systemctl 재시작 systemd-journald.socket
"logger" 명령을 사용하여 rsyslog가 작동하는지 확인할 수 있습니다.로거 "안녕하세요"

답변4

특히 RHEL7에서는 Journald와 rsyslogd 사이에 놀라울 정도로 취약한 종속성이 있습니다. Journald는 최초의 표준 로그 처리기가 되었습니다. rsyslogd로 전송된 로그를 처리 /dev/log하고 rsyslogd로 전달 해야 합니다. 그러나 rsyslogd의 기본 설치는 /dev/logRHEL 패키지 관리자가 지시문을 추가하여 이를 우회합니다.

$SystemLogSocketName /run/systemd/journal/syslog

systemd-journald.socket이는 rsyslog가 생성하고 쓸 소켓의 경로입니다. 장치는 또한 /dev/log시작을 생성하고 트리거합니다 systemd-journald.service.

그러나 어떤 이유로든 지시문이 누락된 경우또는구성 어딘가에 치명적이지 않은 오류가 있습니다 . 기본값 을 rsyslogd사용합니다./dev/log다시 만들다소켓을 사용하여 청취할 수 있습니다. 여기에는 두 가지 효과가 있습니다.

  • 프로세스에서 보낸 메시지는 /dev/log로그에 도달하지 않습니다.
  • 로그 메시지가 rsyslogd에 도달하지 않습니다.

따라서 이 문제를 디버깅하려면 rsyslog 서비스를 다시 시작하고 해당 서비스의 타임스탬프를 확인하면 됩니다 /dev/log. 시간이 일치하면 어딘가에 구성 오류가 있거나 지시문이 누락된 것입니다.

관련 정보