2010/09/29

DECOLOGのZABBIXを使ったシステム監視

こんにちは、hiroshiです。今は土曜の昼下がり、週1連載なんて言わなきゃよかったなーと思いながら男が一度言ったことは1ヶ月はやらねばだめだよね!ということで記事を書いてます。

今日はDECOLOGのシステムの監視についてです。
「便りがないのは良い知らせ」と言いますが、その便りが「システム落ちました」だとシビれますよね。

そうならないためには、システムを常時監視し、なるべく事前に異常に気づける仕組みづくりが欠かせません。

DECOLOGではシステムの監視にオープンソースツール「ZABBIX」を使っています。

ZABBIXはServerとAgentからなるクラサバ形式のツールで、CPU・メモリ・HDDの使用率などのおなじみなものはもちろん、標準出力に出せるものならなんでも取れてしまう優れものです。と書きましたが、他のツールのことは知らないのでこれはZABBIXに限ったことじゃないかもしれないです。

ちなみに例えばmemcachedのコネクション数を取りたい時なんかは、zabbix_agentd.confに↓のような感じにかけばよいわけです。
UserParameter=memcached.curr_conn,/usr/local/bin/memcached-tool localhost stats | grep curr_conn | awk '{print $2}'
grep curr_connのところはawkでNR==8とかでもいいかもですね。まあ、取れればなんでもいいワケです。

そして取得したデータをお好みのグラフにまとめたり、そのグラフをスクリーンという画面単位に整理できたりするのです!まあ、これも他のツールでもできることかもしれないですけど。

しかもしかもですよ、それぞれの監視項目に閾値を設定してそれを超えたらメール送信したりもできちゃうのです。・・・きっとこれも他のツールでもできるんだろうなー。

なぜZABBIXかというと「これ」っているのはなくて、DECOLOGの場合はstoneが導入当時、やりたいことができるツールを探していくつか試した結果、導入もすんなりいってしっくりきた最初のツールがZABBIXで、今も特に困ったことがないのでZABBIXを使い続けています。

困ってなきゃ、なんでもいいんです。今Cacti使ってて困ってることがなければCactiでいいと思います。ツールの変更とかは困ってきたら、もしくは困ることが見え始めてきたら考えるというノリでやってます。これは利用するプログラム言語もIDEもなんでもそうなんですが、あまり先のことまで考えすぎてはいけないと思ってます。

さて、そのZABBIXを使って何を監視しているか?ですが、基本的な死活監視およびCPU,メモリ,HDDの使用率、トラフィックなどは全サーバ視てます。というかZABBIXのAgentセットアップしてServerと疎通とると同時に勝手にみてくれてます。あとは用途ごとに定番のものがあります。だいたい以下です。

プロキシサーバー(バランサー)
DECOLOGのトラフィックはすべて数台のリバースプロキシサーバーを通って複数台のWEBサーバなりsquidサーバなりに振られるんですが、まずここのトラフィックが最重要監視項目です。何か問題がある場合は、ここに高確率で表れます。プログラムの更新とかネットワーク関係の設定変更とかをやる際は、タスクごとにいろいろ監視しながらやりますが、ここの監視は絶対に含まれます。
図1.とある日のとある時間のトラフィック
ここに変な動きがあったら何かがおかしい可能性が高い!

WWW/AP

CPUのロードアベレージとapacheのBusyWorkerを見てます。

DB
masterはロードアベレージとコネクション数で、slaveはさらにreplication delayを見てます。

memcached
コネクション数とキャッシュHit率を見てます。

squid
キャッシュHit率とファイルディスクリプタ数を見てます。

メールサーバ
キューの数とか送信状態を見てます。


と、こんな感じの定番項目以外は、必要に応じてグラフを起こして監視します。

グラフは、同じ役割のものを全部束ねて作ります。こんなイメージです。
こうすると、サーバに異常があったり、設定におかしなところがあったりすると、1本だけおかしな動きになるのでわかりやすいです。
たとえば
こんな感じです。これはとあるDBのロードアベレージのグラフですが、バックアップ用のDBを使って負荷のかかるSQLを流しているのでバックアップ用のDBの線(赤いの)だけロードアベレージが跳ね上がってます。

異常監視だけじゃなくて、上記のような例だと、「この線が下降してきたら、SQL処理が終わったんだな」みたいな用途にも使えます。

あとは、とにかく気になったものはグラフを起こしてスクリーンにまとめます。スクリーンには名前が付けられるので分かりやすい名前をつけます。たとえば「Squid Overview」とかです。しばらく、そのまま運用してみて、「やっぱこれいらねえな」ということになれば、なくなりますし、「これいいね!」ということになると、「04 Squid Overview」というように名前の手前に数字が付くというAKIRAのナンバーズのような制度を設けています。

今回はここまでにします。

各監視項目には必要に応じて閾値が設けられており、その閾値を超えるとアラートメールを飛ばすように設定していますが、次回はそのアラートメールについて書く予定です。違ったらごめんなさい。

次回が1ヶ月目のはずなので後1回はかならず週刊を守るべくがんばります。

では、また次回に会いましょう。