이것은 이상한 질문입니다.
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 test
rsyslog 자체 메시지 외에는 아무 일도 일어나지 않는 것 같습니다. 매개변수를 사용하여 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/log
RHEL 패키지 관리자가 지시문을 추가하여 이를 우회합니다.
$SystemLogSocketName /run/systemd/journal/syslog
systemd-journald.socket
이는 rsyslog가 생성하고 쓸 소켓의 경로입니다. 장치는 또한 /dev/log
시작을 생성하고 트리거합니다 systemd-journald.service
.
그러나 어떤 이유로든 지시문이 누락된 경우또는구성 어딘가에 치명적이지 않은 오류가 있습니다 . 기본값 을 rsyslogd
사용합니다./dev/log
다시 만들다소켓을 사용하여 청취할 수 있습니다. 여기에는 두 가지 효과가 있습니다.
- 프로세스에서 보낸 메시지는
/dev/log
로그에 도달하지 않습니다. - 로그 메시지가 rsyslogd에 도달하지 않습니다.
따라서 이 문제를 디버깅하려면 rsyslog 서비스를 다시 시작하고 해당 서비스의 타임스탬프를 확인하면 됩니다 /dev/log
. 시간이 일치하면 어딘가에 구성 오류가 있거나 지시문이 누락된 것입니다.