Armadilloフォーラム

Armadillo-IoTでtd-agentを使いたい

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

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を発行してください。

at_yuma.arakawa

2016年2月23日 16時25分

> そのため、もしps等で確認し、fluentdのプロセスが残っている場合、
> そのPIDに対してkill -USR1を発行してください。
なお、psで確認すると、fluentd(td-agent)のプロセスは2つ存在しますが、
PIDの若い方(supervisor側)にkill -USR1を発行してください。
(/var/run/td-agent/td-agent.pid では、supervisor側のPIDを管理しております。)

ありがとうございます。
pkill -USR1 -f fluentd
では2回発行されてしまうから、ダメなんですね。

お世話になっております。西村です。

[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

2016年3月9日 17時51分

> [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となっているプロセスはどちらでしょうか?