はじめに
自宅サーバーやVMにDocker Composeを使って、監視・管理ツール一式を構築する方法を紹介します。この構成で以下のことが実現できます:
- サーバーリソースの可視化(CPU、メモリ、ディスク)
- コンテナの管理(起動・停止・ログ確認)
- サービスの死活監視(ダウン時にアラート)
- プライベートクラウドストレージ(自前Dropbox)
構築するサービス一覧
| サービス | 用途 | ポート |
|---|---|---|
| Grafana | ダッシュボード・可視化 | 3000 |
| Prometheus | メトリクス収集・保存 | 9090 |
| Node Exporter | サーバーメトリクス取得 | 9100 |
| cAdvisor | コンテナメトリクス取得 | 8084 |
| Portainer | Docker管理WebUI | 9000 |
| Uptime Kuma | サービス死活監視 | 3001 |
| Nextcloud | ファイル共有 | 8085 |
前提条件
- Ubuntu 22.04 LTS(または同等のLinux)
- Docker / Docker Compose インストール済み
- 最低4GB RAM(推奨8GB以上)
ディレクトリ構成
~/monitoring/
├── docker-compose.yml
└── prometheus.yml1. docker-compose.yml の作成
version: '3.8'
services:
# メトリクス収集
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
restart: unless-stopped
# サーバーメトリクス
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
restart: unless-stopped
# コンテナメトリクス
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- "8084:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
restart: unless-stopped
# ダッシュボード
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=your_secure_password_here
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
- grafana_data:/var/lib/grafana
depends_on:
- prometheus
restart: unless-stopped
# Docker管理UI
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
ports:
- "9000:9000"
- "8000:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
restart: unless-stopped
# 死活監視
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- uptime_kuma_data:/app/data
restart: unless-stopped
# ファイル共有 - データベース
nextcloud-db:
image: mariadb:10.11
container_name: nextcloud-db
environment:
- MYSQL_ROOT_PASSWORD=your_mysql_root_password
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=your_mysql_password
volumes:
- nextcloud_db_data:/var/lib/mysql
restart: unless-stopped
# ファイル共有 - キャッシュ
nextcloud-redis:
image: redis:alpine
container_name: nextcloud-redis
restart: unless-stopped
# ファイル共有 - メイン
nextcloud:
image: nextcloud:latest
container_name: nextcloud
ports:
- "8085:80"
environment:
- MYSQL_HOST=nextcloud-db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=your_mysql_password
- REDIS_HOST=nextcloud-redis
volumes:
- nextcloud_data:/var/www/html
depends_on:
- nextcloud-db
- nextcloud-redis
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:
portainer_data:
uptime_kuma_data:
nextcloud_db_data:
nextcloud_data:2. prometheus.yml の作成
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']3. 起動
cd ~/monitoring
docker compose up -d全コンテナの起動を確認:
docker compose ps4. 各サービスの初期設定
Portainer(Docker管理)
http://your-server-ip:9000にアクセス- 管理者アカウントを作成
- 「Get Started」→「local」を選択
Grafana(ダッシュボード)
http://your-server-ip:3000にアクセス- 設定したユーザー名/パスワードでログイン
- データソース追加:
- Connections → Data sources → Add data source
- Prometheus を選択
- URL:
http://prometheus:9090 - Save & test
- ダッシュボードインポート:
- Dashboards → Import
- ID:
1860(Node Exporter Full)を入力 - Load → データソースでPrometheusを選択 → Import
Uptime Kuma(死活監視)
http://your-server-ip:3001にアクセス- 管理者アカウントを作成
- 「Add New Monitor」で監視対象を追加:
- Monitor Type: HTTP(s)
- URL: 監視したいサービスのURL
- Heartbeat Interval: 60秒
Nextcloud(ファイル共有)
http://your-server-ip:8085にアクセス- 管理者アカウントを作成
- 初期設定完了を待つ(数分かかる場合あり)
5. 推奨する監視設定(Uptime Kuma)
| 監視名 | タイプ | URL |
|---|---|---|
| Grafana | HTTP(s) | http://localhost:3000 |
| Prometheus | HTTP(s) | http://localhost:9090 |
| Portainer | HTTP(s) | http://localhost:9000 |
| Nextcloud | HTTP(s) | http://localhost:8085 |
6. おすすめGrafanaダッシュボード
| ID | 名前 | 用途 |
|---|---|---|
| 1860 | Node Exporter Full | サーバーリソース詳細 |
| 893 | Docker Container | コンテナ監視 |
| 11074 | Node Exporter for Prometheus | シンプル版 |
よくあるトラブルと対処法
コンテナが起動しない
# ログを確認
docker logs コンテナ名
# 再起動
docker compose restart サービス名Prometheusでターゲットがdown
- http://your-server-ip:9090/targets を確認
- エラーメッセージを確認
- 対象コンテナが起動しているか確認
メモリ不足
# メモリ使用量確認
free -h
# コンテナごとの使用量
docker stats --no-streamメモリが不足している場合:
- 不要なコンテナを停止
- スワップ領域を追加
- サーバーのメモリを増設
リソース目安
| 構成 | 推奨メモリ |
|---|---|
| Prometheus + Grafana + Node Exporter | 2GB |
| 上記 + Portainer + Uptime Kuma | 3GB |
| 全部入り(Nextcloud含む) | 4GB+ |
セキュリティ上の注意
- パスワードは必ず変更
your_secure_password_hereは強力なパスワードに変更- 各サービスのデフォルトパスワードは必ず変更
- 外部公開時はリバースプロキシ + SSL
- Nginx等でSSL終端
- 基本認証の追加を検討
- ファイアウォール設定
- 不要なポートは閉じる
- 必要なポートのみ開放
まとめ
Docker Composeを使えば、監視・管理ツール一式を簡単に構築できます。
構築したもの:
- Grafana + Prometheus: メトリクス可視化
- Portainer: Docker管理UI
- Uptime Kuma: サービス監視
- Nextcloud: プライベートクラウド
一度設定してしまえば、サーバーの状態を常に把握でき、問題の早期発見につながります。
参考リンク:
コメント (0)
まだコメントはありません。最初のコメントを投稿してください!