저는 rsyslog를 사용하여 haproxy에서 로그를 가져와 이를 elasticsearch/kibana용 Logstash에 넣습니다.
모든 것이 잘 작동했지만 rsyslog에서 이상한 점을 발견했습니다.
Kibana에 누락된 데이터가 있는 것을 발견했습니다. 그 이유는 rsyslog입니다.
디스크의 큐가 며칠 동안 보류되고 중지되었습니다.
그래서 주말에 누락된 데이터가 있지만 어제와 오늘은 괜찮습니다.
Rsyslog는 이제 데이터를 가져와서 logstash에 저장하지만 자신의 대기열에 저장된 데이터를 잊어버린 것 같습니다.
지금은 logstash가 유휴 상태이므로 rsyslog 대기열에서 많은 추가 데이터를 그에게 강제할 수 있습니다.
그래서 내가 하고 싶은 일은 다음과 같습니다.
일시적으로 이 대기열을 플러시하려고 시도합니다(예: postfix 플러시). 이것이 가능하지 않은 경우 어떻게 해야 합니까?
내 rsyslog 구성은 다음과 같습니다.
$ActionSendTCPRebindInterval 500
$ActionQueueType LinkedList
$ActionQueueFileName kibana
$ActionQueueMaxFileSize 100m
$ActionQueueMaxDiskSpace 100g
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
답변1
비정상 종료로 인해 Rsyslog 디스크 대기열이 중단되어 .qi
스풀 디렉터리의 파일이 스풀 파일과 동기화되지 않을 수 있습니다.
이러한 경우 디스크 대기열을 플러시/큐에서 제거하려면 Rsyslog에서 제공하는 추가 스크립트를 실행해야 할 수도 있습니다(그러나 배포 패키지에는 포함되지 않음). 에 따르면https://www.rsyslog.com/doc/concepts/queues.html#disk-queues
관리 구조를 잃거나 필요하고 대기열 청크가 모두 있는 경우 rsyslog 패키지에 포함된 Perl 스크립트를 사용하여 생성할 수 있습니다. 용법:
recover_qi.pl -w $WorkDirectory -f QueueFileName -d 8 > QueueFileName.qi
$WorkDirectory
의 값은 어디에 있고 queue.spoolDirectory
, 는 QueueFileName
의 값입니다 queue.fileName
. 또한보십시오:https://www.rsyslog.com/doc/rainerscript/queue_parameters.html
예:
./recover_qi.pl -w /var/spool/rsyslog -f rsyslog_backlog -d 8 > /var/spool/rsyslog/rsyslog_backlog.qi
(스크립트를 실행하기 전에 rsyslog를 중지하는 것이 좋습니다.)
다음은 recover_qi.pl
Rsyslog git 저장소에 있습니다(파일을 얻으려면 "raw"를 클릭하십시오).https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl