Zabbix 5.4 インストール手順(CentOS Stream 8 / Apache2.4 / PHP-FPM7.2 / PostgreSQL13)

はじめに

2021年5月17日、Zabbix 5.4がリリースされました。以下公式サイトに主な変更内容がまとめられています。

What’s news in 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 の使用

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です