Zabbix 3.0 LTSの構築(Proxy利用)
Zabbix 3.0 LTSの構築手順。
バージョン番号的には3.4が最新だが、実利用上はLTSである3.0のほうが都合が良い。
https://www.zabbix.com/download
公式ドキュメントはここ。
Zabbix Manual [Zabbix Documentation 3.0]
構成
今回は、Zabbix Server、Zabbix Proxy、Zabbix Web、MySQL、そして監視対象サーバの5台をそれぞれの環境にセットアップする。
Proxyはパッシブモードで動作させ、Proxy用のDBは同一サーバ内に持つことにする。
※ ProxyのDBとServerのDBは一緒にしてはいけない。それではProxyの意味がなくなる。
仮想サーバの用意
Vagrantfileを用意してCentOS7を5台立ち上げる。
Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.define "server" do |server| server.vm.network "private_network", ip: "192.168.33.31" end config.vm.define "proxy" do |server| server.vm.network "private_network", ip: "192.168.33.32" end config.vm.define "web" do |server| server.vm.network "private_network", ip: "192.168.33.33" end config.vm.define "db" do |server| server.vm.network "private_network", ip: "192.168.33.34" end config.vm.define "client" do |server| server.vm.network "private_network", ip: "192.168.33.35" end end
$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core)
Zabbix Serverの構築
まずyum repositoryの追加。/etc/yum.repos.d/zabbix.fepo
にファイルが作られる。
$ sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
Zabbix Serverのパッケージをインストールする。
$ sudo yum install zabbix-server-mysql -y
設定ファイルを書き換える(DB接続情報を追加)。
ProxyConfigFrequency
はパッシブモードのProxyに設定を連携する間隔設定。3600secだと長すぎるので60secにする(実運用では300secぐらいが妥当か?)。
$ sudo cp -p /etc/zabbix/zabbix_server.conf{,.org} $ sudo vi /etc/zabbix/zabbix_server.conf $ sudo diff /etc/zabbix/zabbix_server.conf{.org,} 82a83,84 > DBHost=192.168.33.34 > 116a119,120 > DBPassword=zabbix > 525a530,531 > > ProxyConfigFrequency=60
Zabbix Serverを起動。失敗。。。
$ sudo systemctl start zabbix-server Job for zabbix-server.service failed because a configured resource limit was exceeded. See "systemctl status zabbix-server.service" and "journalctl -xe" for details.
ログを確認すると「cannot set resource limit: [13] Permission denied」と出ている。
$ tail -n 3 /var/log/zabbix/zabbix_server.log 4928:20170724:161152.933 using configuration file: /etc/zabbix/zabbix_server.conf 4928:20170724:161152.934 cannot set resource limit: [13] Permission denied 4928:20170724:161152.934 cannot disable core dump, exiting...
調べると同じ現象が結構出てくる。
さっしーの試してみるか3: Zabbix 3.0.7を建ててみたがはまったのでメモ
SELinuxが有効になっていることが原因とわかったので、上記記事を参考にさせて頂き、zabbix-serverに関するポリシーを変更。
$ getenforce Enforcing $ sudo yum install policycoreutils-python -y $ sudo grep zabbix_server /var/log/audit/audit.log | audit2allow $ sudo grep zabbix_server /var/log/audit/audit.log | audit2allow -M zabbix-limit $ sudo semodule -i zabbix-limit.pp
ここで改めてzabbix-serverの起動を試みるとうまくいく。
ログにはDB接続エラーが出るが、これもSELinux関連。setsebool
でZabbix Serverが外部と通信できるようにする。
$ sudo systemctl start zabbix-server $ sudo setsebool -P zabbix_can_network on
DBサーバの構築
今回はMariaDBを利用する。まずパッケージのインストールを行って起動。
MariaDBのエンコーディング設定はutf8にしておく。
$ sudo yum install mariadb-server -y $ sudo systemctl start mariadb
初期設定。まずrootのパスワードを設定。
$ /usr/bin/mysql_secure_installation (いろいろ聞かれるので答えていく)
そしてzabbixデータベースとzabbixユーザを作る。
$ mysql -uroot -p MariaDB [(none)]> show variables like 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) MariaDB [(none)]> create database zabbix; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'%' identified by 'zabbix'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
Zabbix ServerからDDLを持ってきて流す。DDLファイルは/usr/share/doc/zabbix-server-mysql-3.0.10/create.sql.gz
にある。
ちなみに、今回はMariaDBだからそのままで良いが、Percona Server 5.7を利用する場合にはDDLを一部書き換える必要がある(プライマリキー必須のため)。
$ zcat create.sql.gz | mysql -uzabbix -p zabbix
Zabbix Proxyの構築
Zabbix Serverと同様、まずyum repositoryの追加。
$ sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
Zabbix ProxyとMariaDBのパッケージをインストールする。
$ sudo yum install zabbix-proxy-mysql mariadb-server -y
MariaDBをセットアップしていく。
エンコーディング設定は事前にutf8にしておく。
$ sudo systemctl start mariadb $ /usr/bin/mysql_secure_installation $ mysql -uroot -p MariaDB [(none)]> create database zabbix_proxy; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all privileges on zabbix_proxy.* to 'zabbix'@'localhost' identified by 'zabbix'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
Zabbix ProxyのパッケージについてきているDDLを流す。
$ zcat /usr/share/doc/zabbix-proxy-mysql-3.0.10/schema.sql.gz | mysql -uzabbix -p zabbix_proxy
次にZabbix Proxyの設定を行う。今回はパッシブモードで動作させる。
$ sudo cp -p /etc/zabbix/zabbix_proxy.conf{,.org} $ sudo vi /etc/zabbix/zabbix_proxy.conf $ sudo diff /etc/zabbix/zabbix_proxy.conf{.org,} 14a15,16 > ProxyMode=1 > 162a165,166 > > DBPassword=zabbix
Zabbix Proxyを起動する。Zabbix Serverと同様の落ち方をするので、設定を行って起動させる。
$ sudo systemctl start zabbix-proxy Job for zabbix-proxy.service failed because a configured resource limit was exceeded. See "systemctl status zabbix-proxy.service" and "journalctl -xe" for details. $ tail -n 3 /var/log/zabbix/zabbix_proxy.log 24459:20170724:172729.981 using configuration file: /etc/zabbix/zabbix_proxy.conf 24459:20170724:172729.981 cannot set resource limit: [13] Permission denied 24459:20170724:172729.981 cannot disable core dump, exiting... $ sudo yum install policycoreutils-python -y $ sudo grep zabbix_proxy /var/log/audit/audit.log | audit2allow $ sudo grep zabbix_proxy /var/log/audit/audit.log | audit2allow -M zabbix-limit $ sudo semodule -i zabbix-limit.pp $ sudo systemctl status zabbix-proxy
Zabbix Webの構築
これまでと同様、まずyum repositoryの追加。
$ sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
Zabbix Webのパッケージをインストールする。
zabbix-web-japanese
というパッケージもあり、これを入れると日本語対応できるが、今回はいったん無し。
$ sudo yum install zabbix-web-mysql -y
httpdでサーブできるようにzabbixのPHPファイルを配置(シンボリックリンク)。
$ sudo ln -s /usr/share/zabbix /var/www/html/zabbix
PHPの設定を修正する。タイムゾーンを指定しないとWeb UI開いたときに大量のエラーを見るはめになる。
$ sudo cp -p /etc/httpd/conf.d/zabbix.conf{,.org} $ sudo vi /etc/httpd/conf.d/zabbix.conf $ sudo diff /etc/httpd/conf.d/zabbix.conf{.org,} 19c19 < # php_value date.timezone Europe/Riga --- > php_value date.timezone Asia/Tokyo
Zabbix Webの設定ファイルを用意する。
$ sudo cp /usr/share/zabbix/conf/zabbix.conf.php.example /etc/zabbix/web/zabbix.conf.php $ sudo vi /etc/zabbix/web/zabbix.conf.php $ sudo diff /usr/share/zabbix/conf/zabbix.conf.php.example /etc/zabbix/web/zabbix.conf.php 6,7c6,7 < $DB['SERVER'] = 'localhost'; < $DB['PORT'] = '0'; --- > $DB['SERVER'] = '192.168.33.34'; > $DB['PORT'] = '3306'; 10c10 < $DB['PASSWORD'] = ''; --- > $DB['PASSWORD'] = 'zabbix'; 14c14 < $ZBX_SERVER = 'localhost'; --- > $ZBX_SERVER = '192.168.33.31'; 16c16 < $ZBX_SERVER_NAME = ''; --- > $ZBX_SERVER_NAME = 'zabbix-server';
httpdが外部NWと通信可能にしておく(MariDBとの接続)。
$ sudo setsebool -P httpd_can_network_connect on
そしてhttpdを起動する。
$ sudo systemctl start httpd
ブラウザでアクセスするとZabbixのWeb UIが表示される。
初期状態では、ユーザ名「Admin」、パスワード「zabbix」でログインできる。
監視対象サーバの構築
これまでと同様、まずyum repositoryの追加。
$ sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
そしてZabbix Agentのインストール。
$ sudo yum install zabbix-agent -y
Zabbix Proxyと通信するように設定する。
$ sudo cp -p /etc/zabbix/zabbix_agentd.conf{,.org} $ sudo vi /etc/zabbix/zabbix_agentd.conf $ sudo diff /etc/zabbix/zabbix_agentd.conf{.org,} 95c95 < Server=127.0.0.1 --- > Server=192.168.33.32 136c136 < ServerActive=127.0.0.1 --- > ServerActive=192.168.33.32 147c147 < Hostname=Zabbix server --- > Hostname=Zabbix agent
Zabbix Agentを起動するが、これもSELinux関連で落ちる。これまでと同様に設定する。
$ sudo systemctl start zabbix-agent Job for zabbix-agent.service failed because a configured resource limit was exceeded. See "systemctl status zabbix-agent.service" and "journalctl -xe" for details. $ tail -n 3 /var/log/zabbix/zabbix_agentd.log 31979:20170724:183644.392 using configuration file: /etc/zabbix/zabbix_agentd.conf 31979:20170724:183644.392 cannot set resource limit: [13] Permission denied 31979:20170724:183644.392 cannot disable core dump, exiting... $ sudo yum install policycoreutils-python -y $ sudo grep zabbix_agent /var/log/audit/audit.log | audit2allow $ sudo grep zabbix_agent /var/log/audit/audit.log | audit2allow -M zabbix-limit $ sudo semodule -i zabbix-limit.pp
Zabbix Agentが起動できたら、Proxy経由で監視するようWeb UIから設定する。
今後:HA構成
監視サーバだから多少落ちてても問題ないよね、という考えはあるが、とはいえ自動でフェイルオーバーしてくれたほうが運用上楽なのは間違いない。
というか、運用のためのツールの運用に手間かかるような状態ではダメだ。
Pacemaker等を利用してHA構成を構築することができるようなので、これは別途試してみることにする。