
그래서.. Logstash를 설치했고, (JVM이 필요하고 일반적으로 규모가 크기 때문에) Logstash 전달자를 사용하는 대신 다음 구성으로 rsyslogd를 사용하고 있습니다.
# Use traditional timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
# Provides kernel logging support (previously done by rklogd)
$ModLoad imklog
# Provides support for local system logging (e.g. via logger command)
$ModLoad imuxsock
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
/etc/rsyslog.d/logstash.conf에서imfile을 사용하는 파일 모니터 블록은 28개입니다.
$ModLoad imfile # Load the imfile input module
$ModLoad imklog # for reading kernel log messages
$ModLoad imuxsock # for reading local syslog messages
$InputFileName /var/log/rabbitmq/startup_err
$InputFileTag rmq-err:
$InputFileStateFile state-rmq-err
$InputFileFacility local6
$InputRunFileMonitor
....
$InputFileName /var/log/some.other.custom.log
$InputFileTag cust-log:
$InputFileStateFile state-cust-log
$InputFileFacility local6
$InputRunFileMonitor
....
*.* @@10.90.0.110:5514
28개의 InputFileMonitor 블록이 있으며, 각각은 서로 다른 사용자 정의 애플리케이션 로그 파일을 모니터링합니다.
내가 달리면
[root@secret-gm02 ~]# lsof|grep rsyslog
rsyslogd 5380 root cwd DIR 253,0 4096 2 /
rsyslogd 5380 root rtd DIR 253,0 4096 2 /
rsyslogd 5380 root txt REG 253,0 278976 1015955 /sbin/rsyslogd
rsyslogd 5380 root mem REG 253,0 58400 1868123 /lib64/libgcc_s-4.1.2-20080825.so.1
rsyslogd 5380 root mem REG 253,0 144776 1867778 /lib64/ld-2.5.so
rsyslogd 5380 root mem REG 253,0 1718232 1867780 /lib64/libc-2.5.so
rsyslogd 5380 root mem REG 253,0 23360 1867787 /lib64/libdl-2.5.so
rsyslogd 5380 root mem REG 253,0 145872 1867797 /lib64/libpthread-2.5.so
rsyslogd 5380 root mem REG 253,0 85544 1867815 /lib64/libz.so.1.2.3
rsyslogd 5380 root mem REG 253,0 53448 1867801 /lib64/librt-2.5.so
rsyslogd 5380 root mem REG 253,0 92816 1868016 /lib64/libresolv-2.5.so
rsyslogd 5380 root mem REG 253,0 20384 1867990 /lib64/rsyslog/lmnsd_ptcp.so
rsyslogd 5380 root mem REG 253,0 53880 1867802 /lib64/libnss_files-2.5.so
rsyslogd 5380 root mem REG 253,0 23736 1867800 /lib64/libnss_dns-2.5.so
rsyslogd 5380 root mem REG 253,0 20768 1867988 /lib64/rsyslog/lmnet.so
rsyslogd 5380 root mem REG 253,0 11488 1867982 /lib64/rsyslog/imfile.so
rsyslogd 5380 root mem REG 253,0 24040 1867983 /lib64/rsyslog/imklog.so
rsyslogd 5380 root mem REG 253,0 11536 1867987 /lib64/rsyslog/imuxsock.so
rsyslogd 5380 root mem REG 253,0 13152 1867989 /lib64/rsyslog/lmnetstrms.so
rsyslogd 5380 root mem REG 253,0 8400 1867992 /lib64/rsyslog/lmtcpclt.so
rsyslogd 5380 root 0r REG 0,3 0 4026531848 /proc/kmsg
rsyslogd 5380 root 1u IPv4 1200589517 0t0 TCP 10.10.10.90 t:40629->10.10.10.90:5514 (ESTABLISHED)
rsyslogd 5380 root 2u IPv4 1200589527 0t0 UDP *:45801
rsyslogd 5380 root 3w REG 253,3 17999744 2621483 /var/log/messages
rsyslogd 5380 root 4w REG 253,3 13383 2621484 /var/log/secure
rsyslogd 5380 root 5w REG 253,3 7180 2621493 /var/log/maillog
rsyslogd 5380 root 6w REG 253,3 43321 2621529 /var/log/cron
rsyslogd 5380 root 7w REG 253,3 0 2621494 /var/log/spooler
rsyslogd 5380 root 8w REG 253,3 0 2621495 /var/log/boot.log
rsyslogd 5380 root 9r REG 253,3 1064271998 2621464 /var/log/custom-application.monolog.log
rsyslogd 5380 root 10u unix 0xffff81081fad2e40 0t0 1200589511 /dev/log
있다는 것을 알 수 있습니다.아무데도거의 28개의 로그 파일이 실제로 읽혀지고 있습니다.
나정말하나의 파일을 모니터링해야 해서 맨 위로 옮겼더니 선택되었습니다. 하지만 걱정할 필요 없이 28개 이상의 파일을 모두 모니터링할 수 있었으면 좋겠습니다.
운영체제는
Centos 5.5
Kernel 2.6.18-308.el5
rsyslogd 3.22.1, compiled with:
FEATURE_REGEXP: Yes
FEATURE_LARGEFILE: Yes
FEATURE_NETZIP (message compression): Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
Atomic operations supported: Yes
Runtime Instrumentation (slow code): No
질문:
rsyslogd가 파일의 아주 작은 하위 집합만 모니터링하는 이유는 무엇입니까? 모든 파일이 모니터링되도록 하려면 어떻게 해야 합니까?
답변1
나는 이것들 중 일부가 명백하다는 것을 알고 있지만 여기에 내가 시도할 것들이 있습니다...
- 상태 파일 이름이 고유한지 확인하세요.
- 모든
$InputFileName
항목이 기존 항목을 가리키는 지 확인하세요.정기적인파일 - 시간을 좀 주세요. 기본 폴링 간격은 10초로 영원처럼 느껴질 수 있습니다.
- 작동하지 않는 것을 명확하게 보여줍니다.. 귀하의 질문에 따르면 파일은
lsof
. 실제로 문제가 있는 파일 중 하나에 쓰기를 시도하고 10초를 기다렸다가 출력 로그에 아무 것도 나타나지 않았는지 언급하지 않았습니다. 또한 올바르게 모니터링되는 파일을 확인하는 방법도 보여줍니다. - 모니터링 중인 파일 중 일부를 꺼내보세요. 어쩌면 rsyslog가 나머지 파일도 무시하게 만드는 모니터링되는 파일 중 하나만의 문제일 수도 있습니다. 그것이 어느 것인지 아는 것이 도움이 될 것입니다.
도움이 된다면 동일한 버전의 rsyslog가 포함된 CentOS 5.5가 있습니다. 그리고 40개의 파일로 시도해 보았는데 rsyslog가 모두 모니터링할 수 있었습니다. 그래서 나는 그것이 올바르게 작동할 수 있다는 것을 안다.
답변2
질문에 이미 승인된 답변이 있지만 다른 사람이 이를 필요로 하는 경우를 대비해 답변을 제공합니다.
에 따르면rsyslog 문서기본값은 PersistStateInterval
0( $InputFilePersistStateInterval
imfile 모듈의 컨텍스트에서)이며 이는 rsyslog 파일이 inputfile
닫힐 때만 기록된다는 의미입니다. 이는 로그 파일이 계속 열려 있으면 작동하지 않는 것처럼 보인다는 의미입니다.
이 문제가 발생하면 $InputFilePersistStateInterval
낮은 값(테스트용)(예: 2 또는 3)으로 설정해 보십시오. 그런 다음 입력 파일에 해당 행 수가 기록되면 rsyslog로 전달됩니다.
답변3
버그인지, 이런 식으로 작동하도록 의도된 것인지는 알 수 없습니다. 파일을 열지 않아도 모니터링이 가능합니다. 부름통계(2)mtime/size를 확인하면 마지막 읽기 이후 변경 사항이 있는지 여부에 대한 힌트가 제공됩니다. 최소한 이것이 nxlog가 작동하는 방식이며 28개 이상을 모니터링해야 하는 경우 파일 설명자가 부족해지는 것을 방지합니다.