
そこで、Logstash をインストールし、logstash shipper (JVM が必要で、一般的に大規模であるため) を使用する代わりに、次の構成で 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
InputFileMonitor ブロックは 28 個あり、それぞれが異なるカスタム アプリケーション ログファイルを監視します。
もし私が走ったら
[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 個近くあります。
私本当に1 つのファイルを監視する必要があったため、それを一番上に移動したところ、監視は完了しましたが、心配せずに 28 個以上のファイルすべてを監視できるようにしたいと思います。
OSは
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
られています。問題のあるファイルの 1 つに実際に書き込みを試み、10 秒待っても出力ログに何も表示されなかったかどうかについては言及されていません。また、ファイルが正しく監視されていることを確認する方法も示してください。 - 監視対象のファイルをいくつか削除してみてください。監視対象のファイルの 1 つだけに問題があり、rsyslog が残りのファイルも無視している可能性があります。どのファイルかがわかれば役立ちます。
参考になれば幸いですが、私は CentOS 5.5 と rsyslog の同じバージョンを使用しています。40 個のファイルで試してみましたが、rsyslog ですべてのファイルを監視できました。そのため、正常に動作することがわかっています。
答え2
この質問にはすでに承認済みの回答がありますが、他の誰かがこれを必要とする場合に備えて。
によるrsyslog ドキュメントのデフォルト値はPersistStateInterval
0 ( $InputFilePersistStateInterval
imfile モジュールのコンテキスト) であり、これinputfile
は が閉じられたときにのみ rsyslog ファイルに書き込まれることを意味します。つまり、継続的に開いているログ ファイルがある場合は機能しないように見えます。
この問題が発生した場合は、$InputFilePersistStateInterval
2 または 3 などの低い値 (テストのみ) に設定してみてください。入力ファイルにその行数が書き込まれると、その行が rsyslog に渡されます。
答え3
これがバグなのか、あるいは意図されたものなのかは分かりません。ファイルは開かれていなくても監視できます。統計(2)mtime/size をチェックすると、最後の読み取り以降に変更があったかどうかのヒントが得られます。少なくともこれが nxlog の動作方法であり、28 個より多くを監視する必要がある場合にファイル記述子が不足するのを回避します。