fluentd-plugin-dstat_stdinぽいのを書いた話
fluentdのpluginを書いてみたかったのもあって、
fluentd-plugin-dstat_stdinぽいのを書いてみました。
fluentdはオレオレpluginをgemにしないでも実行できる仕組みがあって、更にtd-agentはそれを非常に簡単に利用できます。
具体的には/etc/td-agent/pluginにrbファイルを置くだけ。
ちょっとだけカスタマイズしたい時とかに非常に有用な仕組みだと思う。
解決したかったこと
■ fluent-plugin-dstat のIOが気になる
fluentd-plugin-dstatはdstatのCSV出力機能を利用し、temporaryに出力したCSVをreadして実現しています。
この仕組みが高IOな環境において負荷を助長するのでは?と思ったのがキッカケです。
EBSを利用している、というのもあるかも。既に性能が不足していた可能性も高い。
とはいえ、何かしら性能計測を行って比較してみたわけではありません。あしからず。
■ 30分毎にプロセス再起動でグラフに角が生える
外部CSVファイルを利用するせいかわからないけど30分たつとうまく動かなくなる問題があるらしく、
その解決のために30分毎にプロセス再起動をかけている。これがグラフに角として現れる。
原因がわかってるのでそれほど致命的ではないかもしれないけど見た目に影響するのはちょっと残念。
■ plugin書きたかった。
これに尽きる。
そこで、fluentd-plugin-jstatをパクった参考にして、標準出力を利用した形でどうなるか書いて試してみ・・・
たかったのですが元々利用していた環境が今は使えず、残念ながら性能試験的なことは行えていません。
一応、30分以上でも再起動無しに継続して実行は出来ているので2番目のIssueは解決しています。
Disk-writeとMemory使用系も下がってる(当たり前?)みたいなのですが、影響度合いを測ってないのでなんとも。
今回はplugin書くのを試してみたかったということで・・・。
注意点、違い
fluent-plugin-dstat本家はrewrite-tag-nameが使えるようなのだが自分のはまだ対応していません。
/etc/td-agent/pluginに置いた時のrequireをどうすればいいのかよくわからず一旦諦めました。
それから本家はの項目名は"total cpu usage"のようになるが、こちらは"total-cpu-usage"となる。 どちらも受け取ったものをそのまま出しているだけなのだが、 じゃぁ何が違うのかというとCSV出力と標準出力で表現が異なるため。ご了承ください。
その他気づき
パクッた真似した時にClass名とかもちゃんと変更しておかないと本家と同時に起動したときにパラメータが重複してるとか言われる。
当たり前!気を付けよう!
名前がstdinなのかstdoutなのかっていう。gemじゃないからまだ大丈夫(震え声
あと今回からmarkdown記法に変えてみた。書き方研究中