rsyslog
다음과 같이 중앙 로그 서버에 로그를 보내도록 구성했습니다 .
*.* @@192.168.1.20
$ActionExecOnlyWhenPreviousIsSuspended on
& @@192.168.1.21
& /var/log/failover
$ActionExecOnlyWhenPreviousIsSuspended off
컴퓨터가 부팅될 때를 제외하고는 정상적으로 실행됩니다. 가상 머신이 시작될 때와 컴퓨터가 시작된 후 약 20초 동안은 192.168.1.20 또는 192.168.1.21로 메시지가 전송되지 않습니다. 그러나 /var/log/failover
"분실된" 메시지는 모두 포함됩니다.
테스트로 기계를 시작하고 수동으로 입력했습니다.
$ logger 1
$ logger 2
$ logger 3
...
첫 번째 중앙 로그 서버에는 다음만 포함됩니다.
Nov 28 13:57:40 demo arsene: 10
두 번째 로그 서버에는 demo
이 컴퓨터의 메시지가 포함되어 있지 않습니다.
마지막으로 기계 var/log/failover
에는 다음이 포함됩니다.demo
Nov 28 13:57:10 demo rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="361" x-info="http://www.rsyslog.com"] start
Nov 28 13:57:10 demo rsyslogd: rsyslogd's groupid changed to 104
Nov 28 13:57:10 demo rsyslogd: rsyslogd's userid changed to 101
... # more than a hundred usual messages from the kernel
Nov 28 13:57:20 demo kernel: [ 12.127981] random: nonblocking pool is initialized
Nov 28 13:57:21 demo arsene: 1
Nov 28 13:57:22 demo arsene: 2
Nov 28 13:57:23 demo arsene: 3
Nov 28 13:57:25 demo arsene: 4
Nov 28 13:57:27 demo arsene: 5
Nov 28 13:57:28 demo arsene: 6
Nov 28 13:57:30 demo arsene: 7
Nov 28 13:57:32 demo arsene: 8
Nov 28 13:57:37 demo arsene: 9
Ubuntu와 Debian 가상 머신 모두에서 이 문제가 발생했습니다.
추가 참고 사항:
네트워크 연결은 괜찮은 것 같습니다. 로그 메시지가 로그 서버로 전송되지 않는 기간
ping 192.168.1.20
동안 시도하면 둘 다 성공합니다 .curl google.com
ping
curl
로그 서버의 방화벽을 비활성화해도 아무런 효과가 없습니다.
실행 결과
tcpdump
20초 동안 로그 서버로 아무 것도 전송되지 않은 것으로 나타났습니다.네트워크의 다른 Ubuntu 시스템(매우 다른 방법을 사용하여 배포됨)은 시작 중을 포함하여 로그 서버에 로그를 보고할 수 있습니다.
결함이 있는 시스템을 올바른 시스템과 비교하여
rsyslogd
결함이 있는 시스템을 버전 8.14.0으로 업그레이드해도rsyslogd
문제가 해결되지 않았지만 이제 다음 메시지가 표시됩니다.뒤쪽에로그 보고가 작동하기 시작합니다.Nov 29 02:18:39 demo rsyslogd-2359: action 'action 11' resumed (module 'builtin:omfwd') [v8.14.0 try http://www.rsyslog.com/e/2359 ]
diff
실패한 새 시스템과 이전 작업 시스템 간의/etc/rsyslog.conf
파일이/etc/rsyslog.d/*.conf
동일함을 나타냅니다.A
apt-get update
, 그렇다고 해서 문제가 해결되는apt-get upgrade
것도 아닙니다.apt-get dist-upgrade
답변1
@ThomasDickey가 말했듯이, 사용자 영역 프로그램이 실행되기 시작하면 네트워크가 아직 완전히 가동되지 않았을 수 있습니다. 많은 엔터프라이즈 이더넷 스위치는 다음 패킷을 허용하지 않습니다.몇 초인터페이스가 나타난 후 스패닝 트리 설정 협상을 시도합니다.
rsyslog에는동작 복구 간격기본 설정은 30초입니다. TCP 연결을 사용하는 명령 이전에 이 값을 더 작은 값으로 설정하면 재시도 속도가 증가하고 연결이 더 빨리 완료됩니다.
게다가다른 옵션즉시 전송되지 않는 초기 메시지가 연결이 준비되는 즉시 전달되도록 이를 설정할 수 있습니다. 예를 들어 다음 옵션을 사용할 수 있습니다.~처럼:
$ActionResumeInterval 5
$ActionQueueType disk
$WorkDirectory /var/spool/rsyslog
$ActionQueueFilename actionRq
$ActionQueueMaxDiskSpace 1m
$ActionQueueSize 4000
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1
답변2
20초 동안 네트워크가 완전히 가동되지 않을 수 있습니다. 그 전에는 rsyslog
얘기할 사람이 없어서 현지에서 썼어요.