ちょっと長めの前置き
自分用のWebアプリケーションをいくつか動作させていて、それらが正常動作しているかの確認にAlertMeを利用しています。定期的にアプリにHTTPアクセスを行い、時間がかかりすぎると障害としてメールが飛んできます。
AlertMeは簡単に設定できて非常に便利に使っていますが、CPU使用率、ディスク容量など他の項目も柔軟に監視したいと思い、別の監視サービスを利用しようと思います。自宅ではRaspberry Piを動作させているので、これのCPU温度やHDD健康状態も監視したいですね。
私はOpenShiftをよく使っており、dkanbier/openshift-zabbix-quickstartを使ってZabbix Serverをインストールし、RPi側にはZabbix Agentをインストールして監視しようとしましたが、どうにも「Zabbix agent on {HOST_NAME} is unreachable for 5 minutes」というエラーが解消できませんでした。 OpenShiftにZabbix Serverを建てる方向は諦めました。後述。
そこで、とりあえず普通にインストールした場合にZabbixをどのように設定すればよいのかを試すため、VagrantにZabbix ServerとZabbix Agentをセットアップして動作を確認したいと思います。
前提
Zabbixのインストールは、4 ソースからのインストール [Zabbix Documentation 2.2]の手順で行います。
Vagrantを使用するので、あらかじめ使用可能にしてください。
PCはMacBookProを使用していますが、Windowsでも適宜読み替えれば問題無いはずです。
NOTE: vagrant-vbox-snapshot
Vagrantで作業する時は、vagrant-vbox-snapshot
を使うと便利。各ステップごとにスナップショットを取得しておくと、手順を間違えたりした時にすぐに戻せます。
- dergachev/vagrant-vbox-snapshot
- vagrantの便利に使えるプラグイン6選 - Qiita
- Vagrantにスナップショット機能を加えるplugin、vagrant-vbox-snapshotの紹介 - Qiita
VagrantでCentOSを使用する
ここではchef/centos-6.5
を使用しますが、好きなOSを使用すれば良いです。
$ vagrant init chef/centos-6.5
ゲストOS側の80番ポートをホストOSの10080番ポートにフォワードする設定をVagrantfile
に追記します。
config.vm.network "forwarded_port", guest: 80, host: 10080
Vagrantを起動します。
$ vagrant init chef/centos-6.5
起動したCentOSにsshでログインします。
$ vagrant ssh
NOTE: Windowsの場合、sshコマンドが無いため失敗するはずです。Cygwinを入れるとか、TeraTermで接続するとかしてください。
前提パッケージのインストール
インストール済みのパッケージを最新化します。
$ sudo yum -y update
開発ツールをインストールします。
$ sudo yum -y groupinstall "Development tools"
DBエンジンとしてMySQLを使用したいので、開発用ファイルも含めてインストールします。DBとしては他にPostgreSQL、Oracle、DB2、SQLiteが使えるようです。
$ sudo yum -y install mysql-server mysql-devel
$ sudo chkconfig mysqld on
$ sudo service mysqld start
Zabbixが必要とするソフトウェアをインストールします。これは、後で行う./configure
のエラーを見ながらつどインストールしたほうが良いかもしれません。
$ sudo yum -y install libxml2 libxml2-devel net-snmp net-snmp-devel curl libcurl libcurl-devel
Zabbixソースコードのダウンロード
インストールパッケージが提供されていますが、今回はソースコードからインストールすることにします。ソースコードはSourceForge.netで提供されているので、そこからダウンロードリンクを取得して、wgetなどでダウンロードします。
$ wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.2.8/zabbix-2.2.8.tar.gz?r=http%3A%2F%2Fwww.zabbix.com%2Fdownload.php&ts=1424460111&use_mirror=tcpdiag
NOTE: zabbix-2.2.8.tar.gz
というファイル名になれば良いですが、クエリパラメータも含めた変なファイル名になってしまうことがあるので、リネームします。
展開します。
$ tar zxvf zabbix-2.2.8.tar.gz
Zabbix用ユーザーを作成する
Zabbixが使用するユーザーを作成します。とりあえずここではzabbix
というユーザーを作成しますが、セットアップ手順に注意事項が書いてあるので、それを熟読したほうが良いです。
$ sudo groupadd zabbix
$ sudo useradd -g zabbix zabbix
DBを作成する
DBを作成し、zabbixに用意されているSQLスクリプトを実行します。
まず、DBを作成します。
mysql> create database zabbix character set utf8 collate
次にzabbixに用意されているSQLスクリプトを実行します。
$ mysql -u root -p zabbix < database/mysql/schema.sql
$ mysql -u root -p zabbix < database/mysql/images.sql
$ mysql -u root -p zabbix < database/mysql/data.sql
ソースを設定し、インストールする
./configure
を実行し、ソースを設定します。インストールするソフトウェアや使用するDBエンジンによって設定方法が異なりますが、ここではZabbix ServerとZabbix AgentをインストールしてMySQLを使用するよう設定します。
$ ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
関連ソフトウェアが揃っていれば、エラーが表示されず終了します。
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
設定が成功しました。言われた通り、make install
を実行します。
$ sudo make install
インストールが完了しました。
NOTE: 関連ソフトウェアがインストールされていない場合
関連ソフトウェアがインストールされていないと、エラーになります。
configure: error: LIBXML2 library not found
LIBXML2が見つからないため、yum search libxml2
を実行してそれっぽいパッケージを探し、インストールします。
$ sudo yum -y install libxml2 libxml2-devel
./configure
を再実行します。
configure: error: Invalid Net-SNMP directory - unable to find net-snmp-config
Net-SNMPが見つからないため、yum search net-snmp
を実行してそれっぽいパッケージを探し、インストールします。
$ sudo yum -y install net-snmp net-snmp-devel
./configure
を再実行します。
configure: error: Curl library not found
Curlライブラリが見つからないため、yum search curl
を実行してそれっぽいパッケージを探し、インストールします。
$ sudo yum -y install curl libcurl libcurl-devel
./configure
を再実行します。
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
設定が成功しました。
設定ファイルの編集
Zabbix Serverの設定ファイルは/usr/local/etc/zabbix_server.conf
にあります。
Zabbix Agentの設定ファイルは/usr/local/etc/zabbix_agentd.conf
にあります。
とりあえず今回は編集することがないので、そのままにしておきます。
NOTE: zabbix_agent.conf
というファイルもありますが、こちらは使用しないようです。
Zabbix ServerとZabbix Agentを起動
Zabbix Serverを起動します。
$ zabbix_server
Zabbix Agentを起動します。
$ zabbix_agentd
コンソールには何も出力されないですが、これで起動します。ps aux | grep zabbix
で起動していることが確認できます。
Webインターフェイスをインストール
Zabbix ServerはWebインターフェイスを持ちますが、これは何らかのWebサーバーでPHPアプリケーションとして動作します。なので、まずApache HTTP ServerとPHPをインストールします。
$ sudo yum -y install httpd php
$ sudo chkconfig httpd on
$ sudo service httpd start
Webインターフェイスをインストールします。単にWeb公開フォルダに配置するだけです。
$ sudo mkdir /var/www/html/zabbix
$ cd frontends/php/
$ sudo cp -a . /var/www/html/zabbix/
$ sudo chown -R apache:apache /var/www/html/zabbix/
Webブラウザからhttp://localhost:10080/zabbix/にアクセスします。
「Next」をクリックします。
必要要件がチェックされます。要件を満たしていない場合、「Fail」が表示されます。「Fail」にカーソルをポイントすると、どうすれば良いかが表示されます。
ここでは、以下の項目が「Fail」になりました。
- PHP option post_max_size
- PHP option max_execution_time
- PHP option max_input_time
- PHP time zone
- PHP databases support
- PHP bcmath
- PHP mbstring
- PHP gd
- PHP gd PNG support
- PHP gd JPEG support
- PHP gd FreeType support
- PHP xmlwriter
- PHP xmlreader
これを解消します。
まずPHPオプションを設定するため、/var/www/html/zabbix/.htaccess
ファイルを作成し、内容を以下のようにします。
php_value post_max_size 16M
php_value max_execution_time 300
php_value max_input_time 300
php_value date.timezone Asia/Tokyo
.htaccess
が禁止されている場合、/etc/httpd/conf/httpd.conf
を編集します。
AllowOverride All
次に、PHPモジュールをインストールします。不足しているモジュールを「Fail」をクリックして調べて、yum
でインストールしていきます。
$ sudo yum -y install php-mysql php-bcmath php-mbstring gd gd-devel php-gd php-xml
Apache HTTP Serverを再起動します。
$ sudo service httpd graceful
Webブラウザに戻り、「Retry」ボタンをクリックします。必要要件を満たしていれば、全て「OK」になります。まだ「Fail」が表示されている場合、個別に解消方法を調べてください。
「Next」をクリックします。
DB接続を設定します。設定を入力し、「Test connection」をクリックすることでDB接続を確認できます。ここは変更はしません。設定に問題が無ければ、「OK」が表示されます。
「Next」をクリックします。
Zabbix Serverの設定を入力します。ここでは何も変更しませんので、そのまま「Next」をクリックします。
「Next」をクリックします。
設定ファイルが作成され、問題無ければ「OK」が表示されます。「Finish」をクリックすることで、インストールが完了します。
Zabbixにログインし、Zabbix Server自体の監視を開始
インストールが完了すると、ログインページが表示されます。初期ユーザーは「Admin」、パスワードは「zabbix」になっていますので、入力して「Sign in」をクリックします。
ログインすると、ダッシュボードが表示されます。すぐにAdminユーザーのパスワード変更や、作業ユーザーの作成などを行うべきですが、ここではとりあえずスキップします。
Zabbix Server自体の監視を有効にするため、メニューの「Configuration」→「Hosts」をクリックします。
リストに「Zabbix server」が表示されますので、クリックします。
「Status」を「Monitored」に変更して、「Save」をクリックして設定を保存します。
リストの「Zabbix server」の「Status」が「Monitored」に変わっていることがわかります。
メニューの「Monitoring」→「Graphs」をクリックして、「Graph」を適当に、例えば「CPU load」に設定すると、グラフが表示されて監視できていることがわかります。
おわりに
これでZabbixの簡単な動作が確認できたので、次はOpenShiftにZabbix Server、RPiにZabbix Agentをセットアップして監視をしたいと思います。
NOTE: Zabbix Server on OpenShiftを諦めたわけ
OpenShiftではポートを開けられないっぽい。rhc port-forward
はローカル→OpenShiftのsshフォワーディングであり用途が違うし…
AWSかDigitalOceanにZabbix Serverを建てる方向で検討します。