fluentdのプラグインを書く練習をする為にsecureログをparseしてZabbixで値が取得できるようにしてみた(作成編)
January 20, 2013
https://github.com/kenjiskywalker/fluent-plugin-securelog-parser
,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;; {;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; 全く触ったことがなくてもpluginを書いたらfluentdがわかる ヾ;;;ハ ノ .::!lリ;;r゙ `Z;i 〈.,_..,. ノ;;;;;;;;> そんなふうに考えていた時期が ,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f. 俺にもありました ~''戈ヽ `二´ r'´:::. `!
最初Postfixのmaillogつくってやろうかなんて
思っていたりした時期もオレにはありました。
しかしログが多様すぎるので、ちょっとこれ最初にやるには敷居高いなー
と思い、だからってあんまり理にかなわないことをしても意味ないな
ということで、/var/log/secure
のログを指定した文字列の出現具合を
Zabbixで取得したら面白いかなというアイデアが思いついたので
取り敢えずコードは汚いにしろ、動くまで書いてみたメモです。
作成編
事前にtestが通るまでのものは
超初級!Fluentdのプラグインを書きたくなった時の下地づくりにて作成しています。
本来はもっとスマートな作り方があるのでしょうが、
私は基本的にこの流れで行いました。
- 内容を更新する度にrake testでtestが通ることを確認する
- 変数の状況を
p hoge
で毎回確認する
この2つの繰り返しでした。
参考
- @repeatedlyさんのプラグイン作成の記事 / Software Design 2012年6月号
- Writing plugins / fluentd
- 検証中のtd-agent(fluentd)の設定とか負荷とか / IT 東京 楽しいと思うこと
- fluentdのプラグインは簡単に作成できる / ぽにくすじゃないだいありー
- Fluentd plugins
基本はりぴーさんの記事を参考に、取り敢えず片っ端からpluginのソースを読んでいけば
センスの良い人ならその場で書けそうなものですが、いかんせん素人なので
試行錯誤しながら書いて行きました。
取り敢えず動いたレベルですが、何かの参考になればと思います。
https://github.com/kenjiskywalker/fluent-plugin-securelog-parser
また、ソースを見て頂く通り、何かのログのパーサを書こうと思えば
*regexp*と*time_format*さえどうにかなれば、
プラグインの種類にもよりますが、いくらでも加工することが可能です。
fluentd、素晴らしいですね。
*tag*、*es*、*chainの中身などを.each*などで分解していき
testを実行した際に(test_emit)で
プラグイン内部の確認したい変数の中身をp hoge
する。
この繰り返していってという感じです。
ソースファイルのコメントアウト部は
コードを記述していた際には常に表示させていたものです。
サーバ上での動作のテストは
out_securelog_parser.rb
ファイルを/etc/td-agent/plugin/
へ配置することで
プラグインとして認識してくれます。素晴らしいですね。
ログが出るのを待つのは大変なので
echo '{"message":"Jan 17 02:47:59 hostname sshd[10654]: test"}' | /usr/lib64/fluent/ruby/bin/fluent-cat secure
と、fluent-cat
コマンドを実行して、確認したい*tag*を指定することで
プラグインの確認を行うことが可能です。
ちゃんとテストを書いていないあw、中身はまだまだ改善の余地があるわでアレですが
Rubyもよくに書けず、fluentdを運用した経験もあまりない人間が
稚拙ではありますが、最低限動作するところまでは書くことができました。
ハイユーザーから、エントリーユーザまで利用でき、
かつ、簡単なログパーサから、各種メトリクス生成などのプラグインが
容易に作成することができるfluentdは、やはりこれからのオペレーションの
情報取得ツールとして、無くてはならないものになっていくんだろうな。
という印象を受けました。
awesome fluentd!
続きは設定編で