AS2500の最果てで

AS2500のどっかのNOCのまとまらないまとめ

fluentd + mongodb でmongodbのauthが通らない

MongoDBでreplica setを組んで、keyFileを使ってauthを有効にしている環境で、fluentd使ってログ投げ込もうとしたらauthが通らなかった。

もちろん db.system.users には roles が 'readWrite' なユーザのエントリあるし、そのユーザのuser/passをtd-agent.confにも書いた。

環境はこれ

MongoDB 2.4.3
fluentd 1.1.13
ruby 1.9.3p194 fluentdに付いてくる(?)やつ
MongoDB ruby driver 1.8.4 同上
fluentd-plugin-mongo 0.7.0 同上

で、td-agent.logとか眺めると

2013-06-10 23:03:15 +0900 [warn]: temporarily failed to flush the buffer, next retry will be at 2013-06-10 23:03:21 +0900. error="can't convert Symbol into Hash" instance=70012152580060
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/util/read_preference.rb:47:in `merge'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/util/read_preference.rb:47:in `read_pool'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/mongo_replica_set_client.rb:342:in `block in checkout_reader'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/mongo_replica_set_client.rb:326:in `checkout'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/mongo_replica_set_client.rb:341:in `checkout_reader'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/db.rb:126:in `authenticate'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/mongo_util.rb:15:in `authenticate'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/out_mongo_replset.rb:54:in `get_connection'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/out_mongo.rb:171:in `get_or_create_collection'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/out_mongo.rb:107:in `write'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/buffer.rb:290:in `write_chunk'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/buffer.rb:274:in `pop'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/output.rb:294:in `try_flush'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/output.rb:121:in `run'

とか出てるので、そもそもauthが通らないではなくてfluentdの中で失敗してる感じ。
もっというと場所的にmongo driverっぽい。

ということでmongo driverを更新する。
このrubyはシステムに入っているものではなく、fluentdが引っ張ってくるものなので、更新する場所を間違えないようにする。

# /usr/lib64/fluent/ruby/bin/gem update --system
Updating rubygems-update
Fetching: rubygems-update-2.0.3.gem (100%)
Successfully installed rubygems-update-2.0.3
Installing RubyGems 2.0.3
RubyGems 2.0.3 installed
Installing ri documentation for rubygems-2.0.3



RubyGems system software updated
# /usr/lib64/fluent/ruby/bin/gem update mongo
Updating installed gems
Updating mongo
Fetching: bson-1.8.6.gem (100%)
Successfully installed bson-1.8.6
Fetching: mongo-1.8.6.gem (100%)
Successfully installed mongo-1.8.6
Installing ri documentation for bson-1.8.6
Installing darkfish documentation for bson-1.8.6
Installing ri documentation for mongo-1.8.6
Installing darkfish documentation for mongo-1.8.6
Gems updated: bson mongo

mongo driverが1.8.4から1.8.6に更新された。

で、fluentdを上げてみてログを投げるような何かをする。

ログが投げられる。以上。