ZabbixでDockerコンテナをリソース監視する:Coolify環境の可視化
概要
- Zabbix agent 2 + Docker テンプレートで、コンテナ単位のCPU・メモリ・ネットワークを自動検出・監視
- Coolify環境の30+コンテナのリソース使用量を可視化するダッシュボードを構築
- 「メモリ食いすぎコンテナ」や「CPU使用率の異常スパイク」を検知できるようになった
第5回までで、Coolify + Cloudflare Tunnelの基盤は完成した。でも、監視がなければ運用とは呼べない。 30個以上のコンテナが動いていて、どれがどれだけリソースを使っているか見えないのは怖い。
なぜZabbixなのか
監視ツールの選択肢はいくつかある。
| ツール | 特徴 | セルフホスト | API |
|---|---|---|---|
| Zabbix | エンタープライズ級。テンプレート豊富 | ✅ | ✅ REST API |
| Prometheus + Grafana | メトリクス特化。Kubernetes向き | ✅ | ✅ |
| Datadog | SaaS。簡単だが高い | ✗ | ✅ |
| Uptime Kuma | 死活監視特化。軽量 | ✅ | △ |
Zabbixを選んだ理由:
- Dockerコンテナの自動検出(LLD) が標準テンプレートでできる
- SNMP対応 でルーター(RTX1200)やNAS(QNAP)も同じ画面で監視できる
- REST APIがある から第5回で書いた「API-first」の基準を満たす
- Coolifyでデプロイできる。Dockerイメージが公式で提供されている
Zabbixの構成
Coolifyでデプロイ済みのZabbix構成。Docker Composeで3コンテナ。
services: zabbix-server: image: zabbix/zabbix-server-mysql:alpine-7.4-latest ports: - "10051:10051" environment: - DB_SERVER_HOST=mysql - MYSQL_DATABASE=zabbix
zabbix-web: image: zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest environment: - ZBX_SERVER_HOST=zabbix-server - PHP_TZ=Asia/Tokyo
mysql: image: mysql:8.0 volumes: - mysql-data:/var/lib/mysqlポイントは、Zabbix Server自体はCoolifyのDockerネットワーク内で動いていること。監視対象のコンテナと同じホスト上にいるから、Zabbix agentで直接Dockerソケットにアクセスできる。
Dockerコンテナ監視の設定
1. Zabbix agent 2のインストール
Zabbix agent 2はホストOS側にインストールする必要がある。コンテナ内からDockerソケットにアクセスするのは設定が面倒なので、ホストに直接入れた方がシンプル。
# Debian/Ubuntuwget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu24.04_all.debsudo dpkg -i zabbix-release_latest_7.4+ubuntu24.04_all.debsudo apt updatesudo apt install zabbix-agent2 zabbix-agent2-plugin-*2. Dockerソケットへのアクセス権設定
# zabbix ユーザーを docker グループに追加sudo usermod -aG docker zabbix
# agent2 を再起動sudo systemctl restart zabbix-agent23. Zabbix agent 2 の設定
/etc/zabbix/zabbix_agent2.conf の主要設定:
Server=172.16.238.1 # Zabbix ServerのIPアドレスServerActive=172.16.238.1Hostname=gmk # ホスト名172.16.238.1 はCoolifyのDockerネットワーク(coolify bridge)のゲートウェイIP。Zabbix ServerコンテナからホストのAgent 2に接続するため、このアドレスを使う。
4. 「Docker by Zabbix agent 2」テンプレートの適用
Zabbix Web UI → Data Collection → Hosts → 対象ホスト → Templates で 「Docker by Zabbix agent 2」 を追加。
これだけで、ホスト上のすべてのDockerコンテナが自動検出(LLD: Low-Level Discovery) される。
自動検出されるメトリクス
1コンテナあたり約100個のメトリクスが自動で収集される。
| カテゴリ | 主なメトリクス |
|---|---|
| CPU | CPU使用率(%)、ユーザーモード/カーネルモード使用時間 |
| メモリ | 使用量、最大使用量、制限値、キャッシュ、RSS |
| ネットワーク | 受信/送信バイト数、パケット数、ドロップ数、エラー数 |
| ブロックI/O | 読み取り/書き込みバイト数 |
| 状態 | 起動時刻、ステータス(running/stopped/paused) |
30コンテナ × 100メトリクス = 約3,000データポイント が自動で監視される。手動で設定する必要ゼロ。
ダッシュボードの構築
Zabbix APIでダッシュボード作成
第5回で「API-firstが重要」と書いたけど、まさにここでその恩恵を受ける。ダッシュボードをGUIでポチポチ作るのではなく、APIで一発で作成した。
curl -s -X POST https://zabbix.teraren.com/api_jsonrpc.php \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <TOKEN>' \ -d '{ "jsonrpc": "2.0", "method": "dashboard.create", "params": { "name": "Docker Containers", "pages": [{ "widgets": [ {"type":"graph","name":"Coolify: CPU", "x":0,"y":0,"width":36,"height":5, "fields":[{"type":6,"name":"graphid","value":"5862"}]}, {"type":"graph","name":"Coolify: Memory", "x":36,"y":0,"width":36,"height":5, "fields":[{"type":6,"name":"graphid","value":"5867"}]} ] }] }, "id": 1 }'作成したダッシュボードには、Coolify本体・Traefik Proxy・PostgreSQL・Sentinelのコンテナのリソースグラフを配置。
可視化で見えてきたこと
ダッシュボードを見て気づいたことがいくつかある。
| コンテナ | メモリ使用量 | 気づき |
|---|---|---|
| coolify-sentinel | 5.2 GB | Coolifyの全コンテナヘルスチェックを担当。メモリ食いすぎ |
| coolify | 178 MB | Laravel アプリ本体。妥当 |
| coolify-proxy (Traefik) | 84 MB | リバースプロキシ。軽量 |
| coolify-redis | 81 MB | セッション・キャッシュ。妥当 |
| coolify-realtime | 55 MB | WebSocket。妥当 |
| coolify-db (PostgreSQL) | 44 MB | 設定データのみ。軽量 |
coolify-sentinelが5.2GBも使っているのは監視なしでは絶対に気づけなかった。30+コンテナのヘルスチェックを常時回しているからだろうけど、32GBのRAMのうち16%を1つのヘルスチェッカーが使っているのは気になる。
アラート設定
コンテナ監視のアラートは「Docker by Zabbix agent 2」テンプレートに最初から含まれている。
| トリガー | 条件 | 重要度 |
|---|---|---|
| Container stopped | コンテナが停止 | Average |
| High memory usage | メモリ使用率 > 90% | Warning |
| Container restart detected | 再起動を検知 | Information |
追加でカスタムトリガーを設定する場合は、Zabbix APIでも可能。
まとめ
Zabbix + Docker by Zabbix agent 2 テンプレートで、設定ほぼゼロでコンテナ単位のリソース監視ができる。3,000以上のメトリクスが自動収集されて、ダッシュボードで可視化。sentinelの5.2GBメモリ問題のように、監視しないと絶対に気づけない問題が見つかる。
Coolifyの「API-first」思想は、監視との組み合わせでさらに威力を発揮する。「プロンプトでデプロイして、ダッシュボードで監視する」。これがセルフホストの運用ルーティン。
シリーズ記事
- Vercel月額$42→自宅サーバ月額$0。Coolifyで個人サービス基盤を作った話
- Coolifyインストールから「プロンプトでデプロイ」まで:Claude Code MCP実践
- Coolifyハンズオン:Hono・Go・Railsを実際にデプロイしてみる
- Cloudflare Tunnel×Coolify:自宅サーバを安全に外部公開する
- API-firstなインフラが生き残る:LLM時代のセルフホスト戦略
- ZabbixでDockerコンテナをリソース監視する:Coolify環境の可視化(この記事)
- Coolify環境のバックアップ戦略:6つのDBを自動ダンプ+復旧手順
- Coolify環境のログ管理と障害対応:Docker + Zabbix + Discordで運用を回す