はじめに
fluent-plugin-monolog
は、monologというPHPのロガーが出力したログをパースするためのfluentd
用のプラグインです。
公開した当時の記事はこちらです。
issue#1
v0.1.0
を公開したのが2016/7/7なので、1年以上経ってからissue#1が作成されました。
実際のやりとりは、githubのissueを見てもらうとして、流れをざっと説明すると以下のようになります。
fluent-plugin-monolog-example で動作確認 => 特に問題なさそう
bundle exec rake test
では、動作確認としては足りないので、確認用の環境を作っていて、それがfluent-plugin-monolog-exampleなのですが、動作確認しても特に問題ありません。
期待通り動きました。
どうやら、fluentd v0.14
で問題あるらしい
正直、今回のissueを見るまでは、fluentd v0.14
については何も知りませんでした。
2016年6月には遅くてもアナウンスされていたことを考えると、公開時には考慮しておくべきでした。
上記の記事を見て、「あー。これは確かに動かないだろうな」と思いました。
まずは、fluent-plugin-monolog-example
のfluentd
をv0.14
にする
実際のPRはこちらです。
curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
で、v0.14
がインストールされます。
現象確認
試しにfluentd v0.14
環境で、fluent-plugin-monolog v0.1.8
をインストールし、ログを出力すると、下記のエラーが出ます。
# php example/fluent_handler.php
Fluent\Logger\FluentLogger stream_socket_client(): unable to connect to tcp://127.0.0.1:24224 (Connection refused) example.fluent: {"message":"foo bar","level":"DEBUG"}
fluentd
のログを確認すると、下記のようにエラーメッセージが出力されていることが分かります。
$ cat /var/log/td-agent/td-agent.log | grep error
...
#0 unexpected error error_class=NameError error="uninitialized constant Fluent::TextParser::Parser"
...
尚、fluent-plugin-monolog v0.1.8
は下記のようにインストールします。
$ td-agent-gem install fluent-plugin-monolog -v 0.1.8
コードとテストの修正
fluentdの公式ガイドを見ながらコードを修正します。
- “fluent/parser”の代わりに、
“fluent/plugin/parser”
をrequireする - スーパークラスを
Fluent::Parser
からFluent::Plugin::Parser
に変更
コード的には、この2つで大丈夫で、あとは、テストコードを一部、変更するだけでした。
-
Fluent::TextParser
をFluent::Plugin::TextParser
に変更
依存するfluentdのバージョンを指定
fluentd v0.14
以上に対応していることを明示します。
ただ、色々試しましたが、インストールでエラーになるようなことはなかったので、正直、ドキュメント的な意味合いなのかと思ってます(ご存知の方ご指摘を)。
fluent-plugin-monolog v0.2.0
をリリース
こうして、fluent-plugin-monolog v0.2.0
をリリースしました。
おわりに
fluentd
のPlugins
ページでも紹介されていますので、fluentd
とmonolog
使っている方は、fluent-plugin-monolog
、ぜひお試しください。
ではでは。