Zabbix 5.4 インストール手順(CentOS Stream 8 / Apache2.4 / PHP-FPM7.2 / PostgreSQL13)
Contents
はじめに
2021年5月17日、Zabbix 5.4がリリースされました。以下公式サイトに主な変更内容がまとめられています。
今回は、業務システムで使われることの多いPostgreSQLを使用して、Apache + PHP-FPM + PostgreSQLでZabbix Server 5.4およびZabbix Agent2 5.4のインストールを検証してみました。
[今までのZabbix 5.4 検証記事]
Zabbix 5.4 インストール手順(CentOS Stream 8 / Apache2.4 / PHP-FPM7.2 / MySQL8.0)
Zabbix 5.4 インストール手順(CentOS Stream 8 / Apache2.4 / PHP-FPM7.2 / PostgreSQL13)
前提条件
以下の前提条件で検証しています。
- ハードウェア: VirtualBox上の仮想マシン
- OS: CentOS Stream 8
- ミドルウェア:
- Apache: 2.4.37 (OS同梱版)
- PHP-FPM: 7.2.24 (OS同梱版)
- PostgreSQL: 13.2 (OS同梱版)
- Zabbix Server: 5.4.0
- Zabbix Agent 2: 5.4.0
- 構築対象サーバはインターネットと疎通が取れること
- 各手順はroot権限を持つユーザで実施
OSは、CentOS StreamインストールDVDのISOファイルから「最小限のインストール」を選択しインストールを行いました。
バージョン情報は以下の通りです。
# cat /etc/redhat-release
CentOS Stream release 8
# uname -r
4.18.0-301.1.el8.x86_64
パッケージインストール
Zabbixの動作に必要となる各種パッケージをインストールします。
PostgreSQL
検証時、CentOS Stream 8のデフォルト状態では、PostgreSQL 10が有効なストリームとなっていました。
# dnf module list postgresql
メタデータの期限切れの最終確認: 1:28:21 時間前の 2021年05月30日 20時28分29秒 に実施しました。
CentOS Stream 8 - AppStream
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 client, server [d] PostgreSQL server and client module
postgresql 13 client, server [d] PostgreSQL server and client module
ヒント: [d]efault, [e]nabled, [x]disabled, [I]nstalled
今回はPostgreSQL 13をインストールするので、<モジュール名>:<ストリーム>
の形式でインストール対象を指定します。
# dnf module install -y postgresql:13
Zabbix Server
Zabbixのリリース状況によっては、新しいバージョンのパッケージが公開される可能性があります。以下の公式リポジトリで、「zabbix-release-5.4-x.el8.noarch.rpm」のバージョンを確認して、新しいバージョンが公開されている場合は、インストール対象パッケージのURLを適宜変更してください。
https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/
Zabbix 5.4の公式リポジトリをインストールします。
# dnf install -y https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
Zabbix Serverの関連パッケージをインストールします。
# dnf install -y zabbix-server-pgsql zabbix-web-pgsql zabbix-web-japanese zabbix-apache-conf zabbix-sql-scripts
Zabbix Agent 2
Zabbix Agent 2をインストールします。
# dnf install -y zabbix-agent2
policycoreutils-python-utils
CLIでSELinuxの設定を行うためのユーティリティをインストールします。
# dnf install -y policycoreutils-python-utils
設定ファイルの変更
PHP-FPM
viなどのテキストエディタで、PHP-FPMのZabbix用設定ファイルを開きます。
# vi /etc/php-fpm.d/zabbix.conf
設定変更内容は以下の通りです。
最低限の設定として、PHPのタイムゾーンを変更します。
# タイムゾーン行のコメントアウトを外し、Asia/Tokyoに変更
; php_value[date.timezone] = Europe/Riga
↓
php_value[date.timezone] = Asia/Tokyo
Zabbix Server
viなどのテキストエディタで、Zabbix Serverの設定ファイルを開きます。
# vi /etc/zabbix/zabbix_server.conf
設定変更内容は以下の通りです。最低限の設定として、DBサーバへの接続情報が必要です。
### DB関連の設定 ###
# DB名
# 今回はデフォルトのzabbixを使用するので変更しない
DBName=zabbix
# DBユーザ名
# 今回はデフォルトのzabbixを使用するので変更しない
DBUser=zabbix
# DBパスワード
# 項目のコメントアウトを外し、クオートやスペースを含めずに指定する
# 今回は、例としてパスワードをzabbixpassに指定
# DBPassword=
↓
DBPassword=zabbixpass
Zabbix Agent2
viなどのテキストエディタで、Zabbix Agent 2の設定ファイルを開きます。
# vi /etc/zabbix/zabbix_agent2.conf
設定変更内容は以下の通りです。監視を受け付けるサーバに関する設定を行います。
# 監視通信を許可するサーバIPアドレス
# Zabbixサーバ自身を監視する場合は値を変更しない
# 別サーバへエージェントをインストールする場合は、通信元ZabbixサーバのIPアドレスを指定する
Server=127.0.0.1
# アクティブチェック監視データの送信先サーバIPアドレス
# Zabbixサーバ自身を監視する場合は値を変更しない
# 別サーバへエージェントをインストールする場合は、ZabbixサーバのIPアドレスを指定する
ServerActive=127.0.0.1
# 自ホスト名
# OS上のホスト名ではなく、Zabbix監視設定上のホスト名なので注意
# 以下の例では、監視設定上のzbx01をホスト名に指定している
Hostname=Zabbix server
↓
Hostname=zbx01
データベースの設定
データベースクラスタの作成
PostgreSQLのDBクラスタを作成します。
# postgresql-setup --initdb
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
データベースクラスタは、/var/lib/pgsql/data
に作成されます。
認証設定
viなどのテキストエディタで、PostgreSQLの認証設定ファイルを開きます。
# vi /var/lib/pgsql/data/pg_hba.conf
設定変更内容は以下の通りです。
IPv4、IPv6接続時のDB認証方式をident
からmd5
に変更します。また、レプリケーション用の認証設定は不要なのでコメントアウトします。
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
↓
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
↓
# local replication all peer
# host replication all 127.0.0.1/32 ident
# host replication all ::1/128 ident
PostgreSQLの自動起動設定と、サービスの起動を行います。
# systemctl enable --now postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
シェルの実行ユーザをpostgres
に変更し、新たなDBユーザとしてzabbix
を作成します。
以下の例では、Zabbix Serverの設定と合わせて、DBユーザのパスワードはzabbixpass
を指定しました。
# su - postgres
$ createuser -P zabbix
新しいロールのためのパスワード: ←DBユーザのパスワードを入力
もう一度入力してください: ←DBユーザのパスワードを入力
DBユーザzabbix
をオーナーに指定したZabbix用DBzabbix
を作成します。
$ createdb -O zabbix -E Unicode -T template0 zabbix
postgres
ユーザから元の作業ユーザに戻り、Zabbixの初期スキーマ、データをDBにインポートします。
$ exit
# zcat /usr/share/doc/zabbix-sql-scripts/postgresql/create.sql.gz | sudo -u zabbix psql zabbix
(略)
COMMIT
SELinuxの設定(ブール値の有効化)
SELinuxが有効な場合、Zabbixに関するセキュリティポリシーを設定します。
まずは、Zabbixインストール時自動的に追加されるブール値の状態を確認します。
# semanage boolean -l | grep -E "(zabbix|httpd)"
(抜粋)
httpd_can_network_connect_db (オフ , オフ) Allow httpd to can network connect db
httpd_can_connect_zabbix (オフ , オフ) Allow httpd to can connect zabbix
zabbix_can_network (オフ , オフ) Allow zabbix to can network
zabbix_run_sudo (オフ , オフ) Allow zabbix to run sudo
最低限の通信が行えるよう、以下を有効化します。
# setsebool -P httpd_can_connect_zabbix on
# setsebool -P zabbix_can_network on
# setsebool -P httpd_can_network_connect_db on
zabbix_run_sudo
は、Zabbix Serverでsudoコマンドの発行要件がある場合に有効化します。
上記の設定だけではWebUIの動作に問題が発生するため、監査ログが記録される状態のまま一旦SELinuxの強制アクセス制御を解除します。
# setenforce Permissive
ファイアウォールの設定
Firewalldを使用する場合、外部からの通信を許可します。許可対象の通信は以下の通りです。
- 10050/tcp : Zabbix Server → Zabbix Agentのパッシブ監視通信(Zbbixサーバ自身は不要、監視対象サーバでは必要)
- 10051/tcp : Zabbix Agent → Serverのアクティブ監視通信(Zabbixサーバのみ必要)
- http : クライアント → Zabbix WebUIのHTTP通信(Zabbixサーバのみ必要)
# firewall-cmd --add-port=10051/tcp --zone=public --permanent
success
# firewall-cmd --add-service=http --zone=public --permanent
success
# firewall-cmd --reload
success
Zabbix WebUIのSSL化(https)や、SNMP Trapの受信(162/udp)など、Zabbixサーバに対する上記以外のインバウンド通信要件がある場合は、適宜Firewalldの設定を追加してください。
サービス起動
Apache
Apacheの自動起動設定とサービス起動を行います。
# systemctl enable --now httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
PHP-FPM
PHP-FPMの自動起動設定とサービス起動を行います。
# systemctl enable --now php-fpm.service
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
Zabbix Server
Zabbix Serverの自動起動設定とサービス起動を行います。
# systemctl enable --now zabbix-server.service
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service → /usr/lib/systemd/system/zabbix-server.service.
Zabbix Agent2
Zabbix Agent2の自動起動設定とサービス起動を行います。
# systemctl enable --now zabbix-agent2
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent2.service → /usr/lib/systemd/system/zabbix-agent2.service.
サービス起動確認
Zabbixを構成している全サービスが起動していることを確認します。各サービスがActive: active (running)
になっていれば正常に起動しています。
# systemctl status \
httpd.service \
php-fpm.service \
postgresql.service \
zabbix-server.service \
zabbix-agent2.service \
| grep -E "(●|Active:)"
● httpd.service - The Apache HTTP Server
Active: active (running) since Sun 2021-05-30 23:47:18 JST; 3min 44s ago
● php-fpm.service - The PHP FastCGI Process Manager
Active: active (running) since Sun 2021-05-30 23:47:18 JST; 3min 45s ago
● postgresql.service - PostgreSQL database server
Active: active (running) since Sun 2021-05-30 23:41:49 JST; 9min ago
● zabbix-server.service - Zabbix Server
Active: active (running) since Sun 2021-05-30 23:47:18 JST; 3min 45s ago
● zabbix-agent2.service - Zabbix Agent 2
Active: active (running) since Sun 2021-05-30 23:47:18 JST; 3min 45s ago
SELinuxの設定(カスタムポリシーの追加)
SELinuxのセキュリティポリシーに違反しているZabbixのアクションは、監査ログ(/var/log/audit/audit.log
)に保存されています。以下のコマンドで違反内容が確認できます。
# ausearch -i | grep "denied.*zabbix"
type=AVC msg=audit(2021年05月30日 23:47:18.252:524) : avc: denied { dac_override } for pid=16756 comm=zabbix_server capability=dac_override scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:system_r:zabbix_t:s0 tclass=capability permissive=1
type=AVC msg=audit(2021年05月30日 23:47:18.279:528) : avc: denied { search } for pid=16769 comm=zabbix_server name=krb5 dev="dm-0" ino=33856248 scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:object_r:krb5_keytab_t:s0 tclass=dir permissive=1
type=AVC msg=audit(2021年05月30日 23:47:18.598:531) : avc: denied { connectto } for pid=17035 comm=zabbix_server path=/run/zabbix/zabbix_server_preprocessing.sock scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:system_r:zabbix_t:s0 tclass=unix_stream_socket permissive=1
type=AVC msg=audit(2021年05月30日 23:53:34.189:536) : avc: denied { connectto } for pid=17046 comm=zabbix_server path=/run/zabbix/zabbix_server_lld.sock scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:system_r:zabbix_t:s0 tclass=unix_stream_socket permissive=1
type=AVC msg=audit(2021年05月30日 23:54:25.224:537) : avc: denied { search } for pid=17028 comm=zabbix_server name=krb5 dev="dm-0" ino=33856248 scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:object_r:krb5_keytab_t:s0 tclass=dir permissive=1
収集した監査ログ内で権限が不足しているアクションを抽出し、カスタムポリシーを追加します。
# grep "denied.*zabbix" /var/log/audit/audit.log | audit2allow -M zabbix_policy
******************** 重要 ***********************
このポリシーパッケージを有効にするには、以下を実行して下さい:
semodule -i zabbix_policy.pp
# semodule -i zabbix_policy.pp
カスタムポリシーを適用し終えたので、強制アクセス制御を有効化するためSELinuxをPermissive
からEnforce
に戻します。
# setenforce Enforcing
WebUIの設定
初期設定ウィザード
WebUIの初期設定を行うため、作業端末のWebブラウザを起動して以下のURLにアクセスします。
http://<ZabbixサーバIPアドレス>/zabbix/
「デフォルトの言語」の箇所に、「日本語 (ja_JP)」を選択します。
言語表示が日本語に切り替わるので、「次のステップ」を押下します。
全ての項目が「OK」になっていることを確認して、「次のステップ」を押下します。
「データベースポート」に5432
を入力します。
DBの認証情報はHashiCorp Vaultから取得することも可能ですが、今回は「プレーンテキスト」を選択してZabbix自身に認証情報の設定を行います。「パスワード」の箇所にDBユーザzabbixのパスワードを入力し、「データベースのTLS暗号化」のチェックを外します。
「次のステップ」を押下します。
WebUIを動作させるPHP-FPMとZabbix Serverが1台のサーバに相乗りしているので、WebUIの接続先Zabbix Server設定の変更は特に不要です。「次のステップ」を押下します。
タイムゾーンとテーマはデフォルトのままとします。
「次のステップ」を押下します。
(参考)
OSのタイムゾーン設定がJSTではない場合、ZabbixのWebUIのみ個別にタイムゾーンを変更できます。これにより、日本時間で障害発生時間の表示が可能です。ただし、OSとWebUIでタイムゾーンが異なると運用が煩雑になります。目的のタイムゾーンをOSに設定し、Zabbix WebUIはそれに合わせることをお勧めします。
「次のステップ」を押下します。
「終了」を押下します。
設定が完了すると、ログイン画面に遷移します。
初期ユーザ名「Admin」、初期パスワード「zabbix」を入力し、「サインイン」を押下します。
ダッシュボードが表示されることを確認し、WebUIの初期設定は完了です。
参考情報
Zabbixインストール時の依存パッケージについて
Zabbixの主要パッケージをインストールするときに要求される依存関係パッケージ一覧を採取しました。
オフライン環境でZabbixをインストールする場合、以下のパッケージファイルを用意しておく必要があります。
Zabbixリポジトリのパッケージは、インターネット上から直接ダウンロードしてサーバに転送しておきます。BaseOS、AppStreamリポジトリのパッケージは、インストールイメージのISOファイルをマウントしてyumリポジトリに登録することでインストールができます。
# dnf install postgresql:13
==========================================================================================================
パッケージ Arch バージョン リポジトリー サイズ
==========================================================================================================
group/moduleパッケージをインストール:
postgresql-server x86_64 13.2-1.module_el8.4.0+701+c3c42fce appstream 5.6 M
依存関係のインストール:
libicu x86_64 60.3-2.el8_1 baseos 8.8 M
libpq x86_64 13.2-1.el8 appstream 197 k
postgresql x86_64 13.2-1.module_el8.4.0+701+c3c42fce appstream 1.5 M
モジュールプロファイルのインストール中:
postgresql/server
モジュールストリームの有効化中:
postgresql 13
トランザクションの概要
==========================================================================================================
インストール 4 パッケージ
ダウンロードサイズの合計: 16 M
インストール後のサイズ: 61 M
Zabbix Agent 2の依存関係にあるパッケージは以下の通りです。
# dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-web-japanese zabbix-apache-conf zabbix-sql-scripts
Zabbix Official Repository - x86_64 12 kB/s | 16 kB 00:01
Zabbix Official Repository non-supported - x86_64 1.0 kB/s | 1.2 kB 00:01
依存関係が解決しました。
==========================================================================================================
パッケージ Arch バージョン リポジトリー サイズ
==========================================================================================================
インストール:
zabbix-apache-conf noarch 5.4.0-8.el8 zabbix 19 k
zabbix-server-pgsql x86_64 5.4.0-8.el8 zabbix 1.4 M
zabbix-sql-scripts noarch 5.4.0-8.el8 zabbix 4.4 M
zabbix-web-japanese noarch 5.4.0-8.el8 zabbix 19 k
zabbix-web-pgsql noarch 5.4.0-8.el8 zabbix 18 k
依存関係のインストール:
OpenIPMI-libs x86_64 2.0.29-1.el8 baseos 508 k
apr x86_64 1.6.3-11.el8 appstream 125 k
apr-util x86_64 1.6.1-6.el8 appstream 105 k
centos-logos-httpd noarch 85.5-1.el8 appstream 74 k
dejavu-fonts-common noarch 2.35-7.el8 baseos 74 k
dejavu-sans-fonts noarch 2.35-7.el8 baseos 1.6 M
fontconfig x86_64 2.13.1-3.el8 baseos 275 k
fontpackages-filesystem noarch 1.44-22.el8 baseos 16 k
fping x86_64 3.16-1.el8 zabbix-non-supported 51 k
gd x86_64 2.2.5-7.el8 appstream 144 k
google-noto-cjk-fonts-common noarch 20190416-1.el8 appstream 20 k
google-noto-sans-cjk-ttc-fonts noarch 20190416-1.el8 appstream 85 M
httpd x86_64 2.4.37-39.module_el8.4.0+778+c970deab appstream 1.4 M
httpd-filesystem noarch 2.4.37-39.module_el8.4.0+778+c970deab appstream 38 k
httpd-tools x86_64 2.4.37-39.module_el8.4.0+778+c970deab appstream 106 k
jbigkit-libs x86_64 2.1-14.el8 appstream 55 k
libX11 x86_64 1.6.8-4.el8 appstream 611 k
libX11-common noarch 1.6.8-4.el8 appstream 158 k
libXau x86_64 1.0.9-3.el8 appstream 37 k
libXpm x86_64 3.5.12-8.el8 appstream 58 k
libjpeg-turbo x86_64 1.5.3-10.el8 appstream 156 k
libtiff x86_64 4.0.9-18.el8 appstream 188 k
libtool-ltdl x86_64 2.4.6-25.el8 baseos 58 k
libwebp x86_64 1.0.0-1.el8 appstream 273 k
libxcb x86_64 1.13.1-1.el8 appstream 229 k
libxslt x86_64 1.1.32-6.el8 baseos 250 k
mailcap noarch 2.1.48-3.el8 baseos 39 k
mod_http2 x86_64 1.15.7-3.module_el8.4.0+778+c970deab appstream 154 k
net-snmp-libs x86_64 1:5.8-20.el8 baseos 824 k
nginx-filesystem noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 appstream 24 k
php-bcmath x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 79 k
php-common x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 661 k
php-fpm x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 1.6 M
php-gd x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 84 k
php-json x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 73 k
php-ldap x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 79 k
php-mbstring x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 580 k
php-pdo x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 122 k
php-pgsql x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 117 k
php-xml x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 appstream 188 k
unixODBC x86_64 2.3.7-1.el8 appstream 458 k
zabbix-web noarch 5.4.0-8.el8 zabbix 3.3 M
zabbix-web-deps noarch 5.4.0-8.el8 zabbix 19 k
弱い依存関係のインストール:
apr-util-bdb x86_64 1.6.1-6.el8 appstream 25 k
apr-util-openssl x86_64 1.6.1-6.el8 appstream 27 k
モジュールストリームの有効化中:
httpd 2.4
nginx 1.14
php 7.2
トランザクションの概要
==========================================================================================================
インストール 50 パッケージ
ダウンロードサイズの合計: 106 M
インストール後のサイズ: 201 M
policycoreutils-python-utilsの依存関係にあるパッケージは以下の通りです。
# dnf install policycoreutils-python-utils
(略)
==========================================================================================================
パッケージ Arch バージョン リポジトリー サイズ
==========================================================================================================
インストール:
policycoreutils-python-utils noarch 2.9-14.el8 baseos 252 k
依存関係のインストール:
checkpolicy x86_64 2.9-1.el8 baseos 348 k
python3-audit x86_64 3.0-0.17.20191104git1c2f876.el8 baseos 86 k
python3-libsemanage x86_64 2.9-6.el8 baseos 127 k
python3-policycoreutils noarch 2.9-14.el8 baseos 2.2 M
python3-setools x86_64 4.3.0-2.el8 baseos 626 k
トランザクションの概要
==========================================================================================================
インストール 6 パッケージ
ダウンロードサイズの合計: 3.6 M
インストール後のサイズ: 11 M
(略)
参考文献
Download and install Zabbix
How to Install Zabbix 5.0 or 5.4 on CentOS 8 [Step-by-Step]
SELINUX の使用