Zabbix 2.1.8 をRaspberry Pi にいれる

OSC 2013 Tokyo Fallのとあるブースでは食べられるRPiもらいました。あと1ピース残ってます。

よく考えたら、食べられないRPiは持ってました。

で、Zabbix については 2.2がそろそろ出るよ、パフォーマンス改善されてるよ、という話なのでRPiに入れて見ることにします。

# 概要

Zabbixは統合監視ソフトです。2.2がそろそろ出るとその界隈ではわくわくです。

2.2の見所はRPi的には「軽くなったかもしんない」です。キャッシュ等で賢くなったそうです。機能という面では、新しいバージョンなのでそれなりに便利になっているそうです。

2.2はリリースされてないのでソースしかありません。そーすか。

ちなみにリリースされたらdebパッケージとかも提供されるかと思います。ので、今入れるメリットは普通あんまりないかもしれません。素直に2.0系を試すのが良いでしょう。2.2の見所の一つは2.0系からのマイグレーションをZabbix自体がちゃんとやってくれるということでもあるようですんで (1.8から2.0では手作業が必要になったそうな)

# 環境

2013-10-25時点の情報です。2.2はリリースされてません。

インストール先はRaspberry Piさんです。OSはRaspbianだったはず

```
> lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.2 (n/a)
Release:	7.2
Codename:	n/a
```

なお、RPiであることによる特有なトリッキーな話はありません。遅いのが比較的イライラきますけど、それは仕方ない。

# 公式のインストールドキュメント

まだリリースされてないのでドキュメントはあんまり信用ならないかもしれません。

https://www.zabbix.com/documentation/2.2/manual/installation

# パッケージの準備

まず必要なパッケージを apt-get します。./configureが既に結構遅いので、ちまちま確認しながらやるのは現代的には骨が折れます。

ついでなのでこの記事で今後使うもの (MySQL, Apache, PHP) とかも入れます……おおLAMP! でもLinuxはもうインストール済でありんす

```
> sudo apt-get install libcurl4-openssl-dev libxml2-dev libsnmp-dev snmpd mysql-server-5.5 apache2 libapache2-mod-php5 php5-gd php5-mysql
> ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
```

2.2系から、VMWare監視用にlibxml2を必要とします。しないならキレ。

(もう少しパッケージは要るかもしれません……)

# Zabbix Server のコンパイル

＃ INSTALLATIONファイルはあんまり信用できません。READMEもちょっと。

./configure は最終的には以下のような出力をしました

```
Configuration:

  Detected OS:           linux-gnueabihf
  Install path:          /usr/local
  Compilation arch:      linux

  Compiler:              gcc
  Compiler flags:        -g -O2  -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g     -I/usr/include/libxml2    -I/usr/local/include -I/usr/lib/perl/5.14/CORE -I. -I/usr/include     

  Enable server:         yes
  Server details:
    With database:         MySQL
    WEB Monitoring:        yes
    Native Jabber:         no
    SNMP:                  net-snmp
    IPMI:                  no
    SSH:                   no
    ODBC:                  no
    Linker flags:          -rdynamic      -L/usr/lib/arm-linux-gnueabihf      -L/usr/lib  -L/usr/lib/arm-linux-gnueabihf   -L/usr/lib  -L/usr/lib   
    Libraries:             -lm -ldl -lrt  -lresolv    -lmysqlclient      -lxml2   -lcurl   -lnetsnmp -lcrypto  -lnetsnmp -lcrypto   

  Enable proxy:          no

  Enable agent:          yes
  Agent details:
    Linker flags:          -rdynamic     -L/usr/lib/arm-linux-gnueabihf 
    Libraries:             -lm -ldl -lrt  -lresolv    -lcurl 

  Enable Java gateway:   no

  LDAP support:          no
  IPv6 support:          yes

***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <http://www.zabbix.com>                    *
***********************************************************
```

makeします。

-j (並列化数)つけなくていいです。CPU1個で非力では意味ないと思います。-j2試しましたが

```
> time make
... (ぶわあああ)
1004.06s user 48.58s system 97% cpu 18:03.79 total
```

-j2だと 18:16.89 total とか出たかな。いずれにしても有意に早くなったりはしなそう

```
> sudo make install
```

コマンド群は /usr/local/sbin に入ります。PATHに入っていない人いるかもしれないので、その辺りは適宜設定します。

# MySQLの設定とZabbix Server の設定ファイル変更

今回はMySQL使うので、あらかじめ rootパスワードとか設定しときます。以下のコマンドで多分おｋ

```
> sudo dpkg-reconfigure mysql-server-5.5
```

/usr/local/etc/zabbix_server.conf があるのでそれを編集します。関係のある箇所はこのあたり。コンパイル時にMySQLを指定しているので、ここにはMySQLだよ、とは書く必要はないぽ (ファイルにはPostgreSQLとSQLiteについての言及が多々ありますが)

```
DBHost=localhost
DBName=zabbix
DBUser=root
DBPassword=(password、だよ)
```

ログは標準で /tmp/zabbix_server.log に吐かれます。問題が起きたらとりあえずここを見るとよいでしょう。

# MySQL内でデータベース準備

現状のインストールマニュアルのまま zabbix_server コマンドを叩くと、コマンドはだまって終了するのですがプロセスもシステムに残りません。ログを見てみます。

```
   965:20131025:173638.763 Starting Zabbix Server. Zabbix 2.1.8 (revision 39460).
   965:20131025:173638.764 ****** Enabled features ******
   965:20131025:173638.764 SNMP monitoring:           YES
   965:20131025:173638.765 IPMI monitoring:            NO
   965:20131025:173638.765 WEB monitoring:            YES
   965:20131025:173638.765 VMware monitoring:         YES
   965:20131025:173638.766 Jabber notifications:       NO
   965:20131025:173638.766 Ez Texting notifications:  YES
   965:20131025:173638.766 ODBC:                       NO
   965:20131025:173638.767 SSH2 support:               NO
   965:20131025:173638.767 IPv6 support:              YES
   965:20131025:173638.767 ******************************
   965:20131025:173638.768 using configuration file: /usr/local/etc/zabbix_server.conf
   965:20131025:173638.796 [Z3001] connection to database 'zabbix' failed: [1049] Unknown database 'zabbix'
   965:20131025:173638.797 Cannot connect to the database. Exiting...
```

インストールガイド関連にはない手続きとして、以下のappendixの情報を元にしてdb手で用意します。多分 apt-get とか yum とかで今後入れる人には関係のない作業..

ちなみに今回はデフォルトで設定されているユーザであるroot使ってますが、zabbixユーザをMySQL内に作ってそれを用いてやる、という方が良いと思います。

https://www.zabbix.com/documentation/2.2/manual/appendix/install/db_scripts

```
shell> mysql -u<username> -p<password>
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> quit;
shell> mysql -u<username> -p<password> zabbix < database/mysql/schema.sql
# stop here if you are creating database for Zabbix proxy
shell> mysql -u<username> -p<password> zabbix < database/mysql/images.sql
shell> mysql -u<username> -p<password> zabbix < database/mysql/data.sql
```

zabbix_serverコマンドを叩きます。こんどはプロセス残るはず

# php フロントエンドをインストール

上のはCで書かれたZabbix Serverの話でした。

次はそれを操作するPHPフロントエンドを入れます。

```
> sudo sudo mkdir /var/www/zabbix
> cd frontends/php
> sudo cp -a . <htdocs>/zabbix
```

で、Webサーバにアクセスします。

# php 自体の設定

Zabbixはインストール時にphp.iniにケチつける機能が付いています。

![zabbix_is_demanding.png](https://qiita-image-store.s3.amazonaws.com/0/14365/43f3b3b1-8113-084e-7d5c-33029c8708a0.png)

(この画面は上記で入れたphp5関連のパッケージが一部ないのでこんなに赤い)

/etc/php5/apache2/php.ini を修正します

```php
..
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
; post_max_size = 8M
post_max_size = 16M
..

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
; max_execution_time = 30
max_execution_time = 300

..

; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
; max_input_time = 60
max_input_time = 300
..
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
; date.timezone =
date.timezone = "Asia/Tokyo"
```

Apacheをリブート (reloadでもいいかも)

```
> sudo service apache2 restart
```

# ブラウザで最後の設定

後は上記Webサイト上でポチポチやれば良いです。MySQLのパスワードとかまた聞かれます。またなのは前回の設定は Zabbix Server に対するものだからでした。

設定ファイルは /var/www/zabbix/conf/ に書き込まれるため。
/var/www/zabbix/conf/ を www-data からwritableにします。ところでこれ、大丈夫なん？

# おわり

ログイン以降は以下を見よう。

https://www.zabbix.com/documentation/2.2/manual/quickstart/login

なお、入れといてなんですが、1ホストも設定書いてない状態でPHPがもっさり。2.2ならRPi上でも無茶やらせてくれる、という話は幻想だと予想されますわ。ま、そりゃそうだな