やたらピンポイントなタイトルですが、本当に困っていました。
というのも、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が実行されるように設定します。
Run Command
Deployments and Commands
-> Run Command
-> Update Custom Cookbooks
を実行してcookbookのキャッシュを更新します。
その後は同様に
Deployments and Commands
-> Run Command
-> setup
で実行するか、再起動などでsetupが走ったときにはrecipeが実行されるでしょう。
おわりに
ansible派なのでChefめんどくさいなって思いました。
とりあえず、同じような事象がある人は何かの参考になれば幸いです(くらいの軽い気持ちで書きました)。