スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[r]syslogの取りこぼしについて 

時々、ブログで[r]syslogは取りこぼして使いものにならない、的なことを言っている人がいます。本当にそうなんでしょうか。
[r]syslogdのやることなんてとってもシンプルで簡単な事じゃないですか、UDPパケットが届いたら事前に決められていたファイルへ追記する、メインはこれだけじゃないですか。
これで取りこぼしが出るような(r)syslogが、OS標準でついてくるのが当たり前っていうのはおかしいと思うんだよね。だから、取りこぼすにはなにか理由があって、それは使い方/設定内容のせいではないかなと想像していたわけ。

自分のところであった症状
そんなことを考えていたある日、10秒に1件程度しか出力されていないログが、どうやらrsyslogサーバで捨てられているらしいことが分かった。2台の機械から同じようなテンポでログが出力されているはずなのに、どちらか片方からのログしか記録されないんだよね。本当はもっと頻繁にログ出力されているのに違いない。

名前逆引きの失敗が原因なんじゃないの
困るんで調べてみたんだけれども、rsyslogdが標準では受信したsyslogパケットの送信元IPアドレスを逆引きして名前解決しているらしい。syslogの送信元機器IPアドレスは/etc/hostsにもDNSにも登録されていなかったので名前解決にタイムアウト、失敗してようやくログがファイルへ出力される。失敗が確定するまでに時間がかかり、他のパケットが捨てられている、ということらしい。

ログを送ってくる機械をrsyslogdの動作している機械の/etc/hostsへ書いてあげた所、トラブルは直った。原因はやはり名前解決の失敗だったらしい。


で、rsyslogを使うときに機器の名前登録なんかそもそもしたくない場合がある。そういう場合にはオプション-xを付けてやればよい。これで受信したsyslogパケットの送信元IPアドレスを逆引きしなくなる。CentOS6で設定を行う場合には

[/etc/sysconfig/rsyslog]

SYSLOGD_OPTIONS="-c 5"
 ↓
SYSLOGD_OPTIONS="-c 5 -x"



と変更して、(オプション"-c 5"はオプションの先頭にないといけないので注意)

service rsyslog restart



とする。多分 service rsyslog reload ではうまく反映されない。変更点がコマンドライン引数だから。
もちろん、ログに残されるログ送信元はホスト名ではなくてIPアドレスになってしまうのは仕様です。ホスト名で記録したければDNS登録なり、/etc/hosts登録なりして下さい。ただ、syslogサーバにsyslogを投げてくるマシン全部もれなく名前登録してやらないといけないんじゃないかなぁ。

ということをしないままログを取りこぼす、とか言っているんじゃないだろうかなぁと推測してみたり。
本当はどこまで問題なくログを処理できるのか、リモートからabみたいなのを使ってベンチマークすべきなんだろうけども、どうやるのが正しいんだろう? perlでsyslogを直接投げるスクリプトを作成、ループで回すんだけども、ループごとにミリ秒単位でウェイトを入れてみる、とかやればいいのかな?

ファイル書き出しをバッファしていないじゃないの
それでもsyslogが思いとか、ロスるとか言っている場合には、ファイルへの書き出しが同期書き出しになっているんじゃないのか。

daemon.info /var/log/daemon.log


とかって設定になっていたりするのを、ファイルパスの先頭に'-'をつけることでsyslogdがファイルへ書き出す際にバッファしてディスクへの書き出し負荷が小さくなるようにしてくれる。

daemon.info -/var/log/daemon.log


それでもうまく行かない場合であっても、[r]syslogdの実装を疑うより、何か他の原因を探した方が短時間で幸せになれると思うけどな。

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://haginov.blog35.fc2.com/tb.php/280-2beb55c6

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。