- 公開日
- 最終更新日
AWSでzabbix監視システムを作ってみる
この記事を共有する
目次
はじめに
パーソル&サーバーワークスの横山です。
Amazon CloudWatch(以下、CloudWatch)だと AWS リソースしか監視できないため、
「システム全体を横断して監視したい」
という場面は意外と多いのではないでしょうか。
そこで今回は、AWS 上に Zabbix サーバーを構築し、AWS 以外も含めた統合監視を行うことを目的に、構築手順をまとめていきます。
前提
Amazon EC2(以下、EC2)1台に Server + Web + DB をすべて詰め込む構成については、
AWS Marketplace に便利なものが存在します。
サポート込みで利用する場合はこちらも良い選択肢ですが、今回は構成理解も兼ねて自前で構築します。
そのため、
- EC2:Zabbix Server + Web
- RDS:Database
という構成を採用します。
バージョン選定
業務利用を想定し、最も選択される可能性が高い Zabbix 7.0 LTS を利用します。
Zabbix 7.0 LTS は 2029年6月 まで限定サポートが提供されるため、
OS には Amazon Linux 2023(Amazon Linux 2023.10.20260120)を選択します。
Amazon Linux 2023 もメンテナンス終了が 2029年6月30日 のため、サポート期間の観点でも十分です。
(Amazon Linux 2 はサポート期間が短かったため、以前は RHEL や CentOS を選択することが多かったです)
EC2インスタンスの設計
Zabbix の推奨スペックは公式ドキュメントに記載されていますが、今回は検証用途のため割り切って t4g.micro を利用します。(Armベースの方が20~30%程度安いので)
- DB は RDS 側にオフロード
- 監視対象は 1〜2 ホスト程度
という前提のため、この程度のインスタンスサイズでも問題ないと判断しています。
業務利用の際は、監視対象台数や保持データ量に応じて、適切なインスタンスタイプを選択してください。
セキュリティグループについては、
- 80 / 443 を開放(アクセス元は踏み台サーバーや社内ネットワークのみに限定)
を基本とします。
その他のポートは必要に応じて追加しますが、
Zabbix Agent(Active)経由のみで監視する場合、EC2 側で追加ポートを開ける必要はありません。
RDSの設計
Database には Amazon Aurora(以下、Aurora)PostgreSQL Compatible 17系(Serverless v2) を利用します。
検証用途のため最低 ACU を 0 に設定し、未使用時はスケールダウンする構成としています。
業務利用の場合は監視基盤という性質上、
- 最低 ACU を 0.5 以上に設定し常時起動状態を維持
としておく方が無難でしょう。
セキュリティグループは、
- EC2 インスタンスからのみ TCP 5432 を許可
とします。
構築手順
前提
① 参考にしているのは Zabbix 公式ドキュメントです。
ただし公式手順は x86 アーキテクチャ前提のため、Arm ベース(Graviton / g系インスタンス)では利用するパッケージが一部異なります。
② 本記事では root ユーザーで作業しています。
環境に応じて sudo を付与するなど適宜読み替えてください。
1.パッケージの導入
Arm ベース向けの Zabbix リリースパッケージを導入します。
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/amazonlinux/2023/aarch64/zabbix-release-latest-7.0.amzn2023.noarch.rpm
続いて、Zabbix 各種パッケージと PostgreSQL クライアントをインストールします。
(Aurora PostgreSQL に接続するため postgres クライアントも入れています)
dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-apache-conf zabbix-sql-scripts zabbix-agent2 zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql zabbix-web-japanese postgresql17
2.証明書バンドルの導入
Aurora PostgreSQL へ SSL 接続するため、AWS の CA 証明書を取得します。
mkdir -p /certs
cd /certs
curl -O https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
確認:
ls -l /certs/global-bundle.pem
-rw-r--r--. 1 root root 165408 Jan 29 09:42 /certs/global-bundle.pem
補足:
/etc/pki/ca-trust/source/anchors/ に配置して update-ca-trust を実行し、OS の信頼ストアに登録しても問題ありません。
3.Auroraへのデータ投入
まず後続作業を簡単にするため、Aurora のライターエンドポイントを環境変数に設定します。
export RDSHOST="<ライターエンドポイント>"
Zabbixユーザー作成
検証用途のため、ユーザー名・パスワードともに zabbix としています。
psql "host=$RDSHOST port=5432 dbname=postgres user=zabbix password=zabbix sslmode=verify-full sslrootcert=/certs/global-bundle.pem" <<'SQL'
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'zabbix') THEN
CREATE ROLE zabbix LOGIN PASSWORD 'zabbix';
END IF;
END$$;
SQL
zabbix ユーザーに CREATEDB 権限を付与
zabbixユーザーにCREATEDB権限を付与します
psql "host=$RDSHOST port=5432 dbname=postgres user=postgres password=postgres sslmode=verify-full sslrootcert=/certs/global-bundle.pem" -c "ALTER ROLE zabbix CREATEDB;"
zabbix データベース作成
zabbixユーザーでzabbix用データベースを作成していきます
psql "host=$RDSHOST port=5432 dbname=postgres user=zabbix password=zabbix sslmode=verify-full sslrootcert=/certs/global-bundle.pem" -c "CREATE DATABASE zabbix OWNER zabbix ENCODING 'UTF8';
public スキーマへの権限付与
zabbix用データベースに対してzabbixユーザーにスキーマ権限をつけておきます
psql "host=$RDSHOST port=5432 dbname=zabbix user=zabbix password=zabbix sslmode=verify-full sslrootcert=/certs/global-bundle.pem" <<'SQL'
Zabbix 標準スキーマの投入
zabbixが用意しているスキーマ投入スクリプトを利用してスキーマを流していきます
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | psql "host=$RDSHOST port=5432 dbname=zabbix user=zabbix password=zabbix sslmode=verify-full sslrootcert=/certs/global-bundle.pem"
4.自動起動設定
Amazon Linux 2023 では SELinux / firewalld がデフォルト無効のため、Zabbix 関連サービスのみ自動起動を設定します。
systemctl enable zabbix-server.service zabbix-agent2.service httpd.service php-fpm.service
systemctl restart zabbix-server.service zabbix-agent2.service httpd.service php-fpm.service
5.zabbixへのアクセス
http://
データベースホストにAuroraのエンドポイントを入力し、パスワードを入力します。またデータベースポートは設定したものを入れてください。(デフォルト5432を今回使ってます)
日本のタイムゾーンを設定し、サーバー名をつけます(zabbix管理上のわかりやすい名前で良いです)

お疲れ様でした。これで簡単なzabbix監視システムが構築できました。後はルールを決めたり監視対象にZabbixAgentを入れて設定するとか、別VPCのマシンを監視したいならZabbixProxyを入れるとか色々できます。
まとめ
慣れれば割とすぐ作れるのでCloudWatchで不足した情報を取りたいときはZabbixの導入をおすすめします。
この記事は私が書きました
横山 俊成
記事一覧こんにちは!サービスGの横山です。 オンプレ/クラウド問わずインフラエンジニアとしてキャリアを積んできました。 「面倒なことは自動化したい」という精神のもと、効率的なインフラ構築・運用を目指しています。 趣味は ゲームです。夢は会社でポケモンユナイトのチームを組んで企業リーグに出場し優勝すること 「どうすればもっと楽ができるか?」を常に考えながら、日々技術を磨いています! よろしくお願いします! 🚀