VTRyo Blog

一歩ずつ前に進むブログ

サーバが再起動されたときにtd-agentの転送だけが失敗している問題

f:id:vtryo:20180731210323p:plain

やたらピンポイントなタイトルですが、本当に困っていました。

というのも、td-agentが稼働しているサーバが停止 or rebootすると、td-agentのログ転送だけ止まっているという。

今回は解消の備忘録。

環境

  • EC2(Opsworks)
  • td-agent 0.12.40

状況

ログ転送だけが止まっているという状況を説明すると、

  • サーバが再起動されたあとの時刻でtd-agentも起動していきているログがきちんとある
  • プロセスも生きている
  • エラーログも特殊なことは書いていない
  • ただ転送先にログは来ない

というなんとも気持ち悪い状態でした。

[root@xxxx conf.d]# ps aux | grep td-agent
root      3391  0.0  0.1 220720 20508 ?        Sl   Jul06   0:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group nginx --daemon /var/run/td-agent/td-agent.pid
root      3394  0.0  0.3 298272 53812 ?        Sl   Jul06   1:07 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group nginx --daemon /var/run/td-agent/td-agent.pid
root     15463  0.0  0.0 110476  1992 pts/1    S+   19:39   0:00 grep --color=auto td-agent
[root@xxxx ec2-user]# /etc/init.d/td-agent status
td-agent is running                                        [  OK  ]

対応

この事象、/etc/init.d/td-agent restartをすると解消していたことだけはわかっていました。

なので、サーバの再起動や停止&起動の操作が行われたあとにtd-agentを再起動するようにcookbookで設定を入れました。(Opsworksなのでchefを使わざるを得ない)

recipes

sites-cookbooks/td-agent/recipes/default.rb

execute 'td-agent restart' do
    command '/etc/init.d/td-agent restart'
end

recipeはこれだけです。本当にシンプルにtd-agentを再起動するだけ(笑)

※とはいえ、Berksfileへの追記と、berks updateなどは実行してpushしています

Opsworksでの設定

Opsworksではこれだけでは実行されません。

recipeの設定画面で、setupが実行されたときにtd-agentを再起動recipeが実行されるように設定します。

f:id:vtryo:20180731205026p:plain

Run Command

Deployments and Commands -> Run Command -> Update Custom Cookbooks

を実行してcookbookのキャッシュを更新します。

その後は同様に

Deployments and Commands -> Run Command -> setup

で実行するか、再起動などでsetupが走ったときにはrecipeが実行されるでしょう。

おわりに

ansible派なのでChefめんどくさいなって思いました。

とりあえず、同じような事象がある人は何かの参考になれば幸いです(くらいの軽い気持ちで書きました)。