0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerコンテナをZabbixで監視してみた〜Prometheusとの比較〜

0
Posted at

はじめに

前回の記事では、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 → テンプレート から:

  1. Docker by Zabbix agent 2 を追加
  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)を活用して作成しました。

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?