Syntax Error.

[Sy] td-agent(fluentd)がchkconfigで自動起動の設定をしているのに起動しない場合の対処

2015/07/14

chkconfigで自動起動をOnにしてるのにも関わらず、td-agentが起動しなかったので調べました。

ログを見る

とにかくログを見てみます。

2015-07-14 01:57:13 +0900 [error]: unexpected error error_class=Mongo::ConnectionFailure error=#<Mongo::ConnectionFailure: Failed to connect to a master node at localhost:27017>
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.6/lib/mongo/mongo_client.rb:463:in `connect'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.6/lib/mongo/mongo_client.rb:645:in `setup'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.6/lib/mongo/mongo_client.rb:126:in `initialize'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.3/lib/fluent/plugin/out_mongo.rb:213:in `new'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.3/lib/fluent/plugin/out_mongo.rb:213:in `get_connection'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.3/lib/fluent/plugin/out_mongo.rb:190:in `get_or_create_collection'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.3/lib/fluent/plugin/out_mongo.rb:85:in `start'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/match.rb:40:in `start'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/engine.rb:263:in `block in start'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/engine.rb:262:in `each'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/engine.rb:262:in `start'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/engine.rb:213:in `run'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:464:in `run_engine'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:135:in `block in start'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:250:in `call'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:250:in `main_process'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:225:in `block in supervise'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:224:in `fork'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:224:in `supervise'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/supervisor.rb:128:in `start'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/lib/fluent/command/fluentd.rb:164:in `<top (required)>'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.55/bin/fluentd:6:in `<top (required)>'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/bin/fluentd:23:in `load'
  2015-07-14 01:57:13 +0900 [error]: /usr/lib64/fluent/ruby/bin/fluentd:23:in `<top (required)>'
  2015-07-14 01:57:13 +0900 [error]: /usr/sbin/td-agent:7:in `load'
  2015-07-14 01:57:13 +0900 [error]: /usr/sbin/td-agent:7:in `<main>'
2015-07-14 01:57:13 +0900 [info]: shutting down fluentd
2015-07-14 01:57:13 +0900 [info]: process finished code=0
2015-07-14 01:57:13 +0900 [warn]: process died within 1 second. exit.

MongoDBに接続に失敗しているみたいです。

さてはMongoDBが起動する前にtd-agentが起動しちゃってるのかな?と予想。

chkconfigは起動順を指定できるということを聞いたことあるような気がしたので確認してみる。

chkconfigの起動順(優先度)を確認

td-agentの優先度を/etc/init.d/td-agentを見て確認してみると、

# chkconfig: - 80 20

同様にmongodの優先度を/etc/init.d/mongodで確認。

# chkconfig: 35 85 15

2つ目の数字が小さいほど先に起動するので比較してみると、

  • td-agent: 80
  • mongod: 85

となっていて、td-agentの後にmongodが起動している ことがわかります。

td-agentの起動順を変更

/etc/init.d/td-agentを以下のように変更して再起動してみましたが、

# chkconfig: - 80 20
  ↓
# chkconfig: - 90 20

・・・だめだ!うまく設定が反映されてないっぽい。

chkconfigについてもうちょっと調べてみる

ということでchkconfigについてもうちょっと調べてみると、起動時の優先度は、/etc/rc.d/rc3.d/配下にシンボリックリンクが作られることで実現されている らしいということを知ったので見てみます。

$ cd /etc/rc.d/rc3.d/
$ ls
・
・
・
lrwxrwxrwx   1 root root   18 Jul 12 13:41 S80td-agent -> ../init.d/td-agent
lrwxrwxrwx   1 root root   16 Dec 21  2014 S85mongod -> ../init.d/mongod
・
・
・

なるほど。td-agentは80だったのでS80td-agentに、mongodは85なのでS85mongodになってる。Sxxの部分が優先度の数字に同じになるみたいですね。

てことはさっきの修正がシンボリックリンクの名前に反映されてないってことが問題なはず。

シンボリックリンクの名前を更新

$ sudo chkconfig --add td-agent

で反映できるみたいなので実行。その後もう一度見てみると、

・
・
・
lrwxrwxrwx   1 root root   16 Dec 21  2014 S85mongod -> ../init.d/mongod
・
・
lrwxrwxrwx   1 root root   18 Jul 14 02:14 S90td-agent -> ../init.d/td-agent
・
・
・

反映されました!これで再起動すればいけるはず。

再起動⇒無事解決!

再起動後、プロセスを確認してみると。

$ ps ax | grep td-agent
 1170 ?        Sl     0:00 /usr/lib64/fluent/ruby/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid
 1173 ?        Sl     0:00 /usr/lib64/fluent/ruby/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid

無事起動に成功しました!