Ubuntu 24.04にZabbix 7.0 LTSを構築する方法
Ubuntu 24.04にZabbix 7.0 LTSを導入します。リポジトリ追加、MySQLスキーマのインポート、nginx設定、agent2の接続まで、頻出するエラーの直し方も解説します。
構築するもの
単一の Ubuntu 24.04 VPS 上で、Zabbix 7.0 LTS のフルスタックを構築します。これには、ポーリングとアラートを行う zabbix-server デーモン、すべてのメトリクスを保存する MariaDB/MySQL データベース、nginx で提供する PHP フロントエンド、そしてこのサーバー自体からメトリクスを収集する zabbix-agent2 が含まれます。起動後に2台目のサーバーを指定してテンプレートを割り当てると、ディスクが満杯になった場合やサービスが停止した場合に、すぐメールを受け取れます。
Zabbix はステータスページ用のツールよりも大規模です。テンプレート、トリガー、エスカレーション、履歴保持機能を備えた、本格的な時系列システムです。問題のほとんどは、データベーススキーマのインポート、サーバーが実際に読み取るデータベースパスワードの設定、nginx 設定で2行のコメントを解除する作業という、飛ばされがちな3つの手順で発生します。これらを正しく行えば、残りはウィザードで完了します。稼働状態の確認と共有可能なステータスページだけが必要な場合は、軽量な Uptime Kuma ステータスモニターで1つのコンテナ内に構築できます。多数のホストに対してメトリクス単位のしきい値とエスカレーションを設定する場合に、Zabbix の規模が役立ちます。
7.0 LTS 系列を使用してください。server、frontend、agent2、スキーマのバージョンが連動しており、数年間にわたってセキュリティ修正が提供されます。以下のリポジトリファイル名をコピーする前に、公式 Zabbix ダウンロードページを確認してください。latest リリースパッケージは常に最新の 7.0 ポイントリリースを参照しますが、特定の 7.0-N ビルドに固定する場合は、そのファイル名もページに記載されています。ここに示すその他のコマンドは、7.0 系列全体で変わりません。
サイズ、ポート、前提条件
root または sudo を使用できる、初期状態の Ubuntu 24.04 KVM VPS を前提とします。リソース要件は現実的に見積もってください。1台のサーバーで server、database、nginx、PHP を実行し、少数のホストを監視する場合、現実的な最低ラインは RAM 2 GB と vCPU 2個です。RAM 1 GB の環境でも起動しますが、履歴が増えると database のメモリが不足します。数十台を超える場合は RAM 4 GB を計画し、100台を超える場合は database を専用サーバーに移してください。ディスク使用量は収集するアイテム数と履歴の保持期間に応じて増加します。開始時点では数 GB を確保し、housekeeper が設定した保持期間に従って古いデータを削除します。
ポートは、frontend 用に 80 と 443 を使用します。公開することも、自分の IP のみに制限することもできます。server は、active agent がデータを送信するために TCP 10051 で待ち受けます。各 agent は、server がポーリングするために TCP 10050 で待ち受けます。前段に firewall がある場合は、公開するポートだけを開放してください。frontend 用の DNS A レコードも用意する価値があります。実際の証明書を設定する必要があるためです。Zabbix box は、実行している他のすべてのサービスを監視するため、後付けで追加するのではなく、2026年に運用する価値のある、より広い self-hosting 環境の一部として配置します。
手順 1、公式の Zabbix 7.0 リポジトリを追加する
zabbix-release パッケージは、システムに apt のソースリストと署名キーを配置します。これをインストールしてから、インデックスを更新します。
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt updatewget が 404 Not Found を返す場合は、ファイル名が変更されています。Zabbix のダウンロードページを開き、Ubuntu 24.04 を選択して、表示された正確な zabbix-release URL をコピーします。正常な apt update には repo.zabbix.com 行が表示され、キーに関する警告は表示されません。The following signatures couldn't be verified because the public key is not available は、リリースパッケージがキーをインストールしなかったことを示します。そのため、dpkg -i を再実行してから、もう一度更新します。
手順 2: server、frontend、agent をインストールする
MySQL 向けにビルドされた server、PHP frontend、nginx 設定、SQL schema ファイル、agent2 をまとめてインストールします。
sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2zabbix-server-mysql は MySQL/MariaDB 用にコンパイルされた server です。PostgreSQL を使用する場合は、代わりに zabbix-server-pgsql をインストールし、以下のデータベース手順を調整してください。zabbix-sql-scripts には次にインポートする schema が含まれています。7.0 では別パッケージであり、これをインストールし忘れると、後でインポート先のパスが見つからなくなります。これらのパッケージはいずれもデータベースエンジンをインストールしないため、サーバーに MariaDB がまだない場合は、ここでインストールしてください。
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadbStep 3、適切な文字セットでデータベースを作成する
Zabbixでは照合順序が厳密に指定されます。データベースはutf8mb4で、utf8mb4_binを使用している必要があります。そうでない場合、インポートは途中で外部キーエラーになり、停止します。sudo mysqlでrootシェルを開き、次を実行します。
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost;
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;このSET GLOBAL行は、インポート用の安全策です。Zabbixスキーマはストアドファンクションを作成します。バイナリロギングが有効な状態では、zabbixのような非SUPERアカウントはそれらを作成できません。MySQL 8ではバイナリロギングがデフォルトで有効です。一部のマネージドMariaDBビルドでも有効ですが、標準のMariaDBでは有効ではありません。バイナリロギングが有効なサーバーでこのフラグを省略すると、インポートはERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabledで停止します。rootで設定するとこの問題を回避できます。インポート後に無効に戻します。パスワードは正確に記録してください。サーバー設定では、同じ文字列を1バイト単位で指定する必要があります。
Step 4, スキーマをインポートする(省略されがちな手順)
新しい frontend が読み込まれない最も一般的な原因は、作成したデータベースが空であることです。zabbix-sql-scripts に含まれるスキーマをデータベースに読み込みます。
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -p zabbixzabbix のパスワードを求められます。小規模な VPS では30~60秒かかり、成功しても何も表示されません。ここでは何も表示されないのが正しい動作です。zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory は zabbix-sql-scripts パッケージがインストールされていないことを示します(Step 2 に戻ってください)。ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' は、Step 3 で設定したパスワードまたは grant が正しくないことを示します。処理が完了したら、安全フラグを無効に戻します。
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" で読み込みを確認します。doesn't exist エラーではなく数値が表示されれば、スキーマは読み込まれています。
Step 5、zabbix_server.conf でデータベースのパスワードを設定する
サーバーは /etc/zabbix/zabbix_server.conf からデータベースの認証情報を読み取ります。設定が必要なのはパスワードだけです。DBName と DBUser はすでに zabbix がデフォルト値になっています。# DBPassword= の行のコメントを解除して設定します。
DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-passwordパスワードは、Step 3 で設定したものと1バイト単位で完全に一致している必要があります。空の DBPassword または誤った DBPassword は、後で表示される「Zabbix server is not running」バナーの主な原因です。デーモンは起動しますが、ログインに失敗して終了します。画面には何も表示されず、ログだけに記録されます。
ステップ 6、nginxをフロントエンドに向ける
zabbix-nginx-confパッケージは/etc/zabbix/nginx.confにサーバーブロックをインストールし、/etc/nginx/conf.d/zabbix.confからnginxにリンクします。ただし、listen行とserver_name行はコメントアウトされた状態で提供されるため、編集するまでnginxはZabbixのコンテンツを提供しません。
server {
listen 80;
server_name zabbix.example.com;
...
}ドメインを使用します。DNSをまだ設定していない場合は、サーバーのパブリックIPを使用します。注意点が2つあります。Ubuntuのデフォルトのnginxウェルカムサイトもport 80で待ち受け、デフォルトサーバーとして設定されています。そのため、名前が一致しないリクエストではこのサイトが選択されます。削除しないと誤ったページが表示されます: sudo rm -f /etc/nginx/sites-enabled/default。また、何らかの理由で/etc/nginx/conf.d/zabbix.confが存在しない場合(既知のパッケージング上の問題です)は、sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.confで手動作成します。その後、テストしてreloadします。
sudo nginx -t
sudo systemctl reload nginxnginx -tはtest is successfulを出力します。nginx: [emerg] a duplicate default server for 0.0.0.0:80が出力される場合は、デフォルトサイトとZabbixのブロックがどちらもdefault_serverを要求しています。デフォルトサイトを削除して、もう一度テストします。より一般的なのは、conflicting server nameの警告だけでテストに合格するのに、ブラウザーには通常のウェルカムページが表示されるケースです。これは名前が一致しないためデフォルトサイトが選択された状態で、デフォルトサイトを削除すれば解決します。
手順 7、サービスを起動して有効化する
サーバー、エージェント、PHP-FPM、nginxを起動し、再起動後も自動的に起動するように有効化します。
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmUbuntu 24.04にはPHP 8.3が含まれているため、FPMサービスはphp8.3-fpmです。zabbix-nginx-confパッケージは、同じmasterの下でフロントエンドを実行します。サーバーが起動し、その後も稼働していることを確認します。
sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log正常なログは、サーバーが起動し、housekeeper、poller、trapperのプロセスが実行中であることを示して終了します。[Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost'が表示された場合は、手順 5のDBPasswordが一致していません。値を修正して再起動します。[Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist行は、手順 4のスキーマのインポートを省略したことを示します。そのため、サーバーが読み取る対象がありません。
手順 8、Web セットアップウィザードを完了する
http://your-domain-or-ip にアクセスします。Zabbix セットアップウィザードが開きます。次の手順を実行します。
- Welcome で、言語を選択します。
- Check of pre-requisites では、すべての行が最初から OK になっているはずです。パッケージ化された
/etc/zabbix/php-fpm.confプールによって、Zabbix に必要な PHP の上限値がすでに引き上げられています。 - Configure DB connection では、データベースの種類に MySQL、ホストに
localhost、ポートに0(デフォルトのポートまたはソケットを意味します)、データベース名にzabbix、ユーザーにzabbix、パスワードに手順 3 のパスワードを指定します。認証情報が正しくない場合やスキーマがない場合は、ここで検出されます。 - Settings では、Zabbix server のホスト
localhostとポート10051をそのまま使用し、インストール名を指定します。 - Pre-installation summary を確認してから Install をクリックします。ウィザードによって
/etc/zabbix/web/zabbix.conf.phpが書き込まれます。 - Finish で、
Admin(大文字の A)としてログインし、zabbixのパスワードを使用します。その後、すぐに Users でパスワードを変更します。
ウィザードに Cannot create the configuration file と表示された場合、Web ユーザーは /etc/zabbix/web/ に書き込めません。提示された zabbix.conf.php をダウンロードし、sudo で手動でそこに配置してから、Finish をクリックします。
ステップ9、ローカルホストを追加してテンプレートをリンクする
Zabbixは自動的には自身を監視しません。データ収集 → ホスト → ホストの作成に移動し、ホスト名に zabbix-server を設定して、Linux servers グループに追加します。IPに 127.0.0.1、ポートに 10050 を指定した Agent インターフェースを追加します。テンプレートで Linux by Zabbix agent をリンクします。これはパッシブポーリング用のバリアントです。Linux by Zabbix agent active ではAgentがデータをプッシュします。保存します。
1分以内にホスト行に緑色の ZBX ラベルが表示され、監視 → 最新データにメトリクスが届きます。赤色のZBXラベルは、サーバーがAgentに接続できないことを示します。この障害モードについては後述します。これはこの手順のミスではありません。
手順10、実用的なトリガーとメール通知
Linux by Zabbix agent テンプレートには、高CPU使用率、メモリ不足、ディスク容量不足用のトリガーがあらかじめ含まれています。そのため、テンプレートをリンクするとすぐにアラートを受け取れます。トリガーの作成方法を確認するため、独自のトリガーを追加します。ホストを開き、Triggers → Create trigger に移動します。名前に Root filesystem over 90% full on {HOST.NAME} を指定し、深刻度を High に設定して、次の式を使用します。
last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90vfs.fs.dependent.size[/,pused] は、テンプレートのファイルシステムディスカバリがrootファイルシステム用に作成する使用率(パーセント)のアイテムです。7.0のLinuxテンプレートは vfs.fs.get を1回収集し、マウントポイントごとの依存アイテムを導出します。そのため、追加のデータ収集なしでトリガーが実行されます。保存します。
トリガーは、誰かに通知する action が設定されるまで、ダッシュボード上の行の色を変更するだけです。Alerts → Media types → Email で、SMTPサーバー、ポート、送信者アドレス、接続セキュリティ(通常はSTARTTLS)、必要なリレー認証情報を設定します。その後、Test を使用します。ここで失敗する場合、実際のアラートに依存する前にSMTP経路が正しくないことを示します。Users → Users → Admin → Media → Add でAdminユーザーにアドレスを設定し、通知する深刻度を選択します。次に、Alerts → Actions → Trigger actions → Create action でアクションを設定します。Trigger severity >= Warning のような条件を追加し、Operations でEmail経由でAdminに送信します。保存して有効にします。チャットを使用する場合は、Zabbix 7.0にSlack、Discord、Telegram用のwebhookメディアタイプが用意されています。Emailと同じ方法で設定し、ユーザーに割り当てます。
エージェントで2台目のサーバーを監視する
別のサーバーを監視するには、そこにも Zabbix リポジトリを追加します。Ubuntu 24.04 には Zabbix パッケージが標準で含まれていないため、エージェントだけをインストールします。
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-agent2/etc/zabbix/zabbix_agent2.conf を編集し、Server に Zabbix server の IP を設定します。これはパッシブチェックで使用します。アクティブチェックでは、ServerActive と、フロントエンドで作成するホスト名と一致する一意の Hostname も設定します。
Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01sudo systemctl enable --now zabbix-agent2 を実行し、Zabbix server からこのサーバーへの TCP 10050 を開放します。フロントエンドに戻り、このマシンの IP を Agent インターフェースに指定したホストを作成します。Linux テンプレートをリンクすると、1分以内にデータが報告されます。
発生する障害と表示される文字列
フロントエンドに Error connecting to database またはデータベースエラーが表示される場合。 ウィザードのDB手順で、Access denied for user 'zabbix'@'localhost' (using password: YES) はパスワードが手順3の値と一致しないか、GRANT が実行されていないことを示します。データベースには接続できるものの、フロントエンドに The frontend does not match Zabbix database または Table 'zabbix.users' doesn't exist が表示される場合は、手順4のスキーマインポートがスキップされたか失敗しています。新しく作成したデータベースに再実行してください。
オレンジ色のバナーに Zabbix server is not running: the information displayed may not be current と表示される場合。 フロントエンドは起動していますが、稼働中のサーバーに接続できません。主な原因は3つあります。可能性が高い順に確認してください。サービスが停止している場合は、systemctl status zabbix-server を確認して起動します。サービスは稼働しているもののデータベースに接続できない場合は、ログに [Z3001] connection to database 'zabbix' failed: [1045] Access denied と表示されます。これは DBPassword が誤っているか空白であることを示します。または、フロントエンドが誤ったサーバーを参照しています。サーバーは /etc/zabbix/web/zabbix.conf.php のホスト localhost、ポート 10051 に保存されています。UbuntuではデフォルトでSELinuxがないため、RHELのガイドで説明されているSELinuxソケットが原因となる問題は該当しません。ここでは、ほとんどの場合、データベースパスワードまたは停止中のサービスが原因です。
ホストに赤い ZBX ラベルが表示され、アイテムエラーが Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused の場合。 エージェントが実行されていないか、listenしていません。systemctl status zabbix-agent2 を確認し、ListenPort=10050 を確認してください。"connection refused" ではなくタイムアウトになる場合は、ファイアウォールがポート10050を破棄しています。関連する Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. は、エージェントには到達できるものの、Server= 行にZabbix serverのIPが記載されていないことを示します。IPを追加して、エージェントを再起動してください。
nginxの標準ウェルカムページ、または 502 Bad Gateway が表示される場合。 ウェルカムページが表示される場合は、デフォルトサイトがまだ有効であるか、Zabbixブロックがリンクされていません。手順6と同様に、/etc/nginx/sites-enabled/default を削除し、/etc/nginx/conf.d/zabbix.conf が存在することを確認してください。502 は、nginxがPHPに到達したものの、PHP-FPMが停止しているか別のソケットでlistenしていることを示します。php8.3-fpm を起動し、Zabbixブロックの fastcgi_pass ソケットが実行中のプールと一致することを確認してください。
バックアップ、アップグレード、TLS
データベースにはすべての履歴が含まれるため、スケジュールを設定して mysqldump でバックアップし、ダンプをサーバー外に保管してください。
mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gz/etc/zabbix の設定ファイルも小さく、保存する価値があります。ただし、これらは再構築できます。データは再構築できません。復元は逆の手順です。データベースを作成し、ダンプをインポートして、設定がデータベースを参照するようにします。
7.0 系列内のアップグレードは通常の apt update && apt upgrade の実行です。サーバーは次回の起動時にスキーマ移行を適用するため、パッケージをアップグレードして zabbix-server を再起動してください。将来のメジャー系列への移行は、計画的に実施してください。アップグレードノートを読み、最初にデータベースをダンプし、スキーマが一方向に変更されることを想定します。この一方向の移行があるため、LTS 系列を固定して使い続けます。
フロントエンドを平文の HTTP のままにしないでください。DNS がサーバーを指すようになったら、Ubuntu 24.04 の nginx で Certbot と Let's Encrypt を使用する に従って証明書を設定してください。これにより、server block は 443 で listen し、80 からリダイレクトするように書き換えられます。他のすべてのサーバーへのログインを監視するサーバーを強化する際は、brute-force SSH 試行を fail2ban で禁止する に従って SSH も制限してください。監視用のログイン情報を平文で送信してはなりません。また、入口をパスワード推測者に開放したままにしてはいけません。
FAQ
Zabbix agent は必要ですか。それとも agent なしで監視できますか。
どちらも使用できます。agent(agent2)を使うと、ホストごとの詳細なメトリクス、CPU、メモリ、ディスク、プロセス、サービス、ログファイルを取得できます。管理下にあるサーバーでは、通常こちらを選択します。agentless 監視は、ソフトウェアをインストールできないデバイスに適しています。スイッチやプリンターには SNMP、到達性の確認には ICMP ping、エンドポイントには HTTP checks、ハードウェアの状態確認には IPMI を使用します。実際の環境では、通常この2つを組み合わせます。
フロントエンドに Zabbix server が実行されていないと表示されるのはなぜですか。
フロントエンドは動作していますが、稼働中の zabbix-server プロセスに接続できていません。通常、server は起動後、zabbix_server.conf 内の DBPassword が誤っているか空欄のためログインに失敗し、そのまま終了します。systemctl status zabbix-server を実行して /var/log/zabbix/zabbix_server.log を確認してください。[Z3001] connection to database ... failed 行があれば、この問題を確認できます。パスワードを修正して再起動すると、通常は1分以内にバナーが消えます。
MySQL を使用する必要がありますか。それとも PostgreSQL を使用できますか。
どちらも完全にサポートされています。このガイドのように MariaDB または MySQL と zabbix-server-mysql を使用することも、PostgreSQL と zabbix-server-pgsql を使用することもできます。小規模なインストールでは、選択による違いはほとんどありません。大規模な環境では、PostgreSQL と TimescaleDB 拡張機能を使用すると履歴テーブルをパーティション分割でき、ハウスキーピングのコストを大幅に削減できます。そのため、大規模サイトでは PostgreSQL が選ばれる傾向があります。どちらか一方を選択して使い続けてください。後から移行する場合は、設定の切り替えではなく、完全なエクスポートと再インポートが必要です。
Zabbix の all-in-one server には、どの程度の RAM が必要ですか。
1台のサーバーで少数のホストを監視する場合、2 GB が現実的な最低ラインです。数十台を超える場合は、4 GB あれば余裕があります。メモリの大部分は、データベースのキャッシュと server の poller が使用します。1 GB の VPS でも動作しますが、履歴が増えるとデータベースのメモリが不足します。100台を超える場合は、1台のマシンに RAM を追加するより、データベースを専用サーバーに分離し、buffer pool を調整してください。
数台のサーバーに Zabbix は過剰ではありませんか。
過剰になる場合があります。必要なのが「稼働しているかどうか」の確認と共有できるページだけなら、稼働時間とステータス監視用の Uptime Kuma のような軽量なツールのほうが、導入が速く、概要も確認しやすくなります。ホストごとのメトリクスしきい値、履歴グラフ、テンプレート化したホスト、エスカレーションルールが必要な場合は Zabbix を選択してください。これらは、単純な ping ツールでは多数のホストに対して提供できない機能です。