CentOS Stream 9 への Zabbix 7 インストールガイド:実践的なインフラ監視の構築

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

「深夜のサーバーダウン」という悪夢

インフラエンジニア(SysAdmin)なら、このシナリオは馴染み深いものでしょう。深夜2時、電話が鳴り止まない。システムはダウンし、顧客からはクレームが届く。原因を突き止めるのに1時間費やした結果、単なるディスク容量不足(disk full)だったという結末。些細なミスですが、適切なアラートがなければ大きな損失を招きます。

CentOS 8 のサポート終了(EOL)後、私は CentOS Stream 9 や AlmaLinux に移行しました。嬉しいことに、最新の LTS 版である Zabbix 7 はこのプラットフォームで非常にスムーズに動作します。1秒間に数千もの値(NVPS)を処理できる Zabbix 7 は、単なるリソース監視ツールではなく、安心して眠るための信頼できる「目」となってくれます。

クイックスタート:5分でデプロイ

コマンドラインに慣れており、すぐにシステムを稼働させたい場合は、以下のコマンドを実行してください。注意:root または sudo 権限で実行してください。

# 1. Zabbix 7 公式リポジトリを追加
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/release/centos/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm
dnf clean all

# 2. 必要なパッケージをインストール
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2 -y

# 3. MariaDB のインストールと有効化
dnf install mariadb-server -y
systemctl enable --now mariadb
mysql_secure_installation

システム設定の詳細手順

ステップ 1:専用データベースの作成

Zabbix は数百万ものメトリクスを保存するために強力なデータベースを必要とします。RHEL 系エコシステムで安定性の高い MariaDB や MySQL 8 を選択しました。重要な注意点として、監視アイテムの英大文字・小文字を区別するために、Zabbix では照合順序(collation)に utf8mb4_bin を指定する必要があります。

mysql -u root -p

create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'あなたのパスワード';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;

次に、初期データをインポートします。このプロセスは、SSD の読み書き速度にもよりますが、通常 30〜60 秒ほどかかります:

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

完了後、セキュリティのために関数の作成権限をオフにすることを忘れないでください:

mysql -u root -p
set global log_bin_trust_function_creators = 0;
quit;

ステップ 2:Zabbix Server の設定

次に、Zabbix Server にデータベース情報を設定します。設定ファイルを開きます:

vi /etc/zabbix/zabbix_server.conf

DBPassword= の行を探し、前のステップで作成したパスワードを入力します。DBUser など他のパラメータはデフォルトで zabbix になっているため、変更の必要はありません。

ステップ 3:Web サーバーとして Nginx をインストール

重い Apache ではなく、メモリを節約できる Nginx を優先します。Zabbix 7 には Nginx 用の設定テンプレートが用意されているので、少し調整するだけで済みます:

vi /etc/nginx/conf.d/zabbix.conf

listen 80; の行のコメントアウトを解除し、server_name を IP アドレスまたはドメイン名に変更します。これにより、Nginx がどのリクエストを受け入れるべきかを正確に認識できるようになります。

SELinux とファイアウォールの壁を越える

多くの人が SELinux を完全に無効化してしまいがちですが、本番環境では大きなセキュリティリスクとなります。代わりに、Zabbix に必要な権限のみを付与し、nftables を使いこなすことでセキュリティを強化しましょう:

# Nginx と Zabbix のネットワーク接続を許可
setsebool -P httpd_can_network_connect 1
setsebool -P zabbix_can_network 1

# ファイアウォールで必要なポートを開放
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-port={10050,10051}/tcp
firewall-cmd --reload

最後に、すべてのサービスを再起動して設定を適用します:

systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
systemctl enable zabbix-server zabbix-agent2 nginx php-fpm

自動メール通知の設定

ずっとダッシュボードを監視し続けるわけにはいかないので、SMTP を設定しましょう。ブラウザで http://your-ip にアクセスします(ユーザー名: Admin / パスワード: zabbix)。

  1. Alerts(アラート)→ Media types(メディアタイプ) に進み、Email を選択します。
  2. SMTP パラメータを入力します(例: smtp.gmail.com、ポート 587)。
  3. Users(ユーザー) タブで、障害発生時に通知を受け取る個人のメールアドレスを Admin ユーザーに追加します。

なぜ Zabbix Agent 2 を使うべきなのか?

Zabbix Agent 2 は Go 言語で完全に書き直された大きな進化版です。並列データ収集(マルチスレッド)をサポートしており、旧バージョンに比べて監視対象サーバーの負荷を大幅に軽減します。Docker や Kubernetes などのモダンなアプリケーションを監視する場合、Agent 2 は必須の選択肢です。

大規模システム向けの最適化のヒント

  • DB ユーザー管理: Zabbix データベースに root ユーザーを絶対に使用しないでください。
  • PHP の調整: 100 ノードを超えるシステムでは、/etc/php-fpm.d/zabbix.confmemory_limit を 512M に引き上げてください。
  • テンプレートの活用: Zabbix 7 には豊富なテンプレートライブラリがあります。Cisco、Windows、Linux などの標準モデルが用意されているので、手動でアイテムを作成する手間を省きましょう。
  • ディスク I/O の注意: デバイス数が 500 を超える場合は、ヒストリデータのクエリを最適化するために TimescaleDB の導入を検討してください。

CentOS Stream 9 で Zabbix 7 を使いこなし、サーバーのパフォーマンスを最適化することで、インフラ管理を完全にコントロール下に置くことができます。私の経験では、このシステムにより受動的なトラブル対応の時間を最大 80% 削減できました。もし 「Zabbix server is not running」 というエラーに遭遇した場合は、すぐに /var/log/zabbix/zabbix_server.log のログを確認して対処してください。

Share: