ZABBIXのインストール-1 サーバ編(MySQL4.0.20)

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

Zabbix 1.6.1をインストールしようとしたら、make install時にエラーが発生した。

 

db.c:87: error: `CLIENT_MULTI_STATEMENTS' が宣言されていません (この関数内で最初に利用)

 

いま使っているMySQL 4.0.xだとダメっぽい。4.1以上のMySQLを用意するのが面倒だったので、Zabbix 1.4.6をインストールした。

 

■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 

 

■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が利用できる。今回は、MySQLを使用する。

$ mysql -u root -p

mysql> create database zabbix;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';

スキーマを作り、初期データとイメージをインポートする。

$ cd /usr/local/src/zabbix-1.4.6
$ cat create/schema/mysql.sql | mysql -uzabbix -p zabbix
$ cat create/data/data.sql | mysql -uzabbix -p zabbix
$ cat create/data/images_mysql.sql | mysql -uzabbix -p zabbix

 

念のため、ネットワーク経由でMySQLへ接続できるようにしておいた。

mysql> grant all privileges on zabbix.* to zabbix@'%' identified by 'password';

 

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

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

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

$ cd /usr/local/src/zabbix-1.4.6
$ ./configure --enable-server --with-mysql=/usr/local/mysql4/bin/mysql_config \
--with-net-snmp
# 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
#DBHost=localhost  データベースがlocalhost以外のときは設定する。
DBName=zabbix
DBUser=zabbix
DBPassword=password
DBSocket=/tmp/mysql4.sock

 

■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に変更した。

起動する。

# /etc/init.d/zabbix_server start 

 

 

 

■起動できなかった

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

# ldd /usr/local/sbin/zabbix_server 
libnetsnmp.so.5 => /usr/lib/libnetsnmp.so.5 (0x0033b000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0x0013e000)
libelf.so.1 => /usr/lib/libelf.so.1 (0x00c6b000)
libm.so.6 => /lib/tls/libm.so.6 (0x00435000)
libmysqlclient.so.12 => not found
libcurl.so.4 => not found
libresolv.so.2 => /lib/libresolv.so.2 (0x003f5000)
libc.so.6 => /lib/tls/libc.so.6 (0x00855000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00d81000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00d97000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x00cf9000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x0025a000)
libdl.so.2 => /lib/libdl.so.2 (0x00e3a000)
libz.so.1 => /usr/lib/libz.so.1 (0x00a40000)
/lib/ld-linux.so.2 (0x00809000)

 

libmysqlclient.so.12の場所を調べる。

# ldd /usr/local/mysql4/bin/mysql
libmysqlclient.so.12 => /usr/local/mysql4/lib/mysql/libmysqlclient.so.12 (0x0032f000)

 

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

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

 

一時的に対処する。(LD_LIBRARY_PATHで指定する)

# LD_LIBRARY_PATH=/usr/local/mysql4/lib/mysql:/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/

■ブラウザで接続する

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に変更して再度インストールすることにした。