はじめに
はじめまして「今日も監視くん」として初めての投稿です。
10名のチームで監視運用を担当しています。
JIMUCでは「オブザーバビリティ × SRE運用の推進」について登壇し、現場目線でよりモダンな運用にステップアップするには?についてお話しました。
今回Observabilityへの道ということで、自宅のサーバで監視製品を入れたりとか色々やりながらObservabilityとは?というところを探っていきたいと思います。今回はその第一弾として、自宅サーバ(Ubuntu)で Prometheus から GPU まで監視 できる状態を作りました。実際に動いた手順とファイル内容 をまとめます。
Observabilityへの道シリーズ
このシリーズでは、監視スタックを段階的に構築しながら「見える化」から「使える監視」へと進めていきます。
1.Prometheusでメトリクス監視を構築
https://qiita.com/KanshiKun/items/1176246d27e52be652eb
2.AlertmanagerでSlack通知
https://qiita.com/KanshiKun/items/c56754fa6baaffec5de0
3.Grafanaでメトリクス可視化
https://qiita.com/KanshiKun/items/5979d2aaed5221ce0a1e
4.Minecraftサーバ監視
https://qiita.com/KanshiKun/items/65446702d765ec580d7a
5.Mincraftサーバの障害を定義(アラートルール作成)
https://qiita.com/KanshiKun/items/8f8239b65639e9d3c749
6.AWSを監視拠点にした外形監視の実装
https://qiita.com/drafts/5002eb89d4019ed96ccc/edit
7.Loki × Promtail × Grafanaでログを可視化する
https://qiita.com/KanshiKun/items/4b768d00433d1b5f700b
8.ログから監視を設計する 〜「何が起きているか」を捉える〜
https://qiita.com/drafts/6642323ec0b45368e932/edit
できるようになること
- Prometheus を Docker で起動できる
- node-exporter を scrape して CPU/メモリ等を監視できる
- dcgm-exporter を scrape して GPU使用率を監視できる
- GPU負荷をかけた際の推移を確認できる
前提環境
- Ubuntu
- Docker / Docker Compose
- NVIDIA GPU 搭載(RTX 4070 Ti SUPER)
- GPUをコンテナから利用できる状態(
runtime: nvidiaが有効)
Stable Diffusionによる画像生成と、息子(7歳)、娘(5歳)に向けてマインクラフトサーバを運用してサービスを提供しています。たまにユーザ(息子、娘)からログインできない!とクレームが入ります汗。今回の活動を通して、外形監視と自動復復旧を取り入れてユーザの体感を向上させたいです。
ディレクトリ構成(実際)
作業ディレクトリ:
/root/monitoring/prometheus
中身は以下の2ファイルのみです。
docker-compose.yml
prometheus.yml
docker-compose.yml(実ファイル)
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
restart: unless-stopped
node-exporter:
image: prom/node-exporter
container_name: node-exporter
ports:
- "9100:9100"
restart: unless-stopped
dcgm-exporter:
image: nvcr.io/nvidia/k8s/dcgm-exporter:latest
container_name: dcgm-exporter
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
ports:
- "9400:9400"
restart: unless-stopped
docker-compose.yml(実ファイル)
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"]
- job_name: "gpu"
static_configs:
- targets: ["dcgm-exporter:9400"]
起動手順
作業ディレクトリで実行します。
cd /root/monitoring/prometheus
docker compose up -d
動作確認
1. コンテナ確認
docker ps
以下が Up になっていればOKです。
- prometheus
- node-exporter
- dcgm-exporter
2. Prometheus UI
ブラウザでアクセスします。
http://<サーバIP>:9090
GPUメトリクス確認(PromQL)
Prometheus UIで以下を実行します。
DCGM_FI_DEV_GPU_UTIL
Graphタグを選択するとGPU使用率の推移が表示されます。
実際に負荷をかけてみる
趣味で生成AIによる画像生成をしていたりします。Stable Diffusionで、
- 2048×2048
- step 150
を実行すると、GPU使用率が急上昇します。
GPUのファンが凄くうるさい音を出すのですが、目視で「重い」ではなく、
数値で「100%近い」と確認できる。
これが監視の価値ですね。
よく使うメトリクス
-
GPU使用率
DCGM_FI_DEV_GPU_UTIL -
GPUメモリ使用量
DCGM_FI_DEV_FB_USED -
消費電力
DCGM_FI_DEV_POWER_USAGE
まとめ
Prometheusを中心に、
- node-exporter(CPU / メモリ)
- dcgm-exporter(GPU)
まで監視できる状態を、自宅サーバで構築しました。
やったことはシンプルです。
- docker-compose.yml を作成
- prometheus.yml に scrape を追加
docker compose up -d
それだけです。
監視くん的に最後に一言。
見えるようにした瞬間、次の一手が打てる。
次のステップ
次は、
- Minecraftサーバの外形監視
- Alertmanager導入
- Grafana追加
まで進めたいと思います。



