採用情報

お問い合わせ

BLOG

Zabbix テック・ラウンジ

2024 年 12 月 10 日

Zabbix 7.0 の新機能 - Zabbix Proxy HA(構築・設定編)

前回 は、Zabbix / MIRACLE ZBX 7.0 の新機能である Zabbix Proxy HA の概要についてご紹介しました。
今回は実際に Zabbix Proxy を構築し、障害を模した動作をさせて HA 化させた Zabbix Proxy の動作を確認してみましょう。

Zabbix Proxy HA の構築

Zabbix / MIRACLE ZBX 7.0 における Zabbix Proxy の HA 構築手順について紹介します。といっても HA 機能は Zabbix Server の WebUI から行うため、各単体の Zabbix Proxy の構築手順は今までと大差ありません。今回は 2024 年 5 月にリリースされた AlmaLinux 9.4 上に 2024 年 7 月にリリースされた MIRACLE ZBX 7.0 という組み合わせで Zabbix Proxy を 3 台構築して HA 化します。
なお、同様に AlmaLinux 9.4 + MIRACLE ZBX 7.0 の組み合わせで Zabbix Server を構築しています。今回は Zabbix Server 構築手順は割愛します。

Zabbix Proxy の構成図

1. OS インストール

ソフトウェアの選択では「最小限のインストール」と「標準」の 2 つを選択すれば問題ありません。その他に必要な環境、ソフトウェア等があれば別の選択肢を選んでも大丈夫です。

Almalinux 9.4 のイントール画面

ホスト名・IP アドレス・ディスク構成等を設定します。ディスクサイズは OS 領域も含むため 40 ~ 60 GB 程度あれば十分ですが、こちらも導入環境にあわせて調整してください。
最後にユーザの作成ですが、今回は miracle ユーザを管理者として作成し root ユーザにはパスワードを設定せず全て sudo で実行することを前提とします。
インストールが終わると再起動を促されますので再起動します。

2. OS 初回起動時の確認・設定等

初回起動後は miracle ユーザで SSH でログインして、必要な設定等を行います。内容は割愛します。
Zabbix / MIRACLE ZBX 7.0 の Zabbix Proxy は SELinux が有効状態でも動作しますので、今回は Enforcing ( 有効 ) のまま進めていきます。

3. MIRACLE ZBX 7.0 用リポジトリの追加

以下のコマンドで、MIRACLE ZBX 7.0 用の dnf リポジトリを追加します。

$ sudo dnf install https://ftp.miraclelinux.com/zbx/7.0/miracle-zbx-release-7.0-1.noarch.rpm

4. SELinux 用パッケージの導入・設定

今回は SELinux を Enforcing ( 有効 ) のまま進めるため miracle-zbx-selinux パッケージを導入します。SELinux を無効化している環境では本手順は必要ありません。

$ sudo dnf install miracle-zbx-selinux

miracle-zbx-selinux パッケージでは不要なブール値が有効になるのを防ぐためブール値の自動設定を行っていません。そのため手動で設定します。
Zabbix Server / Zabbix Proxy 用にブール値 zabbix_can_network を有効にします。

$ sudo setsebool -P zabbix_can_network on

5. ファイアウォールの設定

今回はパッシブモードのプロキシで進めます。そのため、Zabbix Server からの 10051/tcp を受信する必要があります。firewalld には標準で Zabbix Server 用の通信ポート設定が登録されています。Zabbix Proxy でも同じポートを利用するため zabbix-server をサービス登録すれば 10051/tcp が解放されます。もちろん --add-port=10051/tcp と直接指定しても問題ありません。運用等でわかりやすい指定方法を採用すると良いでしょう。
firewalld の zone が異なる複数のネットワークインターフェースが存在している場合は --zone=<zone_name> で zone も指定します。

$ sudo firewall-cmd --permanent --add-service=zabbix-server
$ sudo firewall-cmd --reload

6. MIRACLE ZBX Proxy のインストール

Zabbix / MIRACLE ZBX Proxy の動作にはデータベースが必要です。今回は MariaDB を使用し、Zabbix Proxy が稼働するサーバと同じサーバ上で稼働させます。以下のコマンドで MariaDB と MIRACLE ZBX プロキシおよび自身を監視するための Zabbix Agent をインストールします。
次項で MariaDB を設定するため、MariaDB は自動起動設定をしておきます。

$ sudo dnf install mariadb-server miracle-zbx-proxy-mysql miracle-zbx-sql-scripts miracle-zbx-agent
$ sudo systemctl enable --now mariadb.service

7. MariaDB の設定

MariaDB に Zabbix Proxy 用のデータベースとユーザを作成します。

データベース名 zabbix_proxy
Zabbix Proxy 用ユーザ名 zabbix
パスワード zabbix
データベース文字コード utf8mb4
参照順序 utf8mb4_bin

紹介記事のため簡素なパスワード、MariaDB の root ユーザのパスワード設定を行っていません。実際の構築では mariadb-secure-installation の実行、パスワードの設定・複雑化などを行ってください。

$ sudo mysql -u root
MariaDB [(none)]> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
MariaDB [(none)]> create user zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix@localhost;
MariaDB [(none)]> set global log_bin_trust_function_creators = ON;
MariaDB [(none)]> quit

続いて MIRACLE ZBX の Zabbix Proxy 初期データをインポートします。

$ zcat /usr/share/miracle-zbx-sql-scripts/mysql/schema.sql.gz | mysql -u zabbix -p zabbix_proxy

log_bin_trust_function_creators を無効にします。

$ sudo mysql -u root
MariaDB [(none)]> set global log_bin_trust_function_creators = OFF;
MariaDB [(none)]> quit

8. Zabbix Proxy の設定

Zabbix Proxy の設定ファイル /etc/zabbix/zabbix_proxy.conf を編集します。

$ sudo cp -p /etc/zabbix/zabbix_proxy.conf{,.org}
$ sudo -e /etc/zabbix/zabbix_proxy.conf

以下のパラメータを変更します。

  • ProxyMode
    • 今回はパッシブモードで動作させるため ProxyMode=1 を記述します。
  • Server
    • Zabbix Server の IP アドレス ( または DNS 名 ) を記述します。
  • Hostname
    • Zabbix Proxy のホスト名を記述します。Zabbix Server の WebUI でプロキシを設定する際に「プロキシ名」として参照されます。
  • DBPassword
    • MariaDB に設定した zabbix ユーザのパスワードを記述します。

この編集をコマンドで記述すると以下になります。以下は blog-zbx-proxy01 の場合です。Hostname の箇所をそれぞれのホスト名にすることで、他のサーバでも実行できます。

$ sudo sed -i -e "s/^# ProxyMode=0$/# ProxyMode=0\n\nProxyMode=1/g" \
  -e "s/^Server=127.0.0.1$/Server=192.168.10.254/g" \
  -e "s/^Hostname=Zabbix proxy$/Hostname=blog-zbx-proxy01/g" \
  -e "s/^# DBPassword=$/# DBPassword=\n\nDBPassword=zabbix/g" \
  /etc/zabbix/zabbix_proxy.conf

設定の変更が完了したら 3 台とも起動します。

$ sudo systemctl enable --now zabbix-proxy.service

9. Zabbix Agent の設定

自分自身を監視するための Zabbix Agent の設定ファイル /etc/zabbix/zabbx_agent.conf を編集します。今回は割愛します。

10. プロキシグループの作成

Zabbix Server の WebUI にアクセスします。左側ペインで「管理」→「プロキシグループ」を選択し、右上の「プロキシグループの作成」をクリックしてプロキシグループを作成します。

 プロキシグループの作成画面

 新規プロキシグループの追加画面

指定できるパラメータは以下の通りです。

パラメータ名 概要
名前 プロキシグループの名前を入力します。
フェイルオーバーの期間 フェイルオーバーが実行されるまでの時間を秒単位で入力します。
標準値は 1m ( 1 分 ) です。指定可能範囲は 10s ( 10 秒 ) 〜 15m ( 15 分 ) です。
ユーザマクロや時間のサフィックス ( s: 秒と m: 分 ) がサポートされます。
最小のプロキシ数 プロキシグループをオンライン状態と判断するために必要となる Zabbix Proxy の最小数を入力します。標準値は 1 です。指定可能範囲は 1 〜 1000 です。
ユーザマクロをサポートしています。
説明 プロキシグループの説明を入力します。

11. Zabbix Proxy の追加

Zabbix Server の WebUI にアクセスします。左側ペインで「管理」→「プロキシグループ」を選択し、右上の「プロキシグループの作成」をクリックしてプロキシグループを作成します。

 プロキシグループの作成画面

 新規プロキシ追加画面

指定できるパラメータは以下の通りです。今回は 3 台の Zabbix Proxy を登録します。

パラメータ名 概要
プロキシ名 Zabbix Proxy の名前を入力します。
各 zabbix_proxy.conf の Hostname パラメータと同じにする必要があります。
プロキシグループ 所属するプロキシグループを選択します。空欄の場合はプロキシグループに所属しない単独の Zabbix Proxy となります。
今回の構成では 10. で作成したプロキシグループを選択します。
アクティブエージェントのアドレス

この Zabbix Proxy における監視対象のアクティブエージェントまたは zabbix_sender が接続する IP アドレスと port を入力します。
今回の構成では各 Zabbix Proxy の IP アドレスと 10051 ポートを入力します。
このパラメータはプロキシグループを選択している場合のみ表示されます。

プロキシモード

Zabbix Proxy の動作モードを選択します。

今回の構成では「パッシブモード」を選択します。
インターフェース Zabbix Proxy の IP アドレスを入力します。
説明 Zabbix Proxy の説明を入力します。
(その他) 今回は「暗号化」タブや「タイムアウト」タブの設定は省略します。

12. 監視対象ホストの登録

Zabbix Server の WebUI にアクセスします。左側ペインで「データ収集」→「ホスト」を選択し、通常と同様に監視対象ホストを登録していきます。

 ホストの作成画面

 新しいホストの作成画面

通常のホストの登録との違いは、「監視するもの」で「プロキシグループ」を選択し、作成したプロキシグループ名を選択することです。

13. 登録状況の確認

再度、プロキシ設定やホスト設定の一覧画面を表示し、プロキシや監視対象ホストが正常に登録されていることを確認します。

3 台の Zabbix Proxy に 60 台の監視対象ホストを登録した例

 プロキシ設定一覧画面

 ホスト設定の一覧画面

Zabbix Proxy HA の機能を試してみる

では、構築した Zabbix Proxy HA 環境で 1 台の Zabbix Proxy を停止させ、残り 2 台の Zabbix Proxy に自動再割り当てが実行されることを確認してみましょう。

1. 状態確認 ( 疑似障害発生前 )

Zabbix Server の WebUI のプロキシ設定から現在の分散状況を確認しておきます。

 プロキシ設定画面

2. 疑似障害の発生

今回は blog-zbx-proxy03 を停止させてみます。以下のコマンドで、Zabbix Proxy サービスを停止させます。

blog-zbx-proxy03 $ sudo systemctl stop zabbix-proxy.service

3. 状態確認 ( 疑似障害発生中 )

プロキシ設定にて blog-zbx-proxy03 がオフラインになり、それまで blog-zbx-proxy03 に割り当てられていた監視対象ホストが残り 2 つの Zabbix Proxy に自動で再割り当てされていることが確認できます。
また、アイテム数と要求 VPS ( nvps ) が増加していることがわかります。本構成の場合ではプロキシグループの最小のプロキシ数を 1 台としているため、60 台全ての監視を担えるだけのリソースが 1 台の Zabbix Proxy に要求されます。

 プロキシ設定画面

4. 疑似障害の復旧

停止させた blog-zbx-proxy03 を復旧させます。以下のコマンドで、Zabbix Proxy サービスを開始させます。

blog-zbx-proxy03 $ sudo systemctl start zabbix-proxy.service

5. 状態確認 ( 疑似障害復旧後 )

blog-zbx-proxy03 がオンラインになり、再度 3 台の Zabbix Proxy に自動再割り当てされたことが確認できます。なお、障害発生前の各 Zabbix Proxy への割り当てと障害復旧後の各 Zabbix Proxy の割り当ては異なっています。

 プロキシ設定画面

このように Zabbix / MIRACLE ZBX 7.0 の標準機能のみで Zabbix Proxy の HA 化が出来ることが確認出来ました。

Zabbix Proxy の落とし穴

ここまで紹介してきた Zabbix Proxy ですが、弊社の ZBX 構築等のコンサルティングサービスでは、サーバ・ネットワーク構成等の制約がある場合を除き Zabbix Proxy は積極的には採用していません。

監視対象サーバが多数あるような大規模環境で Zabbix Proxy を採用することで、監視データを収集する Zabbix Server の監視処理の負荷は Zabbix Proxy によって軽減されます。しかしながら、収集したデータは最終的に Zabbix Server のデータベース (MariaDB や PostgreSQL) に蓄積されることに変わりありません。

構築初期は Zabbix Server のデータベースのデータ蓄積が少なく監視対象を正常に監視できるような環境でも、年数が経過してデータが蓄積されると Zabbix Server のデータベースが必要とする CPU や DISK I/O リソースを無視できない状況となります。もちろん事前にしっかりサイジングして監視設計と運用を行えば問題はありませんが、Zabbix Proxy で収集処理が分散され負荷が軽減されていることで、当初の想定より監視対象を増やしてしまい数年後にデータがパンクしたり、データベースの高負荷で障害発報の遅延が発生してまうといった状態に陥りやすくなります。

Zabbix Proxy を採用する場合は、監視対象数や監視データの保存日数といった監視設計とサイジングを事前にしっかり行い、日々の運用においても Zabbix Server の負荷やディスク使用量等をより注視して監視することが重要です。

おわりに

以上、ここまで Zabbix / MIRACLE ZBX 7.0 の新機能である Zabbix Proxy HA の概要や構築方法などについて紹介しました。

標準機能のみで Zabbix Proxy の冗長化ができる便利な Zabbix Proxy HA ですが、シングル構成の Zabbix Proxy も含め注意しなければならない点も多くあります。注意・制限等もありますが、大規模な監視環境では非常に便利な機能です。是非、正しい設定とサイジングで Zabbix Proxy HA 機能を活用しましょう。

本記事に関連するリンク
Zabbix 7.0 新機能調査報告書 無料ダウンロード
CentOS 7 延長サポートサービス
デジタルトランスフォーメーションのための電子認証基盤 iTrust
SSL/TLS サーバー証明書 SureServer Prime