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>
上記の設定は監視結果を収集するホストにだけ設定すれば良く、監視の対象となるホストは上述のチェックの設定だけを行えば良いことになります。
尚、閾値を超えた場合には以下のように通知されます。
また、ディスクのサイズ、使用量、空き容量については以下のように可視化されます。
その他の監視例
どうやって情報を収集するか
基本的に通知は flunet-plugin-notifier と fluent-plugin-slack をグラフ化は fluent-plugin-graphite を利用する前提で、あとはサーバー上のリソース情報の収集をどのプラグインに任せるかだけだと思っていて、実際に試しているのが fluent-plugin-dstat です。
fluent-plugin-dstat を使ったサーバーの監視を行っている例は以下の記事がとても参考になると思いますのでご一読下さい。
- [fluentd][growthforecast]dstatをfluentd+growthforecastでグラフ化(前編)
- fluentd使ってdstatの結果をgrowthforecastで表示する
- dstatをkibanaで可視化+3.0.0milestone5新機能
- dstat + fluentd + Elasticsearch + kibana でサーバモニタリングする
通知
通知(可視化も一つの通知だと思っています)に関してはディスク容量の監視と同様に flunet-plugin-notifier からの fluent-plugin-slack で。そして、fluent-plugin-graphite を利用して可視化出来るかと思います。
fluentd 自体の監視は?
fluentd 自体の監視は…自分自身の監視には限界があると思いますので、別途監視ツール又は別プロセスの fluentd に任せるというのもありかなと密かに考えています。これについては改めて試してみたいと思います。(fluentd の monitor_agent もありますね!)
最後に
以前から思っていたことをひと通り文字で書き起こしてみました。まだまだ検証の段階で試行錯誤している状況だったりしますが、引続き、監視ツールとしての側面について検証を続けていきたいと考えています。
おやすみなさい。
元記事はこちらです。
「fluentd をサーバー監視ツールとして利用するメモ」