ZABBIXのインストール-1 サーバ編(SQLite)

Miracle Linux 4 に Zabbix 1.4.6 をインストールした。

Zabbix 1.4.6 + MySQL 4.2.20 の組み合わせで稼働させるには時間がかかりそうだったので、SQLite3を使うことにした。

 

■ZABBIXの大雑把なしくみを理解しておく

  • ZABBIXサーバ(いわゆる観測所。測定値をここに集める)
  • ZABBIXエージェント(観測される側。測定値を観測所へ渡す。1台〜複数台)
  • ブラウザ(観測所で集計したデータをブラウザで見る。手元のMacのSafari等で見る)

■今回の設定を確認しておく

  • ZABBIXサーバ Miracle Linux 4
  • ZABBIXエージェント Miracle Linux 4, Asianux Server3, その他  

 

■マニュアルのインストール情報に目を通しておく

▼PDFマニュアル(英語)をダウンロードして眺めておく。 

このマニュアルに従って、サーバ側のインストールから始める。

↓Zabbix 1.4 39ページからインストールの説明。

http://www.zabbix.com/downloads/ZABBIX%20Manual%20v1.4.pdf

↓Zabbix 1.6 42ページからインストールの説明。

http://www.zabbix.com/downloads/ZABBIX%20Manual%20v1.6.pdf

http://www.zabbix.jp/modules/download1/ 

▼ThinkITの記事 

http://www.thinkit.co.jp/cert/article/0611/19/1/2.htm 

 

■SQLiteをインストールする

http://www.sqlite.org/download.html

$ tar zxvf sqlite-3.6.7.tar.gz 
$ cd sqlite-3.6.7
$ ./configure 
$ make
# make install

インストールされたバイナリとライブラリを確認する。

$ ldd /usr/local/bin/sqlite3
	libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x00745000)
	libreadline.so.4 => /usr/lib/libreadline.so.4 (0x00111000)
	libncurses.so.5 => /usr/lib/libncurses.so.5 (0x00bb1000)
	libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00654000)
	libc.so.6 => /lib/tls/libc.so.6 (0x004e9000)
	/lib/ld-linux.so.2 (0x004d0000)

$ ls /usr/local/lib/ | grep sqlite
libsqlite3.a
libsqlite3.la
libsqlite3.so
libsqlite3.so.0
libsqlite3.so.0.8.6

 

■NET-SNMPをバージョンアップして起動する

Miracle Linux 4.0のNET-SNMPがアップデートされていたので、rpm -Fvhでインストールしておく。(2008年12月時点)

http://www.miraclelinux.com/support/index.php?q=node/99&errata_id=1364

snmpdとsnmptrapdが、Linux起動時にスタートするようにしておく。

# chkconfig --list | grep snmp
# chkconfig snmpd on
# chkconfig snmptrapd on

現在、起動していなかったらスタートさせる。

# service snmpd start
# service snmptrapd start 

 

▼参考情報:ITmedia SNMP

http://www.itmedia.co.jp/enterprise/articles/0705/31/news042.html 

▼ソースからインストールする場合は本家から。

http://net-snmp.sourceforge.net/ 

 

■ZABBIXスーパーユーザのアカウントを作成する

ZABBIXサーバプロセスをrootで実行するのはセキュリティリスクがあるので、専用のユーザを作る。

# useradd zabbix

 

■ZABBIXソースを解凍する

$ tar zxvf zabbix-1.4.6.tar.gz 

 

■ZABBIXデータベースを作成する

設定や観測値を保存するためのデータベースを用意する。 

MySQL, Oracle, PostgreSQL, SQLiteが利用できる。今回は、SQLite3を使用する。

データベースの保存場所はマニュアルでは /var/lib/sqlite/ をサンプルとして記述しているが、特にそのディレクトリを使う必然性が無いので、zabbixユーザのホームディレクトリにデータベースを作成、保存した。

# su - zabbix
$ pwd
/home/zabbix

$ cat /usr/local/src/zabbix-1.4.6/create/schema/sqlite.sql | sqlite3 zabbix.db
$ cat /usr/local/src/zabbix-1.4.6/create/data/data.sql | sqlite3 zabbix.db
$ cat /usr/local/src/zabbix-1.4.6/create/data/images_sqlite3.sql | sqlite3 zabbix.db

 

1台のサーバでZABBIXを運用するなら、、、複数のMySQLをインストールしているなら、、、MySQLのバージョンを気にしたくなければ、、、SQLiteで十分な気がする。

ZABBIXのソースはきちんと調べていないのだけど、PHPプログラム関連の多くはMySQLのソケット、ポート番号、複数バージョンのMySQLクライアントプログラムを柔軟に扱えないんだなぁという経験が多い。

(ネットワーク経由で接続できるのがMySQLやPostgreSQLのメリットなので、その辺りは自分の環境を考えて適切なものを選ぶとよいかな)

 

■ZABBIXサーバのコンパイルとインストールを実行する

英語のPDFマニュアルでインストールでは、ZABBIXアラートを受け取るために–with-Jabberを指定しているが、自分の環境では利用しない。

複数のMySQLがインストールされている環境なので、ZABBIXで利用するMySQLのmysql_configを指定する。

$ cd /usr/local/src/zabbix-1.4.6
$ ./configure --enable-server --with-sqlite3 --with-netdnmp --with-libcurl
$ make
# make install

/usr/local/sbin/zabbix_serverが出来ている事を確認した。

 

■設定ファイル/etc/zabbix/zabbix_server.confを用意する

# mkdir /etc/zabbix
# cp /usr/local/src/zabbix-1.4.6/misc/conf/zabbix_server.conf /etc/zabbix/

/etc/zabbix/zabbix_server.confを設定する。

PidFile=/var/run/zabbix/zabbix_server.pid
LogFile=/var/log/zabbix/zabbix_server.log
DBName=/home/zabbix/zabbix.db

 

■pidファイルとログファイル用のディレクトリを作成する

# mkdir /var/run/zabbix
# mkdir /var/log/zabbix
# chown zabbix:zabbix /var/run/zabbix
# chown zabbix:zabbix /var/log/zabbix

 

■起動スクリプト/etc/init.d/zabbix_serverを用意する

 # cp /usr/local/src/zabbix-1.4.6/misc/init.d/fedora/core/zabbix_server /etc/init.d/

fedora, redhat, suse用などが用意されている。

/etc/init.d/zabbix_serverを編集する。

BASEDIR=/usr/local
FULLPATH=$BASEDIR/sbin/$BINARY_NAME
PIDFILE=/var/run/zabbix_server/$BINARY_NAME.pid

/usr/local/binではなく、/usr/local/sbinにzabbix_serverがインストールされていたので、FULLPATHのbinをsbinに変更した。

 

ZABBIXサーバーを起動する。

# /etc/init.d/zabbix_server start 

 

 

 

■起動できなかった

ライブラリが見つけられなくて、zabbix_serverを起動出来なかった。

# ldd /usr/local/sbin/zabbix_server 
	libsqlite3.so.0 => not found
	libcurl.so.4 => not found
	libm.so.6 => /lib/tls/libm.so.6 (0x00616000)
	libresolv.so.2 => /lib/libresolv.so.2 (0x00668000)
	libc.so.6 => /lib/tls/libc.so.6 (0x004e9000)
	/lib/ld-linux.so.2 (0x004d0000)

 

libsqlite3.so.0 の場所を調べる。

# ldd /usr/local/bin/sqlite3 
	libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x004ea000)

 

libcurl.so.4の場所を調べる。

# ldd /usr/local/bin/curl
	libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0x00729000) 

 

一時的に対処する。(LD_LIBRARY_PATHで /usr/local/lib を指定する)

# LD_LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib
# export LD_LIBRARY_PATH

 

恒久的に対処する場合は、/etc/ld.so.conf または、/etc/ld.so.conf.d/に記述する。(他のアプリへの影響を配慮する必要あり)変更後は、ldconfigコマンドを忘れずに実行する。

 

一時対処を起動スクリプト/etc/init.d/zabbix_serverの2行目に書いておくことにした。

LD_LIBRARY_PATH=/usr/local/mysql4/lib/mysql:/usr/local/lib:/lib:/usr/lib
export LD_LIBRARY_PATH 

 

 

■Webフロントエンド用のPHPをインストールする

$ mkdir /path/to/html/zabbix
$ cp -a /usr/local/src/zabbix-1.4.6j/frontends/php/* /path/to/html/zabbix/

/path/to/html/zabbix/include/config.inc.phpを編集する。

 

 

 

 

■ブラウザで接続する

http://zabbix-server/zabbix/

 

1. Introduction

そのまま次へ進む。

 

2. Licence Agreement

アグリーして次へ進む。

 

3. Check of pre-requisites

Failが表示された項目を修正してリトライする。

◎PHP max execution time: 300 seconds

memory_limit = 128M
post_max_size = 8M
max_execution_time = 300

◎BC math

PHP自体を –enable-bcmathでコンパイルする必要があるので、再コンパイルしてインストールした。

PHPインストール時のconfigureオプションは、php -iで確認する。

 

4. Configure DB connection

MySQLへの接続情報を入力する。

Type: MySQL

Host: localhost

Port: 3307(デフォルトは0。このサーバは複数のMySQLを持っているので指定した)

Name: zabbix(データベース名)

User: zabbix(ユーザ名)

Password: password

 

5. Pre-Installation Summary

確認して次へ進む。

 

6. Install

確認して次へ進む。

 

7. Finish

「Congratulation with succesfull instalation of ZABBIX frontend.」

このメッセージが表示された問題ないのでFinishボタンで完了する。

 

/path/to/html/zabbix/zabbix.conf.php として情報が保存される。

(Asianux Server3でZABBIXをRPMでインストールしたとき、設定ファイルは、/etc/zabbix/zabbix.conf.php だった)

 

zabbix.conf.phpに書き込まれているデータベース接続情報。

$DB_TYPE        = "MYSQL";
$DB_SERVER      = "localhost";
$DB_PORT        = "3307";
$DB_DATABASE    = "zabbix";
$DB_USER        = "zabbix";
$DB_PASSWORD    = "password";

パスワードが書き込まれたファイルなので、zabbix.conf.php ファイルのオーナーとアクセス権限をチェックしておく。

 

■ブラウザからアクセスしたけれど…

http://zabbix-server/zabbix/

Login name:  admin

Password: 空白のまま

 

で、エラーメッセージが表示された。

 

Error in query [select u.* from users u where u.alias=’guest’ and (u.userid div 100000000000000) in (0) ] [You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ‘div 100000000000000) in (0)’ at line 1]

mysql_fetch_array(): supplied argument is not a valid MySQL result resource[/usr/local/apache/htdocs/zabbix/include/db.inc.php:411]

[ERROR: Database corrupted, missed default user ‘guest’]

 

MySQLのログを見てみた。

# tail /usr/local/mysql4/var/ホスト名.err
081231 14:02:32  Aborted connection 271842 to db: 
'zabbix' user: 'zabbix' host: `localhost' (Got an error reading communication packets) 

 

Got an error reading communication packetsを調べてみる。

http://dev.mysql.com/doc/refman/4.1/ja/error-returns.html

 

Error: 1158 SQLSTATE: 08S01  (ER_NET_READ_ERROR) ということなので、さらに調べてみる。

 

シェルでは、MySQLのzabbixデータベースへ問題なくアクセスできている。

$ mysql -u zabbix -p   問題なし。
$ mysql -h localhost -u zabbix -p  問題なし。
$ mysql -h 127.0.0.1 -u zabbix -p  問題なし。

 

再度、設定を変更したり、ログファイルを眺めたりした。

/etc/zabbix/zabbix_server.conf   設定ファイル

/var/log/zabbix/zabbix_server.log  ログファイル

/etc/init.d/zabbix_server restart  ZABBIXの再起動

/path/to/html/zabbix/zabbix.conf.php  変更または削除する

 

で、結局面倒くさくなったので、あきらめた。

 

英語のPDFマニュアルのSoftware Requimentsを見るとMySQL 3.22 or later と書いてあるし、ZABBIX may work on previous versions of Apache, MySQL とも書いてあるんだけど、とにかく自分の環境では上手く動かすためには時間がかかりそう。

 

 MySQL 4.0 に接続させるための時間をかける理由も無いので、SQLiteに変更して再度インストールすることにした。