cloudpack のかっぱこと 川原 洋平@inokara)です。

はじめに

sensu や zabbix 等の監視ツールの代わりとして fluentd を利用してサーバーの監視が出来ないか考えてみた(試してみた)のでメモです。


なぜ fluentd か?

最近は監視ツールを何を選択するか?という前に黙っていても fluentd(td-agent)が入っていること(入れることを前提)が多々あるので、fluentd をログだけに利用するのは勿体無いよねって思った次第です。そもそも、監視ツールから出力されるイベントもログの一つだと考えれば fluentd も監視ツールとして利用出来るのは当たり前のことなのかもしれません。

また、fluentd は sensu 等と同様に各種プラグインが多数用意されており、監視に必要な下記の要素を網羅したプラグインも存在していると思います。

  • チェック
  • 通知
  • 監視メトリクスの可視化

例えば、チェックであれば dstat や df を実行するプラグイン、通知は mail や slack 等への通知、監視メトリクスの可視化に関しては growthforecast や graphite や InfluxDB 等、個人的な印象では sensu に負けない位のプラグインは揃っているのではと感じています。


ディスク使用量を監視する場合の設定例

早速

試してみたのでそれをめもります。

使うプラグイン

プラグイン名 役割 備考
fluent-plugin-df df を実行してディスク使用量をチェック 複数のマウントポイントをどのようにチェックするかが工夫が必要
fluent-plugin-config_expander fluent-plugin-df の出力タグにホスト名を付加 プレースフォルダの __HOSTNAME__ を利用する
fluent-plugin-notifier 閾値の定義と通知プラグインへ通知
fluent-plugin-slack アラートを slack へ通知 一部修正が必要
fluent-plugin-graphite 取得した値を graphite へ通知してグラフ化

それぞれのプラグイン設定

うんちくより実践

とりあえず、以下にチェック、通知とメトリクスの可視化の設定について記載します。

チェック

fluent-plugin-df と flunet-plugin-config_expander を利用します。

<source>
  type config_expander
  <config>
    type df
    option -k
    interval 3
    tag_prefix df.__HOSTNAME__
    target_mounts /
    replace_slash true
    #tag dstat
    rm_percent true
    hostname true
  </config>
</source>

flunet-plugin-config_expander でタグにホスト名を付加しています。

通知とメトリクスの可視化

flunet-plugin-notifier と fluent-plugin-slack そして、fluent-plugin-graphite を利用しています。

<match df.*.*>
  type copy
    <store>
      type notifier
      default_tag_warn notifier.df.warn.log
      default_tag_crit notifier.df.crit.log
      default_interval_1st 1
      <def>
        pattern disk_capacity
        check numeric_downward
        warn_threshold 10
        crit_threshold 5
        target_keys capacity
      </def>
    </store>

    <store>
      type graphite
      host ${graphite_host}
      port 2003
      tag_for prefix
      name_keys size,used,available
    </store>
</match>

<match notifier.df.*.log>
  type copy
  <store>
    type stdout
  </store>
  <store>
    type buffered_slack
    api_key ${API_KEY}
    team ${TEAM}
    channel %23${CHANNEL}
    username ${USER_NAME}
    buffer_path /path/to/buffer/slack
    flush_interval 60s
    color bad
    icon_emoji :hoge:
    timezone Asia/Tokyo
  </store>
</match>

上記の設定は監視結果を収集するホストにだけ設定すれば良く、監視の対象となるホストは上述のチェックの設定だけを行えば良いことになります。

尚、閾値を超えた場合には以下のように通知されます。

fluentd 通知とメトリクスの可視化: 閾値を超えた場合の表示

また、ディスクのサイズ、使用量、空き容量については以下のように可視化されます。

fluentd 通知とメトリクスの可視化: ディスクサイズ、使用量、空き容量の表示


その他の監視例

どうやって情報を収集するか

基本的に通知は flunet-plugin-notifier と fluent-plugin-slack をグラフ化は fluent-plugin-graphite を利用する前提で、あとはサーバー上のリソース情報の収集をどのプラグインに任せるかだけだと思っていて、実際に試しているのが fluent-plugin-dstat です。

fluent-plugin-dstat を使ったサーバーの監視を行っている例は以下の記事がとても参考になると思いますのでご一読下さい。

通知

通知(可視化も一つの通知だと思っています)に関してはディスク容量の監視と同様に flunet-plugin-notifier からの fluent-plugin-slack で。そして、fluent-plugin-graphite を利用して可視化出来るかと思います。

fluentd 自体の監視は?

fluentd 自体の監視は…自分自身の監視には限界があると思いますので、別途監視ツール又は別プロセスの fluentd に任せるというのもありかなと密かに考えています。これについては改めて試してみたいと思います。(fluentd の monitor_agent もありますね!)


最後に

以前から思っていたことをひと通り文字で書き起こしてみました。まだまだ検証の段階で試行錯誤している状況だったりしますが、引続き、監視ツールとしての側面について検証を続けていきたいと考えています。

おやすみなさい。

元記事はこちらです。
fluentd をサーバー監視ツールとして利用するメモ