zabbixの導入

自宅サーバの監視用にcactiやzabbixなどのキャッチアップを目的に、今回はまずはzabbixの環境構築をやってみる。環境はいろいろ試してみたいところだが、ひとまずRHEL AS4にzabbix 1.4.2を載せて動かしてみることにした(zabbixの最新バージョンは1.6なのだが、RHEL4/CentOS4ではsnmpコンパイルが必要なため、1.6の環境は別OSでテストする)。zabbixはバックエンドにDBを必要とする。個人的にはMySQLは5.0か5.1の方がいいかなぁという気もしつつ、でも今回はシビアに作り込むつもりはないのでOSバンドルのMySQL4.1.22を採用する。

動作要件

基本的な動作要件は以下の通り(参考:zabbix 1.4マニュアル)。

<注意事項>

  • RHEL/CentOS 4系での注意事項
    • net-snmpのバージョンが低いため、zabbix_server1.6ではmake時にエラーとなる
      • この原因は「/usr/include/net-snmp/library/snmp_api.h」に、「session.localname」が定義されていないため。ソースからnet-snmpコンパイルするか、src/zabbix_server/poller/checks_snmp.cの212行目〜213行目、555行目〜556行目の以下の箇所をコメントアウトすることで導入することは可能。だが、ソースのコメントアウトは機能面で何が起こるかわからないので、zabbi1.6のフロントエンドを簡単に作るのは、RHEL/CentOS系であれば5.X系がよさそう。zabbix 1.6を使用したいが、どうしてもDBサーバRHEL/CentOS 4系のOSでDBを動かしたい場合などはDBサーバの分離が必要(いたって簡単)。

前提パッケージ導入

ここではOSとしてCentOS4.7 を使用(最小インストール)。デフォルトで提供されているhttpdMySQL、net-snmpの組合せで、1台のサーバにzabbixの全ての構成をインストール。

前提OSパッケージ導入


# yum install -y yum-plugin-fastestmirror # yumのレポジトリは早いところを使いたいので導入
# yum install -y httpd
# yum install -y mysql
# yum install -y mysql-server
# yum install -y mysql-devel
# yum install -y mysqlclient10* # my.cnfの[mysql]セクションを参照させたいので導入
# yum install -y php
# yum install -y php-gd
# yum install -y php-mysql
# yum install -y net-snmp*

fpingのインストール(zabbixサーバ導入に必要)


# wget http://dag.wieers.com/rpm/packages/fping/fping-2.4-1.b2.2.el4.rf.i386.rpm
# rpm -ivh fping-2.4-1.b2.2.el4.rf.i386.rpm

zabbix導入

前提パッケージの導入が終わったところで、続いてzabbixを導入していく。tarballからconfigure、makeのごく普通の手順。OSユーザやディレクト作成、DB準備も忘れずに。


# cd /usr/local/src/
# wget http://prdownloads.sourceforge.net/zabbix/zabbix-1.4.2.tar.gz
# tar -xzf zabbix-1.4.2.tar.gz
# cd zabbix-1.4.2
# ./configure --enable-server --with-mysql --with-net-snmp --enable-agent # 今回は同一サーバにサーバとエージェントを導入
# make && make install # 実際にインストールを実行

インストールすると、/usr/local/sbin/にzabbixサーバ、エージェントのバイナリが作成される。続いて、OSユーザとグループ、ディレクトリの準備。zabbixユーザはログイン可能ユーザである必要はないので、デフォルトシェルは/sbin/nologinとしておく。


# groupadd zabbix
# useradd -g zabbix -s /sbin/nologin zabbix
# mkdir /etc/zabbix /var/log/zabbix /var/run/zabbix
# chown -R /var/log/zabbix /var/run/zabbix

OS側の準備ができたところで、MySQLの設定。デフォルトでも問題ないが、DB性能があまりに遅いとzabbixのフロントエンドを操作していてかなりストレスに感じるので、チューニングしておく。なお、MySQLではMyISAMがデフォルトのストレージエンジンとなっているが、耐障害性に欠けるのでデフォルトストレージエンジンはInnoDBとし、InnoDBのチューニングを行う。


# /etc/init.d/mysqld stop
# rm -rf /var/lib/mysql/*
# cd /var/lib/mysql
# mkdir data logs
# chown -R mysql.mysql /var/lib/mysql
# vi /etc/my.cnf # もろもろチューニングの実施
# /etc/init.d/mysqld start

MySQLの基本設定が終わったら、DBにzabbix用のデータを投入する。この時点ではDBのユーザは特に設定する必要はないのでrootユーザでデータを投入。


# cd /usr/local/src/zabbix-1.4.2/create/schema/
# mysql -uroot -e 'create database zabbix';
# mysql -uroot -D zabbix < mysql.sql
# cd ../data/
# mysql -uroot -D zabbix < data.sql # データ投入の際、zabbixユーザ情報などもINSERTされる
# mysql -uroot -D zabbix < images_mysql.sql # バイナリの画像データっぽい

次に、zabbixが使用するDB接続用ユーザを作成する。当該ユーザのパスワードはとりあえず適当に設定(以下では「zabbix」としている)。以下の確認の中で、MySQLの中のzabbix.usersテーブルでユーザにパスワードが設定されているように見えるが、実際にフロントエンドからアクセスする際のユーザの初期パスワードは空となっている(なお、zabbix 1.6以降ではフロントエンドからのadminユーザの初期パスワードは「zabbix」となっているので注意)。


# mysql -uroot -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'"
# mysql -uzabbix -p -e "status" | grep user # 当該ユーザでzabbix用DBに接続できることを確認
Enter password:
Current user: zabbix@localhost

# mysql -uzabbix -D zabbix -p -e "select * from users" # zabbixユーザ情報を確認
Enter password:
+--------+-------+---------+---------------+----------------------------------+-----+------------+-------+---------+------+
| userid | alias | name | surname | passwd | url | autologout | lang | refresh | type |
+--------+-------+---------+---------------+----------------------------------+-----+------------+-------+---------+------+
| 1 | Admin | Zabbix | Administrator | d41d8cd98f00b204e9800998ecf8427e | | 900 | en_gb | 30 | 3 |
| 2 | guest | Default | User | d41d8cd98f00b204e9800998ecf8427e | | 900 | en_gb | 30 | 1 |
+--------+-------+---------+---------------+----------------------------------+-----+------------+-------+---------+------+

zabbix基本設定

次にzabbixの設定ファイルを作成する。設定ファイルは1から作成せず、ソースを置いたディレクトリから雛形をコピーして作成する。


# cp /usr/local/src/zabbix-1.4.2/misc/conf/zabbix_server.conf /etc/zabbix/
# cp /usr/local/src/zabbix-1.4.2/misc/conf/zabbix_agentd.conf /etc/zabbix/
# vi /etc/zabbix/zabbix_server.conf

今回は以下のようにzabbixサーバの設定行った。


# grep -v ^# /etc/zabbix/zabbix_server.conf | grep -v ^$
ListenPort=10051 # zabbixサーバがエージェントからTCP接続をLISTENするポート
ListenIP=192.168.100.100  # zabbixサーバがエージェントからTCP接続をLISTENするIPアドレス
SenderFrequency=30
DebugLevel=3
Timeout=5
PidFile=/var/run/zabbix/zabbix_server.pid
LogFile=/var/log/zabbix/zabbix_server.log
AlertScriptsPath=/home/zabbix/bin/
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBSocket=/var/lib/mysql/mysql.sock # MySQLの接続にソケットを使用したいので設定(/etc/my.cnfの値に合わせる)
今回は同一サーバにzabbixエージェントも載せるので、続いてzabbixエージェントも設定。

# vi /etc/zabbix/zabbix_agentd.conf
# diff -u /usr/local/src/zabbix-1.4.2/misc/conf/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf
--- /usr/local/src/zabbix-1.4.2/misc/conf/zabbix_agentd.conf 2007-08-21 04:22:23.000000000 +0900
+++ /etc/zabbix/zabbix_agentd.conf 2008-10-07 07:55:58.000000000 +0900
@@ -8,11 +8,11 @@
# Note that hostnames must resolve hostname->IP address and
# IP address->hostname.
-Server=127.0.0.1
+Server=192.168.100.100 # zabbixサーバのIPアドレス

# Unique hostname. Required for active checks.
@@ -20,12 +20,12 @@

# Listen port. Default is 10050
-#ListenPort=10050
+ListenPort=10050

# IP address to bind agent
# If missing, bind to all available IPs
-#ListenIP=127.0.0.1
+ListenIP=192.168.100.100 # zabbixエージェントがListenするIPアドレス
                # このIPアドレスがzabbixサーバとzabbixエージェント間で異なっていると互いに通信できない
# Name of PID file
-PidFile=/var/tmp/zabbix_agentd.pid
+PidFile=/var/run/zabbix/zabbix_agentd.pid

# Name of log file.
# If not set, syslog will be used
-LogFile=/tmp/zabbix_agentd.log
+LogFile=/var/log/zabbix/zabbix_agentd.log

起動スクリプト準備

起動スクリプトについても1から作成はせず、既存の雛形を流用する。RHELCentOSの場合にはFedraCore用のスクリプトを雛形として使用するのがよい。


# cd /usr/local/src/zabbix-1.4.2/misc/init.d/fedora/core
# cp -p zabbix_server /etc/init.d/
# cp -p zabbix_agentd /etc/init.d/
# chmod 0744 /etc/init.d/zabbix_server
# vi /etc/init.d/zabbix_server
# diff -u /usr/local/src/zabbix-1.4.2/misc/init.d/fedora/core/zabbix_server /etc/init.d    /zabbix_server
--- /usr/local/src/zabbix-1.4.2/misc/init.d/fedora/core/zabbix_server 2007-08-21 04:22:23.000000000 +0900
+++ /etc/init.d/zabbix_server 2008-10-05 18:07:01.000000000 +0900
@@ -16,16 +16,16 @@
# Edit these to match your system settings

# Zabbix-Directory
- BASEDIR=/opt/zabbix
+ BASEDIR=/usr/local

# Binary File
BINARY_NAME=zabbix_server

# Full Binary File Call
- FULLPATH=$BASEDIR/bin/$BINARY_NAME
+ FULLPATH=$BASEDIR/sbin/$BINARY_NAME

# PID file
- PIDFILE=/var/tmp/$BINARY_NAME.pid
+ PIDFILE=/var/run/zabbix/$BINARY_NAME.pid

# Establish args
ERROR=0

zabbixエージェントも同様に内容を編集しておく。変更内容、箇所はzabbixサーバと全く同じなので割愛する。

# vi /etc/init.d/zabbix_server

サーバ起動時にzabbixを自動起動したい場合にはchkconfigしておく。


# chkconfig --level 2345 httpd on
# chkconfig --level 2345 mysqld on
# chkconfig --level 2345 zabbix_server on
# chkconfig --level 2345 zabbix_aganetd on

フロントエンド設定

zabbixサーバのUIはPHPベースのWebとなる。ここでは、そのフロントエンドの設定を行う。蛇足だが、PHPベースのWebのためApacheのMPMではworker MPMは使用できない。


# mkdir /var/www/html/zabbix # 展開先はApacheのDocument Rootに合わせる(ここではデフォルトとしている)
# cd /usr/local/src/zabbix-1.4.2/frontends/
# cp -a php/* /var/www/html/zabbix/
# chown -R root.root /var/www/html/zabbix

/var/www/html/zabbix/include/db.inc.phpを以下のように修正(DB_XXXの値を設定)


global $DB, $DB_TYPE, $DB_SERVER, $DB_PORT, $DB_DATABASE, $DB_USER, $DB_PASSWORD; # この行は既存行

$DB_TYPE = "MYSQL" ; # これ以下の5行を足す
$DB_SERVER = "localhost" ;
$DB_DATABASE = "zabbix" ;
$DB_USER = "zabbix" ;
$DB_PASSWORD = "zabbix" ;

以下の通り、/etc/php.iniを編集。zabbix 1.6では、この他にtimezoneをJapanにする設定が別途必要。


# diff -u /etc/php.ini.org /etc/php.ini
--- /etc/php.ini.org 2008-10-05 18:26:17.000000000 +0900
+++ /etc/php.ini 2008-10-05 18:26:33.000000000 +0900
@@ -241,7 +241,7 @@
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

-max_execution_time = 30 ; Maximum execution time of each script, in seconds
+max_execution_time = 300 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)

画面からの初期設定

最後に、ブラウザでzabbixサーバのフロントエンドにアクセスし、初期設定を行う。アクセス先のURLはフロントエンドのコンテンツが配備されているパスとなる。上記の例では、ApacheのデフォルトDocumentRootである/var/www/html/直下にzabbixディレクトリを配置しているので、アクセスすべきURLは「http:/<サーバ名>/zabbbix」となる。画面のメッセージに従い初期設定を行っておく。画面イメージは以下の通り。



これでようやくzabbixの管理画面に到達。以下はzabbix1.4の画面だが、1.6では画面の配色も標準機能で変えることができるようになっている。