0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】Zabbix 6.0 を EC2 に構築して分かったハマりポイントまとめ

Posted at

はじめに

本記事は以前書いた『IAMユーザーでEC2を立ててSSH接続するまで』の続きです。
今回はZabbixのインストールから、Zabbixのロケール変更までを行う。

当初 Amazon Linux 2023(RHEL系)で構築を試みたが、
Zabbix との互換性の問題により、途中で Ubuntu Server に切り替えた。
そのため、前半は RHEL 系、後半は Ubuntu 系の手順が登場するので、ご注意ください。

Zabbix公式リポジトリを追加(RHEL系OSの場合)

Zabbixのインストールの前に、以下コマンドを実行する。

sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-5.el9.noarch.rpm

このコマンドは Zabbix本体をインストールしているわけではない。
行っているのは 「Zabbix公式リポジトリの登録」 である。

リポジトリとは何か

リポジトリとはソフトウェア(RPMパッケージ)が保管されている配布元(倉庫)
dnf や yum は、あらかじめ登録されたリポジトリを参照し、
そこからパッケージを取得・インストールする仕組みになっている。

リポジトリ定義ファイルの役割

リポジトリ定義ファイルとは、
「どこから」「どのソフトを」「安全に」取得してよいか
を定義した設定ファイルである。

このファイルは以下のディレクトリに配置される。

/etc/yum.repos.d/

ここに存在する .repo ファイルを dnf が読み込み、インストール可能なパッケージの取得先が決定される。

なぜ rpm コマンドでリポジトリを登録するのか

Zabbixではリポジトリ定義ファイルを含んだ zabbix-release パッケージが提供されている。

これを rpm コマンドでインストールすることで、

  • OSバージョンに合った .repo ファイルが自動配置される
  • GPGキーも同時に登録される
  • 手動編集による設定ミスを防げる
    といったメリットがある。

比喩で理解する「リポジトリ」と「リポジトリ定義ファイル」

理解が難しかったので、ここまでの説明を ソフトウェアを=商品 として考えてみる。

リポジトリとは(=倉庫)

リポジトリとは、

ソフトウェア(RPMパッケージ)が保管されている倉庫である。

  • AlmaLinux公式リポジトリ
  • Zabbix公式リポジトリ

は、それぞれ 別の倉庫 を意味する。


dnf / yum とは(=配達業者)

dnfyum

指定された倉庫に行って、商品を取りに行く配達業者である

配達業者は倉庫の場所を勝手に探すことはできない。


リポジトリ定義ファイルとは(=配達先リスト)

そこで登場するのが リポジトリ定義ファイル(=配達リスト) である。

リポジトリ定義ファイルは、

「この倉庫に行っていい」
「この商品を扱っている」
「正規品かどうか確認する方法」

をまとめた 配達先リスト である。

このリストは以下の場所に保管されている。

/etc/yum.repos.d/

要するに、
Zabbixをインストールするための RPMパッケージ を、
どのURL(リポジトリ)から、安全に取得してよいかを定義している

ということだ

Zabbixのインストール

準備が整ったのでインストール。

メタデータ更新

sudo dnf clean all
# dnf が内部に保存しているキャッシュをすべて削除

sudo dnf makecache
# 各リポジトリにアクセスして、最新のメタデータを取得し直す
コマンド 比喩
dnf clean all 古い情報を全部捨てる
dnf makecache 最新情報を取り寄せる

Zabbix Server / Agent / Web / DB インストール時のトラブル

以下のコマンドは、Zabbixが内部で利用するライブラリを事前にインストールしている。
Zabbix本体を導入する前に依存ライブラリを揃えることで、
インストール時のエラーや機能制限を防ぐことができる。

sudo dnf install -y openipmi-libs openldap-libs
# 依存パッケージを入れる
sudo dnf install -y \
zabbix-server-mysql \
zabbix-web-mysql \
zabbix-agent \
mariadb105-server
# Zabbixを MySQL(MariaDB)構成で動かすために必要な主要コンポーネント一式をインストールしている

このとき問題が発生した。
筆者は最初、AMIに Amazon Linux 2023 を使用していた。

しかし Amazon Linux 2023 では、
Zabbix公式リポジトリが想定している RHEL 互換環境との差異により、
一部パッケージが正常にインストールできなかった。

そのため、Zabbixと互換性のある Ubuntu Server に AMI を変更し、
環境を作り直すことにした。

OS を Ubuntu Server に変更

AMI を Ubuntu Server に変更した。

パッケージ更新

AMI は作成された時点の状態で提供されるため、
起動直後の OS には最新のパッケージやセキュリティパッチが含まれていない場合がある。

そのため必要なパッケージをインストールした後に、
パッケージ更新を行い、環境を最新の状態に揃える必要がある。

sudo apt update
# 登録されているリポジトリから最新のパッケージ情報を取得するコマンド

sudo apt upgrade -y
# インストール済みパッケージを依存関係を変更しない範囲で最新バージョンへ更新

バージョンの更新が終了すると、画面が変わりました。

一瞬怖い画面かと思いましたが、
「再起動しないと新しいカーネルは有効にならないよ」という注意でした。
OKを選択します。

スクリーンショット 2026-02-03 110143.png

後で再起動したときにサービスも再起動されるので、デフォルトのままでOKを選択。
スクリーンショット 2026-02-03 110309.png

タイムゾーンの変更

タイムゾーンはログや監視結果の時刻を人が把握できるようにするために設定する。
特に Zabbix のような監視システムでは重要。

timedatectl
# タイムゾーンの確認

sudo timedatectl set-timezone Asia/Tokyo
# タイムゾーンを日本に変更

timedatectl
# 再度タイムゾーンの確認

タイムゾーン変更前
image.png

タイムゾーン変更後
image.png

タイムゾーンがAsia/Tokyoになりました。

必須ツールのインストール

以下のコマンドでは、サーバ構築・運用作業を行うための
基本的なツール群をまとめてインストールしている。

設定ファイル編集、通信確認、証明書・署名検証など、
以降の作業で頻繁に利用するため、初期段階で導入している。

sudo apt install -y \
vim \
# テキストエディタ
curl \
#HTTP/HTTPS 通信ツール
wget \
# ファイルダウンロード用ツール
net-tools \
# ネットワーク確認コマンド群
ca-certificates \
# SSL/TLS 証明書の検証用CA
gnupg \
# GPG署名検証ツール
lsb-release
# OS情報取得用ツール

多くのパッケージは初期状態ですでに最新版が導入されており、
net-tools のみ新規に追加された。

image.png

Zabbix リポジトリ追加

以下のコマンドを使用したところエラーが発生した。

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_6.0-6+ubuntu22.04_all.deb
sudo apt update

ダウンロードした .deb(Ubuntu 24.04向け)と、
インストール対象(Ubuntu 22.04向け)が一致していなかったため失敗した。

改めてダウンロードとインストールを行った。
問題なく実行できた。

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo apt update

Zabbix Server / Web / Agent / DB をインストール

Zabbixを MySQL(MariaDB)+ Apache + PHP 構成で動かすために
必要な主要コンポーネントをまとめてインストールします

sudo apt install -y mariadb-server \
  zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf \
  zabbix-sql-scripts zabbix-agent

カーネルやサービスを再起動する必要があるので、再起動を行う

sudo reboot

再起動のためSSH接続が切れます。
数十秒待ってから、SSHで再接続をします。

ssh -i <zabbix-key.pemのパス> ubuntu@<EC2のパブリックIP>

コマンドとコンポーネントの整理

sudo:管理者権限
apt install:パッケージをインストール
-y:確認を自動で yes

sudo apt install -y

Zabbixが使うデータベース

  • 監視データ
  • 設定情報
  • ユーザー情報
    これらを保存するためのDBサーバ。
mariadb-server

Zabbixの中枢(サーバ本体)

  • エージェントやSNMPからデータ収集
  • トリガー判定
  • DBへの読み書き
    mysqlが付いているのは、DBに MySQL / MariaDB を使う構成だから。
zabbix-server-mysql

ZabbixのWeb管理画面(PHP)

  • ブラウザから操作するUI
  • 監視設定、グラフ表示、障害確認
zabbix-frontend-php

Apache 用の Zabbix 設定ファイル

  • Apache に Zabbix Web UI を組み込む設定
  • DocumentRoot や PHP の紐付け

これがあることで Apache + Zabbix + PHP がすぐ連携できる。

zabbix-apache-conf

Zabbix用データベース初期化SQL

  • テーブル定義
  • 初期データ

/usr/share/zabbix-sql-scripts/にSQLが配置される。
DB初期化時に必須。

zabbix-sql-scripts

監視対象に入れるエージェント

  • CPU / メモリ / ディスク使用率
  • プロセス情報 などを取得

今回の構成では自身を監視するので、エージェントをいれる。

zabbix-agent

DBの競合

AIから指示で、以下のコマンドを使用しました。

sudo apt install -y \
zabbix-server-mysql \
zabbix-frontend-php \
zabbix-agent \
mysql-server

すると、以下のログが出ました。

MySQL has been frozen to prevent damage to your system.
Please see /etc/mysql/FROZEN for help.

もともと MariaDB が入っていが、そこに MySQL を入れ替えた。
Ubuntu が「DB破壊防止」のため MySQLを凍結(起動停止) した。
MySQLはインストールされたが、使えない。とのこと。

今回は MariaDB が導入済みの状態で MySQL を追加したことで競合が発生した。
以降は「すでに入っているDB」を事前に確認してから追加インストールする。

MySQLの完全削除

MariaDBをデータベースとして、使用することを決めた。
なので、MySQLを完全に消して、MariaDBでやり直します。

サービス停止&失敗状態リセット

sudo systemctl stop mysql || true
# MySQL サービスを 停止 する

sudo systemctl reset-failed mysql || true
# systemd が記録している「mysql は失敗したサービス」 という状態をリセット

|| true はシェルの論理演算子で、必ず成功するコマンド

  • mysql が止まる → 成功 → true は実行されない
  • mysql が存在しない → 失敗 → true を実行

どちらの場合でも最終的に「成功扱い」になる。
|| true を付けることで、対象のコマンドが失敗しても処理全体を中断させない。


MySQL系を完全削除

sudo apt purge -y "mysql-*" mysql-server mysql-server-8.0 mysql-common
sudo apt autoremove -y
# MySQL 関連パッケージを “設定ファイルごと” 完全に削除し、使われなくなった依存関係も掃除する

apt purge: パッケージ本体 + 設定ファイルを削除
-y : 確認をすべて自動で yes
"mysql-*" : mysql- で始まるパッケージをまとめて対象
mysql-server, mysql-server-8.0, mysql-common : 中途半端に残るのを防ぐため、重ねて指定

sudo apt autoremove -y : 以前は必要だったが、
今はどのパッケージからも使われていない依存関係を削除する。


DBデータ/設定の残骸を削除

sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/mysql
sudo rm -rf /var/log/mysql*
# MySQL / MariaDB に関する「データ・設定・ログ」をすべて削除し、完全に初期状態へ戻す。
オプション 意味
r 再帰的に削除(ディレクトリ配下すべて)
f 強制削除(確認しない・エラー無視)

/var/lib/mysql : DBの中身そのもの
/etc/mysql : 起動時の動作を決める設定
/var/log/mysql : 過去のトラブル履歴


改めて、MariaDB を入れる

sudo apt update
sudo apt install -y mariadb-server

起動確認

sudo systemctl enable --now mariadb
sudo systemctl status mariadb --no-pager

ステータスを見て、インストールができていることを確認しました。

Zabbix 用データベース作成

MariaDBに入る

sudo mariadb

DB・ユーザー作成

CREATE DATABASE zabbix
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_bin;

CREATE USER 'zabbix'@'localhost'
  IDENTIFIED BY 'zabbix_pass';

GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';

FLUSH PRIVILEGES;
EXIT;

CREATE DATABASE zabbix : zabbix という名前のデータベースを作成
CHARACTER SET utf8mb4 : 完全な UTF-8。Zabbix公式推奨。
COLLATE utf8mb4_bin; : バイナリ比較(大文字小文字を区別)

CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix_pass'; :
ユーザー名:zabbix
接続元:localhost(同一サーバからのみ)
パスワード:zabbix_pass
を設定している。

GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; :
zabbix データベースに対して、すべての操作権限を付与
zabbix.* : zabbix DB の中だけに権限を与えている。


Zabbix 初期スキーマ投入

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz \
| mariadb -u zabbix -pzabbix_pass zabbix

Zabbix Server が動作するために必要な
データベースの“設計図(スキーマ)と初期データ”を
zabbix データベースに流し込んでいる。

以下はコマンドの解説。

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz : 解凍しながら標準出力に流す

/usr/share/zabbix-sql-scripts/mysql/server.sql.gz : Zabbix 用 DBスキーマ

mariadb -u zabbix -pzabbix_pass zabbix : 初期データが入り、数百個のテーブルが作られる

要素 意味
mariadb MariaDB クライアント
-u zabbix zabbix ユーザーで接続
-p... パスワード指定
zabbix 接続先 DB 名

このコマンドが返ってくるまで、少し時間がかかりました。
何も表示されず、プロンプトに戻れば成功です。


成功確認

mariadb -u zabbix -pzabbix_pass -e "SHOW TABLES;" zabbix | wc -l
174

zabbix データベースに存在するテーブル数を数えている。
174 個のテーブルが存在する、という意味。
以下はコマンドの詳細。

mariadb :コマンドラインから DB に接続して SQL を実行します。
-u zabbix : Zabbix Server が実際に使うユーザー
-pzabbix_pass : パスワードを指定
-e "SHOW TABLES;" : SQL を1行だけ実行するオプション
SHOW TABLES; : 現在接続している DB に存在するすべてのテーブル名を一覧表示
zabbix : 接続先の データベース名
| wc -l : パイプで渡して、行数を数える

SHOW TABLES で多数のテーブルが作成されていることを確認できたため、スキーマ投入は成功と判断しました。

なぜテーブルの数が多いのか

Zabbix では、監視対象、監視項目、障害情報、履歴データなど、
性質の異なる大量の情報を扱う。

これらを1つのテーブルにまとめてしまうと、
構造が複雑になり、検索性能や保守性が低下する。

そのため Zabbix では、
役割ごとにテーブルを分割する設計を採用しているため、
結果としてテーブル数が多くなっている。

Zabbix Server の設定ファイル確認と変更

Zabbix Server 設定ファイル確認します

sudo vi /etc/zabbix/zabbix_server.conf

/etc/zabbix/zabbix_server.conf が見当たらない(または内容が期待通りでない)ため、
zabbix-server-mysql が正しくインストールされているか確認しました。
やはり、zabbix-server-mysqlがないということが原因でした。
DB競合の時に消してしまったようです。

改めて、Zabbix Server をインストールします。

sudo apt update
sudo apt install -y zabbix-server-mysql

zabbix_server.confが作られたかを確認します。

ls -l /etc/zabbix/

zabbix_server.confありました。
image.png

設定ファイルを編集

sudo vi /etc/zabbix/zabbix_server.conf

以下の項目を探して設定を変更します。
追加と変更を行いました。

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix_pass
# 行90-110ぐらいの間にあった

Zabbix Server を起動

起動していきます。

sudo systemctl enable zabbix-server
sudo systemctl start zabbix-server
sudo systemctl status zabbix-server --no-pager

しかし以下のようにエラーが発生。

● zabbix-server.service - Zabbix Server
     Loaded: loaded (/lib/systemd/system/zabbix-server.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Tue 2026-02-03 13:41:24 JST; 7s ago
    Process: 4942 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=1/FAILURE)
        CPU: 22ms

起動直後に zabbix_server がエラーで落ちている、ということでした。

以下のコマンドを使用して、ログから原因を特定していきます。

sudo journalctl -xeu zabbix-server.service --no-pager | tail -n 80
sudo tail -n 80 /var/log/zabbix/zabbix_server.log

原因が特定できました。
/etc/zabbix/zabbix_server.conf の パラメータ名を大文字と小文字で間違えていました。
DBhostとしてしまいましたが、正しくは DBHost(Hが大文字)でした。

改めて、設定ファイルを編集します。

sudo vi /etc/zabbix/zabbix_server.conf

もう一度、起動を試みます。

sudo systemctl restart zabbix-server
sudo systemctl status zabbix-server --no-pager

無事にactive(running)と表示されました。
image.png

PHP-FPM のインストール

PHP を FastCGI 方式で実行するための実行環境をインストールする

sudo apt update
sudo apt install -y php-fpm

Apache と PHP の起動方式について整理する

Zabbix Web フロントエンドは PHP で実装されているため、
Apache 上で PHP を実行できる環境が必要となる。
Apache で PHP を動かす方法には、主に以下の2通りがある。

  • mod_php:Apache に PHP モジュールを組み込む方式
  • PHP-FPM:Apache とは別プロセスで PHP を実行する方式

まずはサービスの起動を試みる。

Apache / PHP-FPM の起動を試行

sudo systemctl enable --now apache2
sudo systemctl enable --now php8.1-fpm

しかしphp8.1-fpm の起動に失敗した。

PHP-FPM サービス名の確認

PHP-FPM のサービス名を確認するため、以下を実行した。

systemctl list-unit-files | grep -E 'php.*fpm'

しかし該当するサービスが表示されなかったため、
PHP-FPM 自体がインストールされていないことが分かった。

PHP-FPM のインストールと起動

PHP-FPM をインストールする。

sudo apt update
sudo apt install -y php-fpm

インストール後、改めて自動起動と起動を有効化する。

sudo systemctl enable --now php8.1-fpm

Apache がどの PHP 実行方式を使っているか確認

Zabbix Web は 「Apache + PHP」 が動作していれば問題ない。
必ずしも PHP-FPM を使用する必要はなく、
環境によっては mod_php で動作している場合もある。
以下のコマンドを使用して、環境を確認していく。

php -v
# PHPバージョンの確認
apache2ctl -M | grep php
 php_module (shared)
# Apache に PHP モジュールが組み込まれているか確認

ここで以下のような表示が出れば、
Apache は mod_php を使用して PHP を実行している構成である。

php_module (shared)

つまり、php-fpm は必須でないです。

mod_php で動作させる構成にする

sudo apt install -y libapache2-mod-php
sudo systemctl restart apache2

sudo apt install -y libapache2-mod-php :
Apache 用の PHP モジュール(mod_php) をインストール
Apache の中に PHP の実行機能を組み込む

確認

curl -I http://localhost/zabbix

問題なく起動できているようでした。
ローカルPCからアクセスします。

http://<EC2のパブリックIP>/zabbix/

無事にアクセスできました。
image.png

image.png

各種設定値を入力。
ユーザー名とパスワードを求めるページに移動しました。

何を入れたら迷いましたが、以下を入力したらログインすることができました。
ユーザー名: Admin
パスワード: zabbix

image.png

英語表示を日本語表示に変更する

英語だと読みにくいので、日本語に変更します。
しかし日本語のロケールが入っていないため、変更することができませんでした。
まずはOSに日本語のロケールを入れます。
image.png

日本語ロケールをインストール

sudo apt update
sudo apt install -y language-pack-ja

ロケールを生成

sudo locale-gen ja_JP.UTF-8

システムのデフォルトロケールを設定

sudo update-locale LANG=ja_JP.UTF-8

Apache を再起動

sudo systemctl restart apache2

以下のコマンドで日本語が適用されているか確認します。

locale

しかし日本語が反映されていません。

LANG=C.UTF-8

先ほど使用した以下のコマンドは「次回ログイン以降に使うデフォルト言語」を設定だったようです。

sudo update-locale LANG=ja_JP.UTF-8

SSHを一度切断して再接続して、localeコマンドを使用すると、無事に変更されました。

LANG=ja_JP.UTF-8

ここで知ったのですが、
Zabbixの画面表示言語は、OSの locale とは直接関係ありません。

  • OSにja_JP.UTF-8 が存在すること
  • Zabbixが検知できること

が条件です。

もしかすると、SSH接続を切る必要はなかったのかもしれません。

とはいえ、日本語に変更することができました。
image.png

最後に

次回はZabbixの設定を行って、実際に監視を行う。
あえて負荷をかけて、どんなことになるか、どうやって対応するべきかを書いていく。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?