rsyslogd가 모든 파일을 모니터링하지 않음

rsyslogd가 모든 파일을 모니터링하지 않음

그래서.. 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 문서기본값은 PersistStateInterval0( $InputFilePersistStateIntervalimfile 모듈의 컨텍스트에서)이며 이는 rsyslog 파일이 inputfile닫힐 때만 기록된다는 의미입니다. 이는 로그 파일이 계속 열려 있으면 작동하지 않는 것처럼 보인다는 의미입니다.

이 문제가 발생하면 $InputFilePersistStateInterval낮은 값(테스트용)(예: 2 또는 3)으로 설정해 보십시오. 그런 다음 입력 파일에 해당 행 수가 기록되면 rsyslog로 전달됩니다.

답변3

버그인지, 이런 식으로 작동하도록 의도된 것인지는 알 수 없습니다. 파일을 열지 않아도 모니터링이 가능합니다. 부름통계(2)mtime/size를 확인하면 마지막 읽기 이후 변경 사항이 있는지 여부에 대한 힌트가 제공됩니다. 최소한 이것이 nxlog가 작동하는 방식이며 28개 이상을 모니터링해야 하는 경우 파일 설명자가 부족해지는 것을 방지합니다.

관련 정보