td-agent版Fluentdデーモンの特徴と監視


td-agent版Fluentdを大量に導入してみて、かなり快適に動いています。

ただ、若干不安定な部分があり、対応が必要だったので記しておきます。



導入したOS

今のところtd-agentを入れたOSは
  • CentOS 5
  • Debian Lenny
  • Debian Squeeze

  • td-agentデーモン(プロセス)の特徴

    プロセス数

    netstatやlsofで見たらわかりますが、tcp, udp用2つで1セットとなっています。

    重複起動する

    /etc/init.d/td-agent start を実行したら実行した分だけ起動していきます。これはCentOSでもDebianでも確認しました。これをやると、/var/run/td-agent/td-agent.pid には新しいTCPプロセスのPIDが記録されていますが、古い方のプロセスも通常通り動作しているため、
  • ログが重複送信される
  • stop しても新しい方しか停止しない

  • という状態になります。
    もちろん古い方のプロセスは kill か pkill td-agent でしか消せません。

    /etc/init.d/td-agent stop で正常に停止しないことがある

    restart における stop も同様の話ですが、それなりの頻度で、stopしても2プロセスとも落ちなかったり、1プロセスだけ残ったりします。bufferにわざと溜めて、吐き出すためにstopが遅くなることも試したことがありますが、そうではなく健康な状態で起こります。

    そのため、restartを打つと知らないうちにプロセスが重複してログが重複していることがあります。

    (不確か)pidが勝手に変わる?瞬間的に3プロセスになる?

    これはほぼlenny版でのみ起きているようですが、プロセスを監視していると、pidが突然変わったことや、ps -C td-agent が瞬間的に3プロセスになることを確認しています。

    プロセス数はまだしも、td-agent.log には特に何も残らずに pid が変わっていたりするので結構不気味です。reload的な動作をしているのか、何かのプラグインが影響しているのか・・・ただ、対策もできてlennyの台数が少ないのもあり、あまり深追いはしていません。

    デーモンの監視

    以上のようなクセがあり、特に重複起動の状態だけは避けなくてはいけません。Fluentdに限らず、どのようなログ配送システムを利用するとしても、正常な状態であるかの監視とその自動修正は必須だと思います。たとえデーモンがある程度しっかりしていても、OS起動時や、手動restart時に監視による自動起動が重なったり…いろんな局面で全て上手くいく保証はないからです。

    ということで今のところこんな感じで平和に稼働しています。
  • Agentの場合td-agentが動いていなければ起動する
  • Collectorの場合LISTEN 24224 が無ければ起動する
  • td-agentプロセスが2つじゃなければ全て強制停止して起動する
  • flowcounterによるカウントが極端に増減した場合アラートする

  • そもそも、全サーバでログの過不足が全く無しに、というのは無理な話なので、ポリシーとしては、ログのロストは可能な限りゼロを目指し、ログの重複はもし起きても解析処理の途中でカットすることで耐性をつけています。ただ、重複を許容するシステムにしたとしても、元から断ち、安定させることは重要なので今回のようにしています。

    localhostでの監視と自動実行、外側からの監視など色々できますが、この辺は足りなすぎず、やりすぎず のバランスが大事なのでこのくらいがちょいどよいかと思っていますが、まだどうなるかはわかりません!

    td-agent版Fluentdデーモンの特徴と監視 への3件のコメント

    1. 外道父 より:

      @kzk_mover へは報告済みですが、追加で調べてみたことを追記しておきます。

      設定ファイルを変えての重複起動実験です。

      まず、完全新規インストール後のデフォルト設定のまま試しました。
      いったんパッケージインストールで勝手に起動するのを stop したあと、
      普通に start, stop は問題なく動きました。

      次に、start, start, stop をすると、stopに失敗しました。
      これは、2回目のstartで /var/run/td-agent/td-agent.pid が書き換わったためで、
      しかし、プロセスは1回目に起動されたものが残っていました。


      次の実験は設定ファイルを変更してみました。
      本番環境は全然違う設定ですが、下記の簡単な内容でも発生したのでこれで。

      vim /etc/td-agent/td-agent.conf


      この内容にして start, start, start, … とやると、
      pid が書き変わりつつ、プロセスもひたすら増えていく状態が再現しました。


      td-agentプロセスの監視+ロスト時に自動起動 とか入れてるので、何かのタイミングでロストと判断されて、start を打ってしまってる可能性はあります。
      (ロストの判断になっちゃってるのがtd-agnetのせいか監視のせいかはまだ謎)
      ただそうだとしても、重複startでpidファイルが書き換わるのは避けて欲しいところです。

    2. kzk より:

      blog記事での報告、有難うございます。

      確かにdeb/rpm版共に重複起動するbugがinit.d scriptにあり、修正したバージョン td-agent v1.1.8をリリースさせて頂きました。恐らくこれで複数プロセスが走る事は無くなると思われます。
      > https://groups.google.com/forum/?fromgroups#!topic/fluentd/yIO0_2781Y0

      ご報告、誠に有難う御座いました。

    3. 外道父 より:

      ご対応ありがとうございました。
      Debian, CentOSともに問題ないことを確認しました。

      [メモ]↓の1.1.8で更新されています。ついでにfluentd 0.10.25 になってます。
      ChangeLog of td-agent
      http://help.treasure-data.com/kb/installing-td-agent-daemon/changelog-of-td-agent

    外道父 にコメントする コメントをキャンセル

    メールアドレスが公開されることはありません。

    次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> <pre class="" title="" data-url=""> <span class="" title="" data-url="">