ログ収集を pull 型に

長いこと使ってきた rsyslog だけど、ここにきて収集側のサーバーが止まると送信側も影響を受けるように。。。
溢れたり、imuxsock 分がハングしたり、収集側復旧時に再開されなかったりする。。。
オフィシャルや RainerScript も結構読んだんだけどな。。。udp tcp relp も試したんだけど。。。

古い環境や yum.repo 先が様々で、バージョンやOSも違うし、辛いか。。。

今は良いものいっぱいあるだろうにと思いながら
rrdtools 元さんも https://github.com/oetiker/LogSenderhttps://github.com/oetiker/LogFetcher を書いていたなと思い出して
自分でも pull 型を書いてみることに。

Net::OpenSSH Proclet Parallel::Prefork Log::Unrotate が強力で、思いのほか簡単に書けた。。。ちゃんと動いてる。
tail -c +$resume_pos が強力。あとは alarm システムコールを仕込むぐらい。

収集される側は rsyslog の利用は継続していて /var/log/all.log-YYYY-mm-dd あたりに jsonl で吐くのにつかってる。
あとは imuxsock 分。jail 内のソケットも受け付ける。

収集される側と収集する側のログの md5 が一致してきた。

収集後は、kqueue watcher で増分を処理に掛けるのと、手動で fgrep | ack | recs-totable したり。
荒く絞るのに fgrep は、断トツで速い。

FTP resume, HTTP Range のようだなー。送信側でロスを気にしてあれこれする必要も無くなるし。。。

コメントする

perl adv
perl adv