SSD Nodes Learn Hosting plans →
ガイド Matt Connor著者 Matt Connor

Ubuntu 24.04にZabbix 7.0 LTSを構築する方法

Ubuntu 24.04にZabbix 7.0 LTSを導入します。repositoryの追加、MariaDB/MySQL schemaのインポート、nginxの2行、agent2設定と頻出エラーの対処を解説します。

構築するもの

zabbix-serverデーモンがポーリングとアラート通知を行い、MariaDB/MySQL データベースがすべてのメトリクスを保存し、nginx が PHP フロントエンドを配信し、zabbix-agent2がサーバー自身のメトリクスを収集する、Ubuntu 24.04 VPS 1 台構成の完全な Zabbix 7.0 LTS スタックです。起動したら、2 台目のサーバーを監視対象に指定してテンプレートを適用します。ディスク容量が不足した場合やサービスが停止した場合は、すぐにメールを受け取れます。

Zabbix はステータスページ用ツールより高機能です。テンプレート、トリガー、エスカレーション、履歴保持を備えた本格的な時系列システムです。特に問題になりやすいのは、データベーススキーマのインポート、server が実際に読み込むデータベースパスワードの設定、nginx 設定で 2 行のコメントを解除する作業です。ここを正しく設定すれば、残りはウィザードで進められます。稼働状態の確認と共有可能なステータスページだけが必要なら、軽量な Uptime Kuma ステータスモニターで 1 つのコンテナにまとめて実現できます。多数のホストに対してメトリクス単位のしきい値とエスカレーションを設定する場合は、Zabbix の機能が役立ちます。

7.0 LTS 系列を使用してください。server、frontend、agent2、スキーマのバージョンがそろっており、長期間にわたってセキュリティ修正が提供されます。以下のリポジトリファイル名をコピーする前に、公式 Zabbix ダウンロードページを確認してください。latest release package は 7.0 リポジトリを設定するだけで、特定の point release は選択しません。そのため apt は、リポジトリにある 7.0.x パッケージをインストールし、結果として最新のものが選ばれます。このページには番号付きの 7.0-N release package も掲載される場合がありますが、その番号はリポジトリ設定のバージョンであり、Zabbix build のバージョンではありません。ここに示すその他のコマンドは、7.0 系列全体でそのまま使用できます。

サイズ、ポート、前提条件

root または sudo が使える、構成直後の Ubuntu 24.04 KVM VPS を前提にします。必要なリソースは現実的に見積もってください。1 台のサーバーで server、データベース、nginx、PHP を稼働させ、少数のホストを監視する場合、2 GB の RAM と 2 vCPU が現実的な下限です。1 GB のサーバーでも起動はしますが、履歴が増えるとデータベースのリソースが不足します。数十台を超える場合は 4 GB を計画し、100 台を超える場合はデータベースを専用サーバーへ移してください。ディスク使用量は、収集するアイテム数と履歴の保持期間に応じて増加します。最初は数 GB を確保し、設定した保持期間に従って housekeeper が古いデータを削除します。

ポートは、frontend 用に 80 と 443 を使用します。公開することも、自分の IP のみに制限することもできます。server は、active agent がデータを送信するための TCP 10051 で待ち受けます。各 agent は、server がポーリングするための TCP 10050 で待ち受けます。前段に firewall がある場合は、公開するポートだけを許可してください。frontend 用の DNS A レコードも用意しておくとよいでしょう。frontend で正式な証明書を使用したくなるためです。Zabbix のサーバーは、運用する他のすべてのサービスを監視します。そのため、後付けで追加するのではなく、2026 年に運用する価値のある、より広い self-hosting stack の一部として配置します。

手順 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 update

wget が 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 スキーマファイル、agent2 を一度にインストールします。

sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
  zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

zabbix-server-mysql は MySQL/MariaDB 用にコンパイルされた server です。PostgreSQL を使用する場合は、代わりに zabbix-server-pgsql をインストールし、以下のデータベース手順を調整してください。zabbix-sql-scripts には、次にインポートするスキーマが含まれています。7.0 では別パッケージになっているため、これを忘れると後でインポート先のパスが見つからなくなります。これらのパッケージはデータベースエンジンをインストールしないため、サーバーにまだデータベースエンジンがない場合は、ここで MariaDB をインストールしてください。

sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb

手順 3、適切な文字セットでデータベースを作成する

Zabbix は照合順序を厳密に扱います。サポートされるのは utf8mb4 と utf8mb4_bin の組み合わせ、または古い utf8(別名 utf8mb3)と utf8_bin の組み合わせだけです。ドキュメントでは utf8mb4 と utf8mb4_bin の組み合わせが強く推奨されており、このガイドでもそれを使用します。sudo mysqlで root shell を開き、次を実行します。

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 スキーマはインポート中に決定的なトリガーを作成します。binary logging が有効な状態では、zabbixのような非SUPERアカウントはトリガーを作成できません。MySQL 8 では binary logging がデフォルトで有効で、一部のマネージド MariaDB build でも有効です(stock MariaDB では無効です)。binary logging が有効な server でこの flag を省略すると、インポートは ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled で停止します。root としてこれを設定すると問題を回避できます。インポート後に元へ戻してください。パスワードは正確に記録してください。server の設定にも、1 バイト単位で同じ文字列が必要です。

Step 4、スキーマをインポートする(省略されやすい手順)

新規に構築したフロントエンドが読み込まれない原因として、最も多いのがこれです。作成したデータベースが空だからです。zabbix-sql-scripts に含まれるスキーマをデータベースへ読み込みます。

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

zabbix のパスワードが要求されます。小規模な 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 エラーではなく数値が返れば、スキーマは読み込まれています。

手順 5、zabbix_server.conf にデータベースパスワードを設定する

サーバーは /etc/zabbix/zabbix_server.conf からデータベースの認証情報を読み込みます。設定が必要なのはパスワードだけです。DBName と DBUser はすでに zabbix が既定値として設定されています。# DBPassword= の行のコメントを解除して、値を設定します。

DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-password

パスワードは、手順 3 で設定したものと 1 バイト単位で完全に一致している必要があります。空の DBPassword や誤った DBPassword は、後で表示される「Zabbix server is not running」バナーの主な原因です。daemon は起動しますが、ログインに失敗して終了します。画面には何も表示されず、ログにだけ記録されます。

手順 6、nginx の転送先をフロントエンドに設定する

zabbix-nginx-conf パッケージは /etc/zabbix/nginx.conf に server block をインストールし、/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 welcome site も port 80 で待ち受け、default server として設定されています。そのため、名前が一致しないリクエストではこのサイトが優先されます。削除しないと誤ったページが読み込まれます。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 nginx

nginx -t は test is successful を出力するはずです。nginx: [emerg] a duplicate default server for 0.0.0.0:80 が出力された場合は、デフォルトサイトと Zabbix の server block がともに default_server を要求しています。デフォルトサイトを削除して、もう一度テストします。多くの場合、テストは conflicting server name の warning だけで成功しますが、ブラウザーにはプレーンな welcome page が表示されます。これは名前が一致しないリクエストでデフォルトサイトが優先されているためで、削除すれば解決します。

手順 7、サービスを起動して有効化する

server、agent、PHP-FPM、nginx を起動し、再起動後も自動的に起動するよう有効化します。

sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable  zabbix-server zabbix-agent2 nginx php8.3-fpm

Ubuntu 24.04 には PHP 8.3 が付属するため、FPM サービスは php8.3-fpm です。zabbix-nginx-conf パッケージは、同じ master の下でフロントエンドを実行します。server が起動し、その後も稼働していることを確認します。

sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log

正常なログの末尾には、server が起動したことと、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 のスキーマのインポートを省略したことを示します。そのため、server が読み取る対象がありません。

手順 8、Web セットアップウィザードを完了する

http://your-domain-or-ipにアクセスします。Zabbix セットアップウィザードが開きます。次の手順で進めます。

  1. Welcomeで、言語を選択します。
  2. Check of pre-requisitesでは、すべての行が最初から OK になっていることを確認します。パッケージ化された /etc/zabbix/php-fpm.confプールによって、Zabbix に必要な PHP の制限値はすでに引き上げられています。
  3. Configure DB connectionでは、データベースの種類に MySQL、ホストに localhost、ポートに 0(デフォルトのポートまたはソケットを意味します)、データベース名に zabbix、ユーザーに zabbixを指定し、手順 3 で設定したパスワードを入力します。認証情報が間違っている場合やスキーマがない場合は、ここでエラーになります。
  4. Settingsでは、Zabbix server host に localhost、ポートに 10051を指定し、インストール名を入力します。
  5. Pre-installation summaryを確認してから Installをクリックします。ウィザードによって /etc/zabbix/web/zabbix.conf.phpが書き込まれます。
  6. Finishで、Admin(大文字の A)をユーザー名としてログインします。パスワードには zabbixを使用し、すぐに Usersで変更します。

ウィザードに Cannot create the configuration fileと表示された場合、Web ユーザーには /etc/zabbix/web/への書き込み権限がありません。ウィザードが提示する zabbix.conf.phpをダウンロードし、sudoで手動でそこに配置してから、Finish をクリックします。

手順 9、ローカルホストを追加してテンプレートを適用する

Zabbix は自身を自動的には監視しません。Data collection → Hosts → Create host に移動し、ホスト名を zabbix-server に設定します。Linux servers グループに追加し、IP 127.0.0.1、ポート 10050 の Agent インターフェースを追加します。Templates で Linux by Zabbix agent をリンクします。これは passive-poll 版です。Linux by Zabbix agent active は agent push 版です。保存します。

1 分以内にホストの行に緑色の ZBX ラベルが表示され、Monitoring → Latest data にメトリクスが届きます。赤色の ZBX ラベルは、サーバーが agent に接続できないことを示します。これは以下で扱う障害パターンであり、この手順の誤りではありません。

手順 10、役立つトリガーとメールアラートを設定する

Linux by Zabbix agent template には CPU 高負荷、メモリ不足、ディスク容量不足用のトリガーがあらかじめ含まれています。そのため、template をリンクした時点でアラートを利用できます。トリガーの作成方法を確認するため、独自のトリガーを追加します。host を開き、Triggers → Create trigger に移動します。名前を Root filesystem over 90% full on {HOST.NAME} に設定し、severity を High にして、次の expression を使用します。

last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90

vfs.fs.dependent.size[/,pused] は、template の filesystem discovery が root filesystem 用に作成する使用率の item です。7.0 の Linux template は vfs.fs.get を 1 回収集し、マウントポイントごとの dependent item を算出します。そのため、このトリガーに追加のデータ収集は必要ありません。保存してください。

トリガーを作成しただけでは、dashboard 上の行の色が変わるだけです。誰かに通知するには action が必要です。Alerts → Media types → Email で SMTP server、port、sender address、接続セキュリティ(通常は STARTTLS)、relay credentials を設定します。次に Test を実行してください。ここで失敗する場合、実際のアラートを設定する前に SMTP 経路の問題を解決する必要があります。Users → Users → Admin → Media → Add で Admin user にアドレスを設定し、通知する severity を選択します。続いて Alerts → Actions → Trigger actions → Create action で設定します。Trigger severity >= Warning のような condition を追加し、Operations で Email 経由の Admin 宛て送信を設定します。保存して有効化してください。チャット通知を使用する場合は、Zabbix 7.0 に Slack、Discord、Telegram 用の webhook media type が付属しています。ただし、SMTP 設定ではなく、サービスごとの設定が必要です。たとえば Telegram では、BotFather で bot を作成し、その token を media type の api_token parameter に設定し、受信者の chat ID を user の Send to フィールドに入力します。各 integration の README に従って media type を有効化し、user に割り当て、Email と同じように action で使用してください。

エージェントで別のサーバーを監視する

別のサーバーを監視するには、そこにも Zabbix repository を追加します。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 を設定します。これは passive polling に使用します。active checks では、ServerActive に加えて、frontend で作成する host と一致する一意の Hostname を設定します。

Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01

sudo systemctl restart zabbix-agent2 を実行し、Zabbix server からこのサーバーへの TCP 10050 を許可します。再起動が必要です。パッケージのインストール直後に、配布時の Server=127.0.0.1 でエージェントが起動しているためです。エージェントは起動時にのみ設定ファイルを読み込みます。enable --now を実行しても、エージェントはすでに起動しているため何も変更されません。そのため、エージェントは引き続き Zabbix server からの接続を拒否します。boot 時の自動起動は、パッケージが unit も有効化しているため、すでに設定されています。frontend に戻り、そのマシンの IP を Agent interface に指定した host を作成し、Linux template をリンクすると、1 分以内にデータが報告されます。

確認するエラーと表示されるメッセージ

フロントエンドに Error connecting to database またはデータベースエラーが表示される。 ウィザードの DB 手順で Access denied for user 'zabbix'@'localhost' (using password: YES) が表示される場合、パスワードが Step 3 の内容と一致していないか、GRANT が実行されていません。データベースには接続できるものの、フロントエンドに The frontend does not match Zabbix database または Table 'zabbix.users' doesn't exist が表示される場合は、Step 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 に host localhost、port 10051 として保存されています。Ubuntu ではデフォルトで SELinux が有効になっていないため、RHEL のガイドで挙げられている SELinux によるソケットの問題は該当しません。ここでは、ほとんどの場合、データベースパスワードの誤りかサービスの停止が原因です。

ホストに赤い ZBX ラベルが表示され、項目に Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused と表示される。 エージェントが実行されていないか、待ち受けていません。systemctl status zabbix-agent2 を確認し、ListenPort=10050 を確認してください。「connection refused」ではなくタイムアウトになる場合は、ファイアウォールが port 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 ブロックがリンクされていません。Step 6 と同様に /etc/nginx/sites-enabled/default を削除し、/etc/nginx/conf.d/zabbix.conf が存在することを確認してください。502 が表示される場合、nginx は PHP に到達したものの、PHP-FPM が停止しているか、別のソケットで待ち受けています。php8.3-fpm を起動し、Zabbix ブロック内の fastcgi_pass ソケットが実行中の pool と一致することを確認してください。

バックアップ、アップグレード、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 で待ち受け、80 からリダイレクトするように書き換えられます。ほかのサーバーを監視するためにログインするサーバーを強化する際は、fail2ban でブルートフォース SSH 試行を禁止する に従って SSH も制限します。監視用のログイン情報を平文で送信してはなりません。また、外部からパスワードを推測できる状態で SSH の入口を公開してはなりません。

FAQ

Zabbix agent は必要ですか。それとも agent なしで監視できますか。

どちらも利用できます。agent(agent2)は、ホスト単位の詳細なメトリクス、CPU、メモリ、ディスク、プロセス、サービス、ログファイルを取得できるため、管理下にあるサーバーでは通常こちらを選択します。agentless 監視は、ソフトウェアをインストールできないデバイスに適しています。スイッチやプリンターには SNMP、到達性の確認には ICMP ping、エンドポイントには HTTP チェック、ハードウェアの健全性確認には 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 が選ばれる傾向があります。いずれか1つを選んで継続して使用してください。後から移行する場合は設定を切り替えるだけでは済まず、完全なエクスポートと再インポートが必要です。

Zabbix all-in-one server にはどの程度の RAM が必要ですか。

1台のサーバーで少数のホストを監視する場合、2 GB が現実的な最低ラインです。数十台を超える規模では、4 GB あれば余裕があります。メモリの大半はデータベースのキャッシュと server の poller が使用します。1 GB の VPS でも動作しますが、履歴が増えるとデータベースのメモリが不足します。100台を超える場合は、1台のマシンに RAM を追加し続けるのではなく、データベースを専用サーバーに分離して buffer pool を調整してください。

2台程度のサーバーに Zabbix は過剰ではありませんか。

過剰になる場合があります。必要なのが「稼働しているか」の確認と共有できるページだけであれば、稼働状況とステータスを監視する Uptime Kuma のような軽量なツールのほうが、導入が速く、一目で確認しやすいです。ホストごとのメトリクス閾値、履歴グラフ、テンプレート化したホスト、エスカレーションルールが必要であれば Zabbix を選択してください。これらは、単純な ping ツールでは多数のサーバーに対して提供できない機能です。