RaspbianにZabbixをインストール

今回はRaspbianにZabbixをインストールしてみたいと思います。
前回のPidoraでは「Zabbix Server is not running」と表示が出て心が折れましたが、今回は無事にインストールできました!

それではさっそくインストールを行っていきましょう。
ちなみに今回は以下のような構成になっています。
・Raspbian (Jessie)
・Zabbix (2.2系)
・PHP5.6
MySQL 5.5

Zabbixのパッケージをインストール

さっそくzabbixのパッケージをインストールします。
Redhat系と違って、Debian系はパッケージインストール中にCUIインストーラーみたいなのが起動するようです。
かなりびっくりしました。

それではmysqlバージョンのzabbixサーバをインストールしていきます。

root@raspberrypi:~# aptitude zabbix-server-mysql zabbix-frontend-php php5-mysql  
  
  
        ┌────────────────────────────────┤ mysql-server-5.5 を設定しています ├────────────────────────────────┐  
        │ 強制ではありませんが、MySQL を管理する ""root"" ユーザのパスワードを設定することを強くお勧めします。  │   
        │                                                                                                     │   
        │ この値を空のままにしておいた場合は、パスワードは変更されません。                                    │   
        │                                                                                                     │   
        │ MySQL の ""root"" ユーザに対する新しいパスワード:                                                     │   
        │                                                                                                     │   
        │ ***************____________________________________________________________________________________ │   
        │                                                                                                     │   
        │                                               <了解>                                                │   
        │                                                                                                     │   
        └─────────────────────────────────────────────────────────────────────────────────────────────────────┘   
                                                                                                                  
                                  ┌──────┤ mysql-server-5.5 を設定しています ├───────┐  
                                  │                                                  │   
                                  │                                                  │   
                                  │ MySQL の ""root"" ユーザに対する新しいパスワード:  │   
                                  │                                                  │   
                                  │ ****************________________________________ │   
                                  │                                                  │   
                                  │                      <了解>                      │   
                                  │                                                  │   
                                  └──────────────────────────────────────────────────┘   
  

記事として載せるとやや見た目が悪いですが、上記のようなイメージです。
ここでmysqlのrootパスワードが設定できてしまいます。
便利ではありますね。個人的には好みではありませんが。

php5-mysqlをインストールし忘れると、zabbixのフロントページからDBに接続できないので忘れずにインストールしましょう。
一旦以上で必要なパッケージの導入は完了です。
ここまでは非常に簡単です。

mysql設定

続いてmysqlの設定を行っていきます。
raspberry piは2にもなるとスペックが相当向上していますが、それでも高速というわけではありません。
ある程度パフォーマンス設定を行っておくのが良いと思われます。
今回はそんなに凝った設定はしませんが簡単に設定していきます。

# logサイズ等変更のため、一旦切断しlogを退避(削除)  
root@raspberrypi:~# mysql -u root -p  
Enter password:   
...  
mysql> SET GLOBAL innodb_fast_shutdown=0;  
Query OK, 0 rows affected (0.00 sec)  
  
mysql> quit  
Bye  
root@raspberrypi:~# ls /var/lib/mysql/ib_logfile  
ib_logfile0  ib_logfile1    
root@raspberrypi:~# mv /var/lib/mysql/ib_logfile* /tmp/  
root@raspberrypi:~# cp /etc/mysql/my.cnf /etc/mysql/my.cnf.org  
root@raspberrypi:~# vi /etc/mysql/my.cnf  
root@raspberrypi:~# diff /etc/mysql/my.cnf.org /etc/mysql/my.cnf  
111c111,120  
<   
---  
> # add 2015/10/23 by raru  
> character-set-server=utf8  
> collation-server=utf8_general_ci  
> skip-character-set-client-handshake # 文字コードをクライアントに合わせずサーバ設定に強制  
> innodb_file_per_table=1 # tableごとにファイル分割  
> default-storage-engine=InnoDB # InnoDBをデフォに  
> innodb_buffer_pool_size=256M # bufferを設定。mysql専用鯖で全体の50-80%のメモリ設定らしい  
> innodb_log_file_size=32M  
> innodb_log_files_in_group=2 # logのファイル数  
> skip-name-resolve # dns逆引きスキップ  
116a126  
> default-character-set=utf8  
119a130  
> default-character-set=utf8  
  
root@raspberrypi:~# systemctl restart mysql  

今回設定しているのはそれぞれ上から[mysqld]、[mysqldump]、[mysql]のセクションです。

今回log系の設定を行うためにinnodb_fast_shutdownを設定しています。
これをしないと、変にファイルを掴むの何かして上手くmysqlのrestartができません。

あとは文字コードの設定とキャッシュサイズを指定しています。
Zabbixはmysqlボトルネックになりやすいらしいのでキャッシュ多めに設定するのが良いようです。
私は他にも使いたいので25%程度をしていするに止めました。

また名前解決する意味もないのでskip-name-resolveを設定します。
地味にパフォーマンスに影響があるようです。

ある程度のチューニングが完了したら、日時の確認と自動起動設定を行います。

# 日付確認  
root@raspberrypi:~# echo 'select now()' | mysql -u root -p  
Enter password:   
now()  
2015-10-24 03:51:22  
root@raspberrypi:~# date  
20151024日 土曜日 03:51:23 JST  
  
# 自動起動設定  
root@raspberrypi:~# systemctl enable mysql  
Synchronizing state for mysql.service with sysvinit using update-rc.d...  
Executing /usr/sbin/update-rc.d mysql defaults  
Executing /usr/sbin/update-rc.d mysql enable  
root@raspberrypi:~# systemctl is-enabled mysql  
Failed to get unit file state for mysql.service: No such file or directory  
root@raspberrypi:~# aptitude -y install sysv-rc-conf  
root@raspberrypi:~# sysv-rc-conf --list | grep mysql  
mysql        0:off 1:off  2:on   3:on   4:on   5:on   6:off  

上の方ではサーバの日付とDBの日付を確認しています。
どうやらraspbianではインストールしたままでも普通に日時が合うようです。

最後に自動起動設定ですが、systemctlを利用する割には対応しているんだかしているんだかわからないことになっています。
raspbianなのかdebianなのかわかりませんが、systemctlにちゃんと対応していないものがチラホラある様子です。

曖昧なのは非常に困るので、いわゆるchkconfigのパッケージを導入してそちらで確認を行いました。
今後はこれを利用していくことが増えるでしょう。

なにはともあれ、一応enableで設定はできていたようです。
これでmysqlの設定は一通り完了です。

php設定

続いてphpの設定です。
raspbian(debian)ではphp.iniがいくつかの場所に点在しており、それぞれapache用だったりshell用だったりするみたいです。
今回はもちろんapache用の設定です。

root@raspberrypi:~# cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.org  
root@raspberrypi:~# vi /etc/php5/apache2/php.ini  
root@raspberrypi:~# diff /etc/php5/apache2/php.ini.org /etc/php5/apache2/php.ini  
372c372  
< max_execution_time = 30  
---  
> max_execution_time = 300  
382c382  
< max_input_time = 60  
---  
> max_input_time = 600  
574a575  
> error_log = /var/log/php/error_log  
660c661  
< post_max_size = 8M  
---  
> post_max_size = 16M  
810c811  
< upload_max_filesize = 2M  
---  
> upload_max_filesize = 32M  
884a886  
> date.timezone = ""Asia/Tokyo""  
1513c1515  
< session.hash_function = 0  
---  
> session.hash_function = 1 # md5でなくshaを利用  
1686c1688  
< ;mbstring.language = Japanese  
---  
> mbstring.language = Japanese  
1719a1722  
> mbstring.encoding_translation = Off  
  
root@raspberrypi:~# mkdir -R www-data /var/log/php  
root@raspberrypi:~# chown -R www-data /var/log/php  
root@raspberrypi:~# chmod 775 /var/log/php  
root@raspberrypi:~# apachectl configtest  
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message  
Syntax OK  
root@raspberrypi:~# systemctl restart apache2  

こちらはほぼほぼzabbixインストールのための設定です。
mbstring.html_inputとかoutputはphp5.5以降くらいから非推奨となっているということでしたので設定していません。

encoding_translationをoffにしているのは、勝手に変換とか自分の管理の外で変換されるのが嫌だからです。
だいたいこういうのはバグ発生時にわけわからなくて発見が大変だったりする、というイメージ。

簡単になりますがphp.iniの設定はこんな感じです。
phpのキャッシュサイズを増やす等するとパフォーマンスが向上しますので、自分の環境では増やしたいというときは増やしてください。
ただメモリ容量と相談しないと逆にパフォーマンスが劣化します。

またlogフォルダを作成していますが、果たしてwww-data(apache)で出力されるのかまだ動作検証していないので微妙です。

警告が出ていますが、server nameとサーバのドメイン等が一致していないみたいな内容なので今回はスルーで問題ないです。

apache設定

さて、お次はapacheの設定です。
今回ここも結構時間がかかりました。
Redhat(CentOS)系とはかなりフォルダ構成と使い方が違うのですね。
confファイルの設定自体は同じなのですが、分割の仕方が違う。

ではサイトの設定を行う前に全体の設定を行います。

root@raspberrypi:~# cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.org  
root@raspberrypi:~# vi /etc/apache2/apache2.conf  
root@raspberrypi:~# apachectl configtest  
Syntax OK  
root@raspberrypi:~# diff -u /etc/apache2/apache2.conf.org /etc/apache2/apache2.conf  
--- /etc/apache2/apache2.conf.org   2015-11-21 22:44:00.885668139 +0900  
+++ /etc/apache2/apache2.conf   2015-11-21 22:45:20.405028463 +0900  
@@ -68,6 +68,12 @@  
 #  
 #ServerRoot ""/etc/apache2""  
   
+ServerName raspbian.com  
+  
+ServerTokens Prod  
+ServerSignature Off  
+TraceEnable Off  

ServerTokensとServerSignatureを設定することで、404画面等にapacheのバージョンなどの設定が表示されてしまうことを防ぎます。
TraceEnableについては「実はそんなに怖くないTRACEメソッド」という記事が参考になります。
あんまりOffにする必要がなさそうですが、Onである必要も今のところ感じないので切ってます。

では設定します。

root@raspberrypi:~# cp etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-available/zabbix.conf  
root@raspberrypi:~# vi /etc/apache2/sites-available/zabbix.conf  
root@raspberrypi:~# cat /etc/apache2/sites-available/zabbix.conf   
<VirtualHost *:80>  
    ServerName zabbix.raspbian.com  
  
    ServerAdmin webmaster@localhost  
    DocumentRoot /usr/share/zabbix  
  
    ErrorLog ${APACHE_LOG_DIR}/zabbix/error.log  
    CustomLog ${APACHE_LOG_DIR}/zabbix/access.log combined  
</VirtualHost>  
  
root@raspberrypi:~# a2ensite zabbix  
Enabling site zabbix.  
To activate the new configuration, you need to run:  
  service apache2 reload  
    
root@raspberrypi:~# a2dissite 000-default  
Site 000-default disabled.  
To activate the new configuration, you need to run:  
  service apache2 reload  
  
root@raspberrypi:~# mkdir /var/log/apache2/zabbix  
root@raspberrypi:~# chown -R www-data:www-data /var/log/apache2/zabbix  
root@raspberrypi:~# mkdir /var/www/public/  
root@raspberrypi:~# chown -R www-data:www-data /var/www/public  
root@raspberrypi:~# systemctl restart apache2  

まずdebian(jessie)のapacheのフォルダですが、available系とenable系がありました。
availableに設定を配置して、特定のコマンドで有効化するという運用をするそうです。
有効化といっても、ただのシンボリックリンクなんですけどね。

sites〜がバーチャルホスト設定でmods〜がモジュール系。
今回はデフォルト設定の設定ファイルをコピーしつつ、zabbix用の設定ファイルを作成しています。

中身は非常にシンプルにしてみたのですが、変数を利用している部分があります。
この値は/etc/apache2/envvars に入っているので、そちらで確認してください。

またdebianではapacheのユーザ/グループはwww-dataというようです。apacheではないんですね。

最後に設定を記述したらa2ensiteコマンドで設定を有効化します。
zabbixとしていますが、例えばconfファイルが hogehoge.confであれば hogehogeを指定します。

訳のわからないコマンドですが、apache2 enable siteの略称なのでしょう。
設定の無効化は a2dissite ですし、modの有効化はa2enmodになります。

で、設定が終わったら公開できるようにポートを開きます。

# -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT  
root@raspberrypi:~# vi /etc/iptables/rules.v4  
root@raspberrypi:~# systemctl restart netfilter-persistent  
  
root@raspberrypi:~# vi /etc/hosts  
root@raspberrypi:~# cat /etc/hosts | grep zabbix  
127.0.0.1       zabbix  

微妙にwheezyだったころとiptablesの起動ファイル名が変わっています。
罠ですね。

hostsの設定はおまけです。
本当はFQDNをちゃんと設定してあげたいのですが、一旦省略しています。

zabbix用DB準備

一通りの設定が完了したので、そろそろインストールの準備も大詰めです。
今度はmysqlの設定というよりはDBの準備になります。

さっそくDBを作成してデータを入れていきましょう。

root@raspberrypi:~# mysql -u root -p  
Enter password:   
...  
mysql> create database zabbix;  
Query OK, 1 row affected (0.00 sec)  
  
mysql> grant all privileges on zabbix.* to zabbix@localhost indentified by 'hogehogefugafuga';  
Query OK, 0 rows affected (0.00 sec)  
  
mysql> flush privileges;  
Query OK, 0 rows affected (0.00 sec)  
  
mysql> quit  
Bye  
  
root@raspberrypi:~# gunzip -d /usr/share/zabbix-server-mysql/*  
gzip: /usr/share/zabbix-server-mysql/zabbix_server.conf: unknown suffix -- ignored  
root@raspberrypi:~# mysql -u root -p zabbix < /usr/share/zabbix-server-mysql/schema.sql  
Enter password:   
root@raspberrypi:~# mysql -u root -p zabbix < /usr/share/zabbix-server-mysql/images.sql   
Enter password:   
root@raspberrypi:~# mysql -u root -p zabbix < /usr/share/zabbix-server-mysql/data.sql   
Enter password:  
root@raspberrypi:~# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.org  
root@raspberrypi:~# vi /etc/zabbix/zabbix_server.conf  
root@raspberrypi:~# diff /etc/zabbix/zabbix_server.conf.org /etc/zabbix/zabbix_server.conf  
116a117,118  
> DBPassword=hogehogefugafuga  

上から特に説明する物もないかなぁと思います。
DB作って、ユーザ作って、パスワード設定して、zabbixのパッケージ導入時に配置されているsqlを展開して流しています。

さいごに設定ファイルにパスワードを設定します。
これでzabbixからDBに対する接続の設定と、接続をするDBの設定が完了しました。

また作成するDB名や、ユーザ名を上記以外の物にする場合にはzabbix_server.confのDBUserとかそういう値を修正しましょう。
それで接続が可能です。

で、基本的にはこれで完了なのですが一点だけ注意が必要です。
今回私がもっとも悩まされた設定が一つ残っています。

root@raspberrypi:~# cp /etc/default/zabbix-server /etc/default/zabbix-server.org  
root@raspberrypi:~# vi /etc/default/zabbix-server  
root@raspberrypi:~# diff /etc/default/zabbix-server.org /etc/default/zabbix-server  
11c11  
< START=no  
---  
> START=yes  
root@raspberrypi:~# systemctl restart zabbix-server  

これです。
このSTARTの値をyesにしないと、systemctl start zabbix-serverとしてもデーモンが起動しません。
つまり動きません。

なぜデフォルトでnoなのか全くよくわかりませんが、この設定が抜けている場合はインストール後に「zabbix server is not running」というエラーに悩まされることになります。
このエラーいろいろなサイトで調べてもconfの設定を見直す、ということしか書いてないので非常に苦労しました。

STARTがnoの状態でも一応起動的にはOKのようで、systemctl status zabbix-serverとしてもactive状態になっているんですよね。
ただpsコマンドでプロセスを確認すると、それに属するプロセスが全く動いていないので気づけました。

過去pidoraの設定で動かなかったのもこれが原因だった可能性が高いですね。

なにはともあれ、これで設定が完了です。
あとはウェブブラウザからアクセスしてインストール作業を進めましょう。

ウェブページからインストール

あとはおそらく屋内であるであろうzabbixサーバに対してブラウザからアクセスを行い、インストールします。
ipでアクセスしても良いですし、hostを設定しても構いません。

またインストールの前に以下の設定を行います。

root@raspberrypi:~# ls -l /etc/ | grep zabbix  
drwxr-xr-x  3 root root    4096 1026 01:09 zabbix  
root@raspberrypi:~# chgrp www-data /etc/zabbix  
root@raspberrypi:~# chmod 775 /etc/zabbix  
root@raspberrypi:~# ls -l /etc/ | grep zabbix  
drwxrwxr-x  3 root www-data  4096 1026 01:09 zabbix  

/etc/zabbixにファイルを作成していくようなので、権限を与えています。
あとはブラウザからインストールです。

zabbix2.2インストール

raspbian_zabbix2

この画面でエラーが出る場合にはコツコツと潰していきましょう。
おそらく大丈夫だとは思います。

raspbian_zabbix3

raspbian_zabbix4

raspbian_zabbix5

raspbian_zabbix6

raspbian_zabbix7

上記ででているエラーが先ほど権限が必要になるポイントです。
先に設定をしている場合にはここも下の画像のように問題なく通過できると思います。

raspbian_zabbix8

raspbian_zabbix9

インストール完了後のIDはadmin, PWはzabbixです。デフォルトではこうなっているようです。
上記の画像はidが間違ってますね。

これでログイン後にエラーがでなければ完了です。

次はこのサーバ自体にzabbix_agentを導入して監視しつつ、このブログ利用しているサーバの監視もしていきたいと思います。

まだまだ続くよzabbix設定
次回はagentをインストールして自己監視です。

あとがき

今回はSTART=noが、一番言いたい部分でした。
ここがわからずにzabbixの導入を諦めている人もたくさんいるのではないかと勝手に思っています。
また現在zabbix3のα?版くらいがでてきているようです。
まだ2.4にすらしていないのですが、もう3ですか。

なにはともあれ、これでraspbianを本格的に活用していけそうです。