KUSANAGI にZabbix3.0 serverを入れてみる
KUSANAGIでZabbix Server
KUSANAGIにはZabbix2.2 Agentが標準で入っています。Zabbix Serverを用意すれば、簡単に監視できますね。
ということで、リリースされて久しい Zabbix 3.0 Server を入れてみました。もちろんKUSANAGIにね。
Zabbix Server自体は、MySQLなどを利用した情報収集プログラムですが、そのWebUI(とAPI)はPHPで書かれています。
ですので、KUSANAGIで提供しているNginx+PHP7で動くはずです。
Zabbix Server3.0インストール
- kusanagiインストール
今回は、さくらのクラウド(1Core、1GB、SSD 20GB の構成)へKUSANAGIを入れます(さくらのクラウドへのKUSANAGIインストール手順)。
今ならkusanagi-7.8.2+nginx-1.10.0+php7.0.6 がインストールされます(5/21現在)。 - zabbix22のアンインストール
kusanagi-7.8.2 のRPMは、zabbix22-agent をrequire しています。そのため、普通にzabbix22-agent を削除すると、kusanagi パッケージまで削除されてしまいます。そこで小技を使って、zabbix22-agent(とzabbix22)のみを削除します。
rpm -e で削除する際に –nodeps を指定すると、依存関係を無視して指定したRPMのみを削除してくれます。# rpm -e --nodeps zabbix22 zabbix22-agent # rpm -q kusanagi kusanagi-7.8.2-2.noarch
- zabbix-3.0 repository 登録
ZabbixのWebサイトの手順に従って、repositoryを登録したいと思います。手順では rpmコマンドを使用していますが、ここではyum を使います。# yum install http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
- Zabbix-server/agent インストール
Zabbix server とagentをインストールします。依存関係によりphp56のパッケージがインストールされるので、–enablerepo でremi-php56を有効にします。
Zabbix WebUIで使用する日本語フォントをインストールするため、zabbix-web-japanese もインストールしておきます。# yum --enablerepo=remi,remi-php56 install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-web-japanese
Zabbix設定
- kusanagi provision
WebUIの設定ファイルを生成するために、kusanagi provision を実行します。ここは通常のkusanagi provision手順の通りです。# kusanagi provision zabbix
ZabbixのDB名、ユーザ名、パスワードは、ここで作成したものを使用します。
また今回httpsを使用するつもりなので、メールアドレスを指定して Let’s Encrypt の証明書も取得・設定しておきます。
ここでインストールされるWordPressは使用しません。ファイル削除してもいいですが、nginxの設定でrootを書き換えるので、そのままでもWordPressのコードは使用されません。 - Zabbix DB初期化
ZabbixのDB設定では、文字コードと照合順序(collations)を指定しておく必要があるため、alterで変更します。# echo 'alter database zabbix charactKer sertKt yKutf8 collate utf8K_bin;'| mysql -uzabbix -p zabbix Enter password:
あとは、Zabbixの手順通りに初期化用のSQLをMySQLに設定します。
# cd /usr/share/doc/zabbix-server-mysql-3.0.0 # zcat create.sql.gz | mysql -uroot -p zabbix
- Zabbix server設定
/etc/zabbix/zabbix_server.conf で、DBName, DBUser, DBPassword をkusanagi provision で指定したものを記述します。以下記述例。DBName=zabbix DBUser=zabbix DBPassword=zabbix
- Zabbix server起動
Zabbix Serverを起動し、問題なく起動することを確認します。# systemctl start zabbix-server # systemctl status zabbix-server ● zabbix-server.service - Zabbix Server Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2016-05-21 04:54:04 JST; 1h 30min ago Process: 24363 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) Main PID: 24365 (zabbix_server) CGroup: /system.slice/zabbix-server.service ├─24365 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf (中略) # systemctl enable zabbix-server Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/sy stem/zabbix-server.service.
- Zabbix agentd起動
Zabbix agentdも起動しておきます。# systemctl start zabbix-agent # systemctl status zabbix-agent ● zabbix-agent.service - Zabbix Agent Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2016-05-21 04:54:56 JST; 1h 33min ago Main PID: 24421 (zabbix_agentd) CGroup: /system.slice/zabbix-agent.service ├─24421 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf ├─24422 /usr/sbin/zabbix_agentd: collector [idle 1 sec] ├─24423 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] ├─24424 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection] ├─24425 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] └─24426 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec] May 21 04:54:56 zabbix systemd[1]: Starting Zabbix Agent... May 21 04:54:56 zabbix systemd[1]: PID file /run/zabbix/zabbix_agentd.pid not readable (yet?) after start. May 21 04:54:56 zabbix systemd[1]: Started Zabbix Agent. # systemctl enable zabbix-agent Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/sys tem/zabbix-agent.service.
- nginx設定
/etc/nginx/conf.d/zabbix_http.conf と zabbix_ssl.conf の root の部分を書き替え、Zabbixのパス(/usr/share/zabbix)を設定します。root /usr/share/zabbix;
- PHP設定
今回、PHP7を使用します。Zabbixの仕様のため、/etc/php7-fpm.d/www.conf の末尾に以下の設定を加えます。php_value[max_execution_time] = 300 php_value[max_input_time] = 300 php_value[date.timezone] = Asia/Tokyo
ここで、php7 を起動します。
# kusanagi php7
- Zabbix 権限設定
以下のように、WebUIで使用するディレクトリのオーナーを、nginx/php7 の起動ユーザ httpd:www に変更します。
また、php-56のUpdateによって変更された/var/lib/php/* のgroup権限も、wwwに変更しなおします。# chown -R httpd:www /usr/share/zabbix /etc/zabbix/www # chown :www /var/lib/php/*
- Zabbix confファイル設定
通常、ここでWebUIで初期設定を行うのですが、なぜか初期画面の「Next」から先に進まないので、設定ファイルを直接作成します。
テンプレート(zabbix.conf.php.sample) を /etc/zabbix/web/zabbix.conf.php にコピーします。# cp /usr/share/zabbix/conf/zabbix.conf.php.example /etc/zabbix/web/zabbix.conf.php
設定ファイル /etc/zabbix/web/zabbix.conf.php の、以下の Zabbix DBの接続情報部分を書き換えます。
$DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'zabbix';
- Zabbix WebUIアクセス
kusanagi provisionで指定したホスト名にwebブラウザでアクセスすると、ログイン画面が出ます。
また、http 接続から https接続へのredirect を設定し、nginxを再起動します。
# kusanagi https redirect
# kusanagi nginx
初期ユーザ・パスワード(User=Admin、password=zabbix)でログインし、Adminのパスワードを変更します。
Zabbix の速度を見る
あとは、通常通りZabbixの設定を行っていきます。
これで、KUSANAGIの nginx+php7 を使用した超早いZabbix WebUIが実現しました。
ほんとに早くなったのか見てみましょう。FirefoxのWeb inspectionで速度を見てみます。
- KUSANAGI Zabbix ダッシュボード
大体、50ms以下に収まっていますね。
- KUSANAGI Zabbix スクリーン
チャートの生成に100ms程度かかっていますが、map生成なども50ms程度に収まっています。
- Zabbix デモ環境
比較のため、Zabbix.org のデモサイトにguest loginして、Firefoxで速度を見ました。
待機時間(通信している時間以外=PHPの生成時間)は、おおむね500ms程度です。
このKUSANAGI Zabbixサイトは作ったばかりなので、Zabbix.orgのdemo環境とは持っている監視データ量が全然違います。
これを差し引いて比較する必要がありますが、PHPのページ生成が100ms以下なので、KUSANAGIを使用することでWebUIは超早くなってるのではないでしょうか?
今後の課題
今後、Zabbixで以下のようなことをやりたいと思っています。
- Zabbix Agent通信の暗号化
- hhvm での動作確認
- KUSANAGIで使用しているPHP7の APC/APCuやOPCacheのパラメータ監視
- APIの速度も比較
APIの速度測定はどうしたものか。どこかのZabbixおじさんを召喚するか?