はじめに
前回の記事では、Prometheus + Grafana + cAdvisorを使ったコンテナ監視基盤を構築しました。
今回は同じ環境でZabbixに入れ替えて監視基盤を構築してみました。仕事でオンプレのAI基盤構築に関わっており、現場ではZabbixが使われているケースも多いため、両方触って比較してみました。
この記事でできること
| 項目 | 内容 |
|---|---|
| 所要時間 | 約30分 |
| 環境 | WSL2 + Rocky Linux 9 + Docker Engine |
| 対象 | ZabbixとPrometheusの違いを知りたい方 |
前回までの記事の環境が前提となります。まだの方は先にそちらをご覧ください。
環境
- Rocky Linux 9.7 (Blue Onyx)
- Docker Engine 29.2.1
- Zabbix Server 7.4.8
- Zabbix Agent2 7.4.8
- MySQL 8.0
構成概要
Prometheusスタックと異なり、Zabbixはサーバー・DB・Web UIがひとつの製品としてまとまっています。
手順
1. docker-compose.ymlの更新
既存の監視基盤(Prometheus + Grafana + cAdvisor)を削除し、Zabbixに入れ替えます。
cat <<EOF > docker-compose.yml は既存のファイルを上書きします。前回の設定がある場合はバックアップを取っておくことをおすすめします。
cd ~/ollama
cat <<EOF > docker-compose.yml
# Ollama + Open WebUI + Nginx + Zabbix監視基盤 構成
services:
# LLM推論エンジン
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
# チャットUI
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
expose:
- "8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- webui_data:/app/backend/data
depends_on:
- ollama
# リバースプロキシ
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- open-webui
# ZabbixのデータベースMySQL
zabbix-db:
image: mysql:8.0
container_name: zabbix-db
# log_bin_trust_function_creatorsはZabbixのDB初期化に必要
command: --log-bin-trust-function-creators=1
environment:
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix_pass
# 実運用では.envファイルなどで管理することを推奨
- MYSQL_ROOT_PASSWORD=root_pass
volumes:
- zabbix_db_data:/var/lib/mysql
# Zabbixサーバー
zabbix-server:
image: zabbix/zabbix-server-mysql:latest
container_name: zabbix-server
ports:
- "10051:10051"
environment:
- DB_SERVER_HOST=zabbix-db
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix_pass
depends_on:
- zabbix-db
# Zabbix Web UI
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:latest
container_name: zabbix-web
ports:
- "8081:8080"
environment:
- DB_SERVER_HOST=zabbix-db
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix_pass
- ZBX_SERVER_HOST=zabbix-server
- PHP_TZ=Asia/Tokyo
depends_on:
- zabbix-server
# Zabbixエージェント2(Dockerプラグイン対応)
zabbix-agent:
image: zabbix/zabbix-agent2:latest
container_name: zabbix-agent
environment:
- ZBX_HOSTNAME=docker-host
- ZBX_SERVER_HOST=zabbix-server
# DockerソケットのエンドポイントをAgent2に指定
- ZBX_PLUGINS_DOCKER_ENDPOINT=unix:///var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zabbix-server
volumes:
ollama_data:
webui_data:
zabbix_db_data:
EOF
2. コンテナの起動
docker compose up -d
初回はイメージのダウンロードがあるため、5〜10分程度かかります。
3. Zabbix Web UIにアクセス
http://localhost:8081
初期ログイン情報:
- ユーザー名:
Admin - パスワード:
zabbix
ログイン後、左下のユーザーアイコン → ユーザー設定 から日本語に変更できます。
4. 監視ホストの登録
データ収集 → ホスト → ホストの作成 から以下を設定します:
| 項目 | 値 |
|---|---|
| ホスト名 | docker-host |
| ホストグループ | Linux servers |
| テンプレート | Linux by Zabbix agent |
| インターフェース | Agent / DNS名: zabbix-agent / ポート: 10050
|
IPアドレスではなくDNS名で zabbix-agent と指定することで、Dockerのコンテナ名による名前解決が使えます。
5. Dockerコンテナ監視の設定
コンテナ監視には Zabbix Agent2 が必要です。通常のZabbix Agentでは Docker by Zabbix agent 2 テンプレートが使えません。
データ収集 → ホスト → docker-host → テンプレート から:
-
Docker by Zabbix agent 2を追加 - 更新 をクリック
しばらく待つと 監視データ → 最新データ でコンテナのメトリクスが確認できます。
取得できるメトリクスの例:
| メトリクス | 内容 |
|---|---|
| Containers running | 起動中のコンテナ数 |
| Containers stopped | 停止中のコンテナ数 |
| Containers total | 合計コンテナ数 |
| Containers size | コンテナの合計サイズ |
よくあるハマりどころ
MySQLの初期化エラー
docker-compose.yml のzabbix-dbに command: --log-bin-trust-function-creators=1 を追加しないと、ZabbixのDB初期化が失敗します。
ERROR 1419: You do not have the SUPER privilege and binary logging is enabled
このエラーが出た場合はvolumeを削除してやり直してください:
docker compose down
# ボリューム名は「プロジェクト名_zabbix_db_data」になります
# ~/ollamaで作業している場合は以下のコマンドになります
docker volume rm ollama_zabbix_db_data
docker compose up -d
ボリューム名は作業ディレクトリ名がプレフィックスになります。docker volume ls で確認してから削除してください。
コンテナのメトリクスが取得できない
通常の zabbix-agent イメージではDockerプラグインが使えません。zabbix-agent2 イメージを使う必要があります。
また、Dockerソケットのマウントに :ro(読み取り専用)をつけると権限エラーになることがあります。
# NG
- /var/run/docker.sock:/var/run/docker.sock:ro
# OK
- /var/run/docker.sock:/var/run/docker.sock
Dockerソケットの権限エラー
ホスト側の /var/run/docker.sock のパーミッションによっては、zabbix-agentコンテナ内のzabbixユーザーがアクセスできない場合があります。
その場合はdocker-compose.ymlのzabbix-agentに user: root を追加するか、ホスト側のソケット権限を確認してみてください。
zabbix-agent:
image: zabbix/zabbix-agent2:latest
user: root # 権限エラーが出る場合に追加
...
PrometheusとZabbixを実際に使ってみた比較
セットアップのしやすさ
| 項目 | Zabbix | Prometheus + Grafana |
|---|---|---|
| 初期設定 | GUIで直感的に設定できる | YAMLファイルの記述が必要 |
| ホスト追加 | GUIからポチポチするだけ | exporter設定が必要 |
| ダッシュボード | テンプレートを適用するだけ | クエリを自分で書く必要がある |
Zabbixはホストを登録してテンプレートを適用するだけで監視が始まるので、初期設定は断然Zabbixの方が楽でした。
サーバー単位の監視
Zabbixはサーバー・ホスト単位の監視が得意です。CPU・メモリ・ディスク・ネットワークなどがテンプレートを適用するだけで一括監視できます。
Prometheusも同様のことはできますが、Node Exporterの設定やGrafanaのダッシュボード構築が必要で、初期の手間がかかります。
コンテナ・マイクロサービス単位の監視
ここはPrometheusの方が優れていると感じました。
Zabbixでもzabbix-agent2とDockerテンプレートを使えばコンテナ監視はできますが、取得できるメトリクスはコンテナの合計数やサイズなど集計レベルの情報が中心です。
PrometheusはcAdvisorと組み合わせることでコンテナ1つ1つのCPU・メモリをリアルタイムで可視化でき、柔軟なクエリで細かい分析ができます。
実務での使い分け
実際の現場ではこんな使い分けが多いようです:
インフラ・サーバー層 → Zabbix
コンテナ・アプリ層 → Prometheus + Grafana
既存のオンプレ環境にZabbixが入っていて、新たにコンテナ基盤を導入する際にPrometheusを追加するという構成もよく見られます。
まとめ
ZabbixとPrometheus + Grafanaを実際に触って比較しました。
- Zabbixが向いている場面: サーバー・ホスト単位の監視、GUIで直感的に管理したい、既存インフラとの統合
- Prometheusが向いている場面: コンテナ・マイクロサービス単位の監視、Kubernetes環境、柔軟な可視化が必要
どちらが優れているというわけではなく、監視対象と環境に合わせて使い分けるのがベストだと感じました。
参考
この記事はClaude(Anthropic)を活用して作成しました。