前置き
前回、fluentdプラグインを作ろうと思ったけど、 out_exec_filterで十分目的達成できるじゃんって気付いたので、Rubyで外部モジュール作ってそっちで処理するようにしました。
事象
自身のホームディレクトリに作ったRubyの外部モジュールを out_exec_filter で呼び出すように /etc/td-agent/td-agent.conf に記述して再起動を実行するとログにエラーが出力されて正しく動作しない。
・・・
<match xxx.log>
type exec_filter
command /opt/td-agent/embedded/bin/ruby /home/bashishi/td-agent/exec/hogehoge.rb
in_format json
out_format msgpack
tag xxx.log.parse
</match>
・・・
エラー
2016-03-16 12:43:17 +0900 [error]: exec_filter process unexpectedly exited. command="/opt/td-agent/embedded/bin/ruby /home/bashishi/td-agent/exec/hogehoge.rb" ecode=256
解決方法
hogehoge.rb を /etc/td-agent 配下に配置した。自分の場合は /etc/td-agent/exec/ ディレクトを作り、そこに配置しました。
・・・
<match xxx.log>
type exec_filter
command /opt/td-agent/embedded/bin/ruby /etc/td-agent/exec/hogehoge.rb
in_format json
out_format msgpack
tag xxx.log.parse
</match>
・・・
注意
/etc/td-agent/ の下ならどこでもいいだろうって思って /etc/td-agent/plugin/ に置くと td-agent が起動も停止もできなくなることがあります。
/etc/td-agent/plugin/ ディレクトリは起動時に読み込むプラグイン類を配置する場所の一つらしいので、ここに標準入力からの入力待ちで無限ループしているようなモジュールを置くとプラグイン読み込み処理のところで固まります。というか固まった。
そして、モジュールも消さず、/etc/td-agent/td-agent.conf も書き換えずにサーバーの再起動をして・・・。
原因
そのうち調べます。
パーミッションの設定の問題ではない感じ。