knishimura
2016年2月22日 16時32分
お世話になっております。ウフルの西村です。
Armadillo-IoTでfluentdを使用してTreasureDataへデータを送信しています。
buffer_type fileで動かしているのですが、
エラーでバッファファイルに溜め込まれた状態でTreasureDataサーバへ送信できなくなりました。
そこで、バッファファイルに溜め込まれたファイルを強制的にTreasureDataへ送ろうとしたところ、
Armadilloの/var/run/にtd-agent.pidファイルが存在せず、復旧処理に手間取っています。
https://docs.treasuredata.com/articles/td-agent#confirm-data-upload
そこでお伺いしたいのは
・td-agent.pidをインストールする方法はあるのか
・ない場合は、myapp.*.bufferファイルを別マシンに移動させて、そこで強制的に処理するしか方法がないのか
という点です。
よろしくお願いいたします。
コメント
at_yuma.arakawa
knishimura
knishimura
お世話になっております。西村です。
[root@armadillo-iotg (ttymxc1) /etc/config/fluent]# ps
2312 root 0:00 ruby /usr/bin/fluentd -d /var/run/fluentd.pid -c /etc/con
2315 root 1:45 ruby /usr/bin/fluentd -d /var/run/fluentd.pid -c /etc/con
というような状況に対して、
kill -USR1 2312
を発行したのですが、バッファファイルはそのまま残った状態で、TreasureDataへ転送もされませんでした。
-rw-r--r-- 1 root root 32422 Mar 9 16:40 myapp.windmill.opelog_data.b52d98cccc7fd1a1d.buffer
-rw-r--r-- 1 root root 13717 Mar 9 14:51 myapp.windmill.opelog_data.q52d974a066a260f6.buffer
-rw-r--r-- 1 root root 8078066 Mar 9 16:39 myapp.windmill.opelog_data.q52d974ab0f7dcecf.buffer
何が間違っているのかご教示いただければ幸いです。
よろしくお願いいたします。
at_yuma.arakawa
> [root@armadillo-iotg (ttymxc1) /etc/config/fluent]# ps
> 2312 root 0:00 ruby /usr/bin/fluentd -d /var/run/fluentd.pid -c /etc/con
> 2315 root 1:45 ruby /usr/bin/fluentd -d /var/run/fluentd.pid -c /etc/con
>
> というような状況に対して、
> kill -USR1 2312
>
> を発行したのですが、バッファファイルはそのまま残った状態で、TreasureDataへ転送もされませんでした。
状況によっては、親子関係が必ずしも、親pid < 子pid とはならないのかも知れません。
この状況の時、pid=2315側へUSR1のシグナルを送信するとどうなりますか?
また、基本的に親側のpidは、プロセスグループID(pgid)と同じ値となります。
ps -eo pid,pgid,command といったコマンドで、pidとpgidを共に表示した時、
pid=pgidとなっているプロセスはどちらでしょうか?
at_yuma.arakawa
2016年2月23日 15時57分
> そこでお伺いしたいのは
> ・td-agent.pidをインストールする方法はあるのか
> ・ない場合は、myapp.*.bufferファイルを別マシンに移動させて、そこで強制的に処理するしか方法がないのか
pidファイルが無くとも、復旧可能です。
pidファイルは、fluentd(td-agent)のPID(プロセスID)を格納しているファイルです。
バッファをフラッシュするときには、下記のようにサブシェルでtd-agent.pidというファイルを
catした結果(=fluentd(td-agent)のPID)に対してkillコマンドでUSR1シグナルを送っているだけです。
> $ kill -USR1 `cat /var/run/td-agent/td-agent.pid`
そのため、もしps等で確認し、fluentdのプロセスが残っている場合、
そのPIDに対してkill -USR1を発行してください。