2013年3月26日火曜日

ZabbixでMongoDBを監視する

表題の通りZabbixでMongoDBを監視してみようと思います。 環境
  • Zabbix Server
    • CentOS release 6.2 (Final)
    • zabbix-server 1.8.16-1.el6.JP.x86_64
    • mikoomi mongodb plugin (Rev 78)
  • MongoDB & Zabbix Agent
    • CentOS release 6.3 (Final)
    • MongoDB 2.2.1

はじめに

今回は、mikoomiさんに作っていただいたMongoDB Zabbixテンプレートを使います。
仕組みとしては、zabbixのextentionにMongoDBドライバをつかったPHPのスクリプトを置き、PHPのスクリプトがMongoDBに接続して、各種ステータスをクエリでとってきて、zabbixに渡すというもの(zabbix-agentは使いません)。 これにより、時系列でのクエリ件数やらいろんな統計情報が取得できます。

[処理シーケンス]
Zabbix --> Zabbixテンプレート --> PHPスクリプト --> MongoDB-PHPドライバ --> MongoDB

手順

基本的にmikoomiさんブログ通り進めていきます。 ZabbixとMongoDBのインストールは割愛します。

MongoDB-PHPドライバのインストール

まず、必要なライブラリをyumでインストール。
# yum install php-devel php-pear gcc make
次に、Mongo-phpドラインをインストール
# pecl install mongo
最後に/etc/php.iniに以下の行を追加。
extension=mongo.so
MongoDB-PHPドライバの稼働確認には以下のスクリプトを書いて、phpで実行し、成功するかどうかを確認すればOKです。
<?php
new MongoClient("mongodb://server:27017");
?>

Zabbix-MongoDB監視テンプレートのインストール

まず、mikoomiさんの作ったphpとshをzabbixのexternalscriptsに置きます(私がとったときはSVNのリビジョンは78でした。) そして、実行権限を与えます。
# cd /etc/zabbix/externalscripts/
# wget http://mikoomi.googlecode.com/svn/plugins/MongoDB%20Plugin/mikoomi-mongodb-plugin.php
# wget http://mikoomi.googlecode.com/svn/plugins/MongoDB%20Plugin/mikoomi-mongodb-plugin.sh
# chmod 755 mikoomi-mongodb-plugin.*
# chwon zabbix:zabbix mikoomi-mongodb-plugin.*
次に、このZabbixテンプレートのXMLをダウンロードして、zabbixのテンプレートに追加します。これで完了です。

MongoDBのサーバをZabbixAgentとして登録

まず、Zabbixのホストを追加して、「リンクしているテンプレート」に「Template_MongoDB」を選択します。
次に、これが唯一のハマりどころ(※)ですが、「マクロ」のところに、以下の二つの値を定義します。
  • マクロ = "{$SERVER}" , 値 = MongoDBのサーバのIPアドレス
  • マクロ = "{$PORT}" , 値 = MongoDBのポート番号

これで以下の図のようにMongoDBの各種統計情報がとれていると思います。


※)ハマりどころについて

mikoomiさんのブログには{$MONGODB_HOSTNAME}、{$MONGODB_PORT}、{$MONGODB_ZABBIX_NAME}の3つの値をマクロにセットしろと書いてあるんですが、これだとうまくいきません。phpやshにうまく引数が渡りません。
テンプレートのXMLをみると
item type="10" key="mikoomi-mongodb-plugin.sh[-h {$SERVER} -p {$PORT} -z {HOSTNAME}]" value_type="3"
と書いてあるので、ここに合わせて{$SERVER}と{$PORT}を定義したところうまく動きました。