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 2015年 10月 24日 土曜日 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 10月 26 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 10月 26 01:09 zabbix
/etc/zabbixにファイルを作成していくようなので、権限を与えています。
あとはブラウザからインストールです。
この画面でエラーが出る場合にはコツコツと潰していきましょう。
おそらく大丈夫だとは思います。
上記ででているエラーが先ほど権限が必要になるポイントです。
先に設定をしている場合にはここも下の画像のように問題なく通過できると思います。
インストール完了後のIDはadmin, PWはzabbixです。デフォルトではこうなっているようです。
上記の画像はidが間違ってますね。
これでログイン後にエラーがでなければ完了です。
次はこのサーバ自体にzabbix_agentを導入して監視しつつ、このブログ利用しているサーバの監視もしていきたいと思います。
まだまだ続くよzabbix設定
次回はagentをインストールして自己監視です。
あとがき
今回はSTART=noが、一番言いたい部分でした。
ここがわからずにzabbixの導入を諦めている人もたくさんいるのではないかと勝手に思っています。
また現在zabbix3のα?版くらいがでてきているようです。
まだ2.4にすらしていないのですが、もう3ですか。
なにはともあれ、これでraspbianを本格的に活用していけそうです。