rsyslogd不监视所有文件

所以..我已经安装Logstash,而不是使用logstash托运人(因为它需要JVM,通常是巨大的),我使用rsyslogd以下configuration。

# 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 (eg 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中有28个使用imfile的文件监视器块

 $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只监视文件的一小部分? 我该如何解决这个问题,以便所有的文件都被监控?

我知道其中的一些是显而易见的,但是这里来的东西我会尝试…

  • validation状态文件名是唯一的
  • validation每个$InputFileName指向一个现有的常规文件
  • 给它一些时间。 默认的轮询时间间隔是10秒,可以感觉像一个永恒
  • 清楚地表明什么是行不通的 。 你的问题说,这些文件不仅仅是基于lsof的输出进行监视。 如果您真的尝试写入其中一个有问题的文件,等待10秒钟,并且没有出现在输出日志中,则不提及。 并演示如何validation正在被监视的文件。
  • 尝试取出一些正在监视的文件。 也许这是一个问题,只有一个受监控的文件,这使得rsyslog也忽略了其余的文件。 这将有助于知道它是哪一个。

如果有帮助,我有一个与rsyslog相同版本的CentOS 5.5。 我试了40个文件,rsyslog能够监视所有的文件。 所以我知道它可以正常工作。

这个问题已经有了一个可以接受的答案,但如果有其他人需要这个问题。

根据PersistStateInterval 文档 , PersistStateInterval的默认值是0(imfile模块上下文中的$InputFilePersistStateInterval ),这意味着rsyslog文件仅在input文件closures时写入。 这意味着如果您持续打开日志文件,它将不起作用。

如果遇到这个问题,可以尝试将$InputFilePersistStateInterval设置$InputFilePersistStateInterval一个较低的值(仅用于testing),比如说2或者3,然后一旦input文件有写入的行数,它们就会被传递给rsyslog。

我不能说这是一个错误还是打算以这种方式工作。 即使文件没有打开,文件也可以被监控。 调用stat(2)并检查mtime / size将提示自上次读取以来是否有任何更改。 至less这就是nxlog的工作方式,如果你需要监视28个以上的文件描述符,就避免用完文件描述符。