나는 Ubuntu 16.04.7 LTS 를 실행하는 Linux 컴퓨터를 가지고 있으며 rsyslogd
.rsyslogd
dmesg
/var/log/syslog
따라서 명목상 에서는 "시작" 메시지가 표시되고 나중에 에서 검색할 수 있는 커널 메시지가 /var/log/syslog
표시될 것으로 예상됩니다 . 첫 번째 커널 메시지가 0.0000초의 상대 시간에 어떻게 시작되는지 확인하세요.rsyslogd
dmesg
$ cat /var/log/syslog
...
rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="4970" x-info="http://www.rsyslog.com"] start
...
kernel: [ 0.000000] Booting Linux on physical CPU 0x0
때때로 를 보면 /var/log/syslog
첫 번째 커널 메시지가 40초 이상 후에 시작된다는 것을 알 수 있습니다.
$ cat /var/log/syslog
...
rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="4970" x-info="http://www.rsyslog.com"] start
...
kernel: [ 45.829155] IRQ6 no longer affine to CPU4
즉시 살펴보면 dmesg
"물리적 CPU 0x0에서 Linux 부팅" 메시지가 누락된 것을 볼 수 있습니다.
$ dmesg | head -n1
kernel: [ 0.000000] Booting Linux on physical CPU 0x0
이 모든 것이 나에게 그런 느낌을 주게 만든다일부왜냐하면 rsyslogd
때때로 커널 메시지의 첫 번째 비트를 기록하지 않는 경쟁 조건이 발생하기 때문입니다. 하지만 이 문제를 해결하는 방법을 모르겠습니다. 이 문제를 심층적으로 해결하는 방법에 대한 지침을 얻고 싶습니다.
답변1
auditd
관심 있는 파일에 액세스하는 시기를 추적하는 의 도움으로 이 문제를 해결할 수 있었습니다 . 간단히 말해서, 그들 rsyslog
과 나는 logd
둘 다 그것을 활성화했고 둘 다 읽고 싶어했습니다 /proc/kmsg
. 그러나 @JamesThomasMoon이 지적했듯이 /proc/kmsg
누군가 읽은 후에 지워졌습니다. 그래서 내 시스템은 때때로 도착 rsyslogd
여부 에 따라 시스템 로그를 잃습니다 .logd
/proc/kmsg
이 문제를 해결하기 위해 취한 대략적인 단계는 다음과 같습니다.
- 평소대로
auditd
설치하십시오 .apt-get
- 이름이 지정된
auditd
규칙 을 추가합니다 .proc_kmsg
"누군가 이 글을 읽을 때마다/proc/kmsg
메모해 두세요".
$ cat /etc/audit/rules.d/foobar.rule
-w /proc/kmsg -p r -k proc_kmsg
- 추가된 규칙을 로드하여 적용합니다.
$ augenrules --load
- 시스템을 다시 시작하십시오.
- 로그를 읽고
auditd
무엇이 액세스를 시도했는지 확인하세요/proc/kmsg
.
$ ausearch -k proc_kmsg --interpret
/usr/sbin/rsyslogd
내 경우에는 읽기 시도를 나타내는 줄이 있고 읽기 시도를/proc/kmsg
나타내는 또 다른 줄이 있음을 확인했습니다 . 저는 활성화할 생각이 전혀 없었기 때문에 그에 따라 비활성화 했습니다 ./sbin/logd
/proc/kmsg
rsyslogd
logd
logd
type=PROCTITLE msg=audit(05/30/23 18:10:50.266:28) : proctitle=/usr/sbin/rsyslogd -n
그리고
type=PROCTITLE msg=audit(05/30/23 18:10:50.846:32) : proctitle=/sbin/logd