rsyslog가 로깅하지 않음


17

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

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 자신의 메시지를 제외하고는 아무것도 보이지 않습니다. -n -N1인수로 rsyslog를 수동으로 실행하면 다음과 같은 결과가 나타납니다.

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 초 후에 다시 기록되지 않습니다.

생각?


이전에는 RHEL7을 사용하지 않았지만 디렉토리 /etc/rsyslog.conf/etc/rsyslog.d디렉토리를 확인했습니다 . 특정 로그 파일로 라우팅되도록 구성된 것이없는 것 같습니다. syslog 메시지를 EMERG우선 순위로 지정하여 통과하는지 확인할 수도 있습니다 . 예 :logger -p EMERG not really an emergency
Bratchley

1
/etc/rsyslog.conf에는 다음이 포함됩니다. * .info; mail.none; authpriv.none; cron.none; local0.none / var / log / messages /etc/rsyslog.d, listen.conf의 파일은 다음과 같습니다. : $ SystemLogSocketName / run / systemd / journal / syslog 및 rate-unlimit.conf this : $ SystemLogRateLimitInterval 0 $ SystemLogRateLimitBurst 0 EMERG 우선 순위는 기록되지 않습니다.
Arkandel

줄 바꿈을 잃어 버렸으므로 답변이나 pastebin을 업데이트해야합니다.
Bratchley

미안합니다. 어떤 이유로 주석에서 줄 바꿈을 구문 분석하지 않습니다. rsyslog.conf에서 이것을 주석 처리하면 $ OmitLocalLogging on이 다시 활성화됩니다. 그러나 동일한 호스트의 다른 동일한 VM에서 주석 처리되지 않았으며 로깅이 올바르게 작동합니다.
Arkandel

systemd자세히 살펴보면, 그것은 (RHEL7이 IIRC로 마이그레이션 한) 옵션입니다. journalctl -b로그가 시스템 저널에 전송되는지 확인할 수 있습니까 ?
Bratchley

답변:


19

직접적인 해결책은 아니지만 일부이면에서 무슨 일이 일어나고 있는지 디버깅 할 수 있습니다.

아이디어 # 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에 제출했습니다.

버그의 특징은 다음과 같습니다.

호스트 자체 시간을 설정했을 때 VM과 호스트의 시간이 잘못되었습니다. 그때 / 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를 통해서만 처리합니다. 나는 얼마 전에 임시로 코드를 확인했으며 이는 systemd의 문제처럼 보입니다.

자세한 내용은 https://github.com/rsyslog/rsyslog/issues/43을 참조하십시오.


나는 이것을 버그 리포트로 가져 왔고 RedHat으로부터 응답을 받았다. 자세한 내용은 bugzilla.redhat.com/show_bug.cgi?id=1088021 에서 확인할 수 있습니다 . 여러분 모두 도와 주셔서 감사합니다. :)
아칸 델

1
@Arkandel-이것에 대한 루프를 닫아 주셔서 감사합니다. 귀하의 발견 사항과 해결 방법을이 A에 통합하여 해결 된대로 Q & A주기를 닫을 수 있습니다 (적어도 해결 방법으로 확인 된 버그라는 의미에서). 이 시놉시스에 동의하는 경우이 A를 승인 된 것으로 표시하십시오.
slm

4

제 경우에는 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/system@0005317804680d96-e103c48634d16856.journal~ (4096 bytes).

1

rsyslogd 를 다음과 같이 점검하십시오. rsyslogd -f /etc/rsyslog.conf -N 1
모든 것이 정상이면 다음과 같이 systemd-journald.socket
재시작하십시오 : systemctl restart systemd-journald.socket "logger"명령을 사용하여 점검하십시오 rsyslog가 작동하는지 여부 : 로거 "hello"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.