nkjmkzk.net

powered by Kazuki Nakajima

オープンソースの統合監視システム 「ZABBIX」を構築する

こんにちは、お久しぶりです。
今日はZABBIXという監視ソフトウェアを紹介しようと思います。加えて構築手順にも言及します。

ZABBIXはラトビアのZABBIX SIA社が母体となって開発しているオープンソースの統合監視システムです。ライセンスはGPLv2。サーバとエージェントという二つのコンポーネントで構成されます。エージェントが監視対象に常駐して各種情報を取得し、サーバがその情報を引っ張ってきてデータベースに格納。集めた情報をサーバ上のWebインターフェースで管理するという形です。Webインターフェースやデータベースそのものはサーバ上においてもOKですが、外出しすることも可能です。ちなみにエージェントを入れるのがヤダという人はエージェントレスでSNMPやカスタムスクリプトで情報を集めることも可能です。

このソフトウェア、何ができるの?というのをとりあえず以下に一部をまとめました。

監視対象検出
・ネットワークをスキャンして監視対象を自動検出&自動設定!

監視対象の情報取得
・H/Wリソース(CPU使用率、メモリ使用率、ネットワーク帯域、ディスク容量、ディスクI/O)状況
・ホスト名、起動時間
・inode状況、プロセス状況
・温度(気温ではない)
・自作スクリプトでいろいろ

アクション
・メール通知
・SNMPトラップ
・Jabber通知
・自作スクリプトでいろいろ

レポーティング
・集めた情報をグラフ化 期間、対象は自由に選択可

マップ
・監視対象のトポロジをマップで可視化

という感じ。何しろ強力なのが拡張性です。情報取得やアクションを自分で自由に作成できるのがいい。そもそも何故いきなり監視システムの話かというと、Xenの仮想化システムに対してばっちりフィットする良いソフトウェアを探していたからです。このZABBIXも特段Xen対応しているわけではないのですが、拡張機能でがんばればいろいろできそうだな、と思っていろいろやってみたという背景です。伝統的なNagiousや国産で多機能なHinemosも調べてみましたが拡張性においてはZABBIXがベストでした。しかも監視対象自動検出&自動設定やテンプレートによる監視対象の一元的設定等、かなりツボをついてくるソフトです。全機能を完全にフリーで使えてここまで作りこまれているソフトを私は知りません。誰か知ってたら教えてください。

というわけでそろそろ構築手順に移りたいと思います。
サーバ、監視対象(エージェントを突っ込む)のプラットフォームはいずれもRedHat EL5.1で検証しています。CentOSやFedoraでも概ね同様でいけると思います。Debianの場合はすでにパッケージが用意されているという噂なので多分apt-getでいけるのかも知れません(デベロッパーはubuntuベースで開発しているらしい)。ZABBIXのバージョンは1.4.4を使用します。

まずはサーバの構築から。ZABBIXのソースをとってきます。このソースからサーバもエージェントもビルドできます。公式サイトからDownloadできますのでこれを/optに保存して展開しておきます。

# tar xvfz zabbix-1.4.4.tar.gz

依存関係で必要なものをyumでどんどんインストールします。

# yum install httpd mysql mysql-server mysql-devel php php-gd php-bcmath net-snmp net-snmp-devel net-snmp-libs net-snmp-utils -y

あとRedhatのパッケージには無いfpingというユーティリティをソースからコンパイルしてインストールします。なお、インストール後に実行ファイルへスーパーユーザ/グループビットを付加します。

# cd /opt
# wget http://fping.sourceforge.net/download/fping.tar.gz
# tar xvfz fping.tar.gz
# cd fping-2.4b2_to
# ./configure
# make
# make install
# chmod 710 /usr/local/sbin/fping
# chmod ug+s /usr/local/sbin/fping

MySQLにZABBIX用のデータベースを作成します。(ちなみにPostgresqlやOracle等でも代用可能です)

# mysql_install_db
# service mysqld start
# mysql -u root
> create database zabbix;
> q

作成したデータベースにスキーマを突っ込みます。

# cat /opt/zabbix-1.4.4/create/schema/mysql.sql | mysql -u root zabbix
# cat /opt/zabbix-1.4.4/create/data/data.sql | mysql -u root zabbix
# cat /opt/zabbix-1.4.4/create/data/images_mysql.sql | mysql -u root zabbix

このあたりでZABBIXユーザとグループを作成しておきます。

# groupadd zabbix
# useradd -g zabbix

ユーザのログインシェルはセキュリティ的に/sbin/nologin等にすべきだという噂もありますが、僕はかくかくしかじかで/bin/bashのままにしておきます。

ZABBIXをインストールするディレクトリを作成します。今回は/srv/zabbixをPREFIXとしてインストールします。

# mkdir -p /srv/zabbix/{etc,run,log,script}

コンパイル&インストールに移ります。

cd /opt/zabbix-1.4.4
# ./configure
--prefix=/srv/zabbix
--enable-server
--enable-agent
--with-mysql
--with-net-snmp
--with-libcurl

# make
# make install

これで/srv/zabbix/sbinにZABBIXのバイナリがインストールされました。次に設定ファイルを用意します。サンプルファイルをコピーしてきてそれを編集します。

# cp /opt/zabbix-1.4.4/misc/conf/zabbix_server.conf /srv/zabbix/etc/
# vi /srv/zabbix/etc/zabbix_server.conf
(抜粋)
PidFile=/srv/zabbix/run/zabbix_server.pid
LogFile=/srv/zabbix/log/zabbix_server.log
AlertScriptsPath=/srv/zabbix/script
ExternalScripts=/srv/zabbix/script
FpingLocation=/usr/local/sbin/fping

次に起動スクリプトを用意します。これもサンプルファイルをコピー&編集します。これはプラットフォームとなるOSに応じてサンプルがいくつか用意されているのですがRHEL5用というものはありません。代わりにfedora core用のものを拝借して利用します。

# cp /opt/zabbix-1.4.4/misc/init.d/fedora/core/zabbix_server /etc/init.d
# vi /etc/init.d/zabbix_server
(抜粋)
# Zabbix-Directory(修正)
BASEDIR=/srv/zabbix

# Binary File(そのまま)
BINARY_NAME=zabbix_server

# Full Binary File Call(修正)
FULLPATH=$BASEDIR/sbin/$BINARY_NAME

# Configuration File(追加)
CONFIG_FILE=$BASEDIR/etc/zabbix_server.conf

# PID file(修正)
PIDFILE=$BASEDIR/run/$BINARY_NAME.pid

# Establish args(そのまま)
ERROR=0
STOPPING=0

#(途中省略)

start() {
if [ $RUNNING -eq 1 ]
then
    echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
else
    #(設定ファイルを指定するように修正)
    action $"Starting $BINARY_NAME: " $FULLPATH -c $CONFIG_FILE
    touch /var/lock/subsys/$BINARY_NAME
fi
}

インストールディレクトリ全体をZABBIXユーザの所有とします。

# chown -R zabbix:zabbix /srv/zabbix

さぁ、これでマネージャは準備ができました。起動してみましょう。

# service zabbix_server start

ps -ef等でプロセスを確認すると複数のzabbix_serverプロセスが起動しているはずです。プロセスが見当たらない場合にはログをみてシューティングして下さい。

次にWebインターフェースを設定します。これは必要なphpコンテンツをWebサーバのドキュメントルート以下にコピーするだけでOKです。(以前までは手動でデータベース関連の設定を編集する必要がありましたが、新しいバージョンでは不要となりました。データベース関連の初期設定もすべてブラウザから可能です。)

# cp /opt/zabbix-1.4.4/frontends/php/* /var/www/html/

phpの環境設定を行います。2点だけ。

# vi /etc/php.cnf
max_execution_time = 300
date.timezone = Asia/Tokyo

さて、これでWebインターフェースの方も準備OKです。httpdプロセスを起動します。

# service httpd start

ちなみにhttpd.confのServerNameだけは設定しておかないと警告がでますがとりあえずは気にしないということで。

これでZABBIXにアクセスできるようになりました。ブラウザでWebサーバにアクセスしてみてください。初回アクセス時には初期設定ウィザードが表示されます。要求どおりにポチポチNextを押していけば設定は完了します。

次にエージェントの方も設定します。別筐体にインストールしてもいいのですが、今回はお手軽にサーバと同一サーバ機上にインストールしてみましょう。実は上記のサーバインストールの手順でエージェントのバイナリも一緒に作ってあります。./configureの–enable-agentオプションがそれです。なのでエージェントだけ構築する際には./configure –enable-agentだけでOKです。今回はエージェントはすでに/srv/zabbix/sbin/zabbix_agentdとしてインストールされていますので残るセットアップを行っていきます。エージェントの設定ファイルをこれまたサンプルをコピー&編集します。

# cp /opt/zabbix-1.4.4/misc/conf/zabbix_agentd.conf /srv/zabbix/etc
# vi /srv/zabbix/etc/zabbix_agentd.conf
(抜粋)
DisableActive=1
PidFile=/srv/zabbix/run/zabbix_agentd.pid
LogFile=/srv/zabbix/log/zabbix_agentd.log
EnableRemoteCommands=1

DisableActive=1としておかないとエージェントからサーバに能動的にアクセスしようとします。これが疎通する環境であれば問題ないのですが、NATがかかったりしているとこの通信はブロックされる可能性もありますので僕はOFFにしています。ちなみに一つ前の1.4.3ではこれを有効化したまま通信がうまくいかないとエージェントがダウンするという不具合がありました。Be carefull。

次に起動スクリプトをサンプルからコピー&編集します。

# cp /opt/zabbix-1.4.4/misc/init.d/fedora/core/zabbix_agentd /etc/init.d
# vi /etc/init.d/zabbix_agentd
(抜粋)
# Zabbix-Directory(修正)
BASEDIR=/srv/zabbix

# Binary File(そのまま)
BINARY_NAME=zabbix_agentd

# Full Binary File Call(修正)
FULLPATH=$BASEDIR/sbin/$BINARY_NAME

# Configuration File(追加)
CONFIG_FILE=$BASEDIR/etc/zabbix_agentd.conf

# PID file(修正)
PIDFILE=$BASEDIR/run/$BINARY_NAME.pid

# Establish args(そのまま)
ERROR=0
STOPPING=0

#(途中省略)

start() {
if [ $RUNNING -eq 1 ]
then
    echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
else
    #(設定ファイルを指定できるように修正)
    action $"Starting $BINARY_NAME: " $FULLPATH -c $CONFIG_FILE
    touch /var/lock/subsys/$BINARY_NAME
fi
}

よし、これで完了。エージェントの方は簡単ですね。
エージェントも起動しましょう。

# service zabbix_agentd start

エージェントの方も複数のプロセスが起動したと思います。うまくいったら自動起動するようにしておきましょう。

# for i in httpd mysqld zabbix_server zabbix_agentd
do
chkconfig --level 3 $i on
done

お疲れ様です。ZABBIXのサーバ、エージェント両方セットアップ完了です。あとはWebからがんがん設定していくのみです。次回はこの設定について書こうかな。

without comments

Written by 中嶋 一樹

12月 6th, 2008 at 7:09 pm

Posted in Uncategorized

Tagged with

Leave a Reply