「監視ツール」について、それが監視するものと各ツールの特徴をざっとまとめました。
監視対象はおおざっぱに3種類に分けられます。
- ホスト、サービス、プロセスなどのヘルスチェック
- 死んでいたらアラートを上げる。
- CPUの負荷、メモリ使用量などのリソース使用状況監視
- 数値を記録する。
- 閾値を上回る/下回るとアラートを上げる(オプション)。
- ログ監視
- ログを記録する。
- 属性ごとに集計する(オプション)。
- 変なログが出たらアラートを上げる(オプション)。
ヘルスチェック
ヘルスチェックを行うツールは、何らかの形でリソース使用状況監視もサポートしています。実際、「Apacheが死んでたらアラートを上げる」と「CPU loadが30を超えてたらアラートを上げる」はできれば一緒にしたいです。
Nagios
たぶん最も広く使われているヘルスチェックツールです。古くてガタピシしていますが、機能豊富で理解は容易です。
Nagiosサーバから監視対象のホストやサービスをつつく中央集権的アーキテクチャです。
プロセスの死活など、監視対象のホスト上でチェックを行う必要がある場合、NRPEというエージェントを介してチェックを行います。具体的には、Nagiosサーバが監視対象のNRPEをつつき、NRPEがチェック用コマンドを実行します。
チェックコマンドの標準出力にリソース使用状況などの数値データを含めることで、数値の記録と可視化が可能です。見た目がいけていないので、Nagios+Muninの構成の方がいいかも。この場合リソース使用状況のアラートは、Muninから下記のNSCAをつつくことになります。
cronジョブの成功・失敗のように、Nagiosのあずかりしらないタイミングでチェックを行う必要がある場合には、NSCAを使います。具体的には、cronジョブがNSCAサーバに成功・失敗の情報を送りつけます。NagiosサーバはNSCAに送られてきたチェックをポーリングします。通常とは逆に、「監視対象→Nagios」という制御の向きになります。
長所:
- 機能が豊富
- 構成が単純で理解が容易
- ホストのping監視とポートの監視だけであれば、エージェントは不要
短所:
Sensu
分散的アーキテクチャです。Sensuサーバと監視対象内のエージェントはRabbitMQ (メッセージキュー) を通じてやりとりします。チェックはエージェントが行い、結果をSensuサーバがRedisに格納します。
Web APIが提供されており、ダッシュボードはサーバから切り離されたAPIクライアントとして動作します。
監視対象のホストは、エージェントが立ち上がった時に勝手に追加されます。削除はAPIを叩く(むー)。
長所:
短所:
- 構成要素が多く複雑
わからない・調べてないこと:
- そもそも使ったことがない
- アラートはどこがやってんだろう。Sensuサーバ?
- NSCA相当のことはAPIをつつけば良いのだろうか
Consul
ZooKeeperによく似た、分散システムの協調サポートツールであり、応用の一つとしてヘルスチェックが可能、という位置づけです。低レベル層にSerfやLMDBを使っています。
SensuでRabbitMQが担当しているノード間通信は、Consul/Serfが提供するメッセージング機能を使います。SensuでRedisが担当しているデータ保管は、Consul/LMDBが提供するKVSを使います。
Web APIが提供されています。
長所:
- Sensuとだいたい同じ
- ConsulとSerfは同じ会社 (HashiCorp) が開発してるので、Sensuほどバラバラな感じじゃない
- シャレオツ
短所:
- 情報が少ない
わからない・調べてないこと:
- だいたいわかってない
Zabbix
なんかJP1とかTivoliみたいなやつ。統合監視ツール。
リソース使用状況
リソース使用状況は、一定間隔で数値が発生するログとみなすこともできます。このため、後述のログ監視の仕組みに流し込むことも考えられます。
ここでは、リソース使用状況の収集に特化したツールについて書きます。
Munin
Muninサーバが監視対象のエージェント (munin-node) をつついてリソース使用状況を報告させ、時系列データファイルであるRRDファイルに記録します。
cronで定期的にリソース使用状況のページを作って/var/www/htmlに置きます。具体的には、RRDファイルからPNGの画像を作って、HTMLページを更新します。したがって、CGIなど表示系のプログラムはありません。
閾値を超えたり下回ったりしたときに、任意のコマンドを叩いてアラートを上げることができます。たとえばNSCAをつついてNagiosにアラートを上げさせる、など。
監視対象はMuninサーバの設定に集約します。
長所:
- 構成が単純で理解が容易
- インストール時点でだいたい見たいものが見える。ひねったメトリクスも簡単に追加できる
短所:
Ganglia
大規模システム用のリソース使用状況監視ツールです。個別のサーバの状況が見られるのに加えて、「Webサーバぜんぶ」、「Appサーバぜんぶ」のように「クラスタ」ごとにまとめて情報が見られます。また、CPU loadが高い時はグラフが赤くなったりして、ひと目で状況が分かりやすいです。
Gangliaサーバ上のgmetadが、監視対象ホスト上のgmondというエージェントをつついて、RRDファイルに結果を書き出します。ここでクラスタごとにマルチキャストIPアドレスを割り当てると、gmond同士がデータを共有するので、gmetadの設定が少なくて済みます。
長所:
- 大規模システム向き
- スケールアウトしやすい
短所:
- 細かい情報を見るものではない