ようへいの日々精進XP

よかろうもん

fluentd + MongoDB で capped collection 運用する時のメモ

はじめに

  • MongoDB のコレクションを capped にして気付いたこと
  • 但し、マニュアルをちゃんと読んでいれば問題はないことです

気付いたこと(= ハマったとこ)

ディスク容量とインデックス

MongoDB にて capped collection を設定すると以下のように動作する。

  • 指定した上限であらかじめディスク容量を確保してしまう(なので一気にディスク使用量が増える)
  • インデックスを設定してあった場合にはその設定が吹っ飛ぶ(バックグラウンドでインデックスを設定してくれるようなので、吹っ飛んだ場合には改めて設定する)

td-agent(fluentd) 側でも適切な設定が必要

MongoDB 側で capped collection を有効にした後、何かの拍子に td-agent(fluentd) の再起動を行ったところ以下のようなエラーメッセージが表示された。

[error]: unexpected error error_class=Fluent::ConfigError error=#<Fluent::ConfigError: New configuration is different from existing collection: new = normal, old = capped>

これは td-agent(fluentd) 側で指定したコレクションが無い場合にコレクションを自動生成する機能があり、この機能が指定されたコレクションのチェックを行っている為に出力される(ざっくりとした認識)為で、以下のように設定することで正常に動作する。

capped
capped_size ${指定した capped のサイズ}

このことはドキュメントにもちゃんと書かれているので、capped を設定する前にちゃんと読んでおけばなんて事は無かった。


さいごに

個人的に MongoDB は運用が大変そうというイメージが先行していたけど、検索のスピードや情報の豊富さ、危険な程手軽な設定で今更ながら便利な KVS だなーと感じている。また、td-agent(fluentd) との親和性も良くて、ちゃんとドキュメントを読んで挑めば何ら問題無く環境を構築出来るのではないかと考えている。