DGX GPU 사용률이랑 온도 확인용 대시보드 작업.
SSH로 매번 nvidia-smi 치기 귀찮아서 Prometheus / Grafana에 붙임.
구성.
Main 서버
Prometheus 9090
Grafana 3000
DGX
Node Exporter 9100
GPU Metrics Exporter 9400
nvidia-smi
Node Exporter 실행.
docker run -d \
--name node-exporter \
--net host \
--pid host \
--userns host \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
prom/node-exporter:latest \
--path.procfs=/host/proc \
--path.rootfs=/rootfs \
--path.sysfs=/host/sys
DCGM Exporter는 ARM64에서 애매해서 nvidia-smi를 직접 긁는 방식으로 처리.
gpu_metrics_simple.sh
#!/bin/bash
# gpu_metrics_simple.sh
while true; do
{
echo "HTTP/1.1 200 OK"
echo "Content-Type: text/plain"
echo ""
nvidia-smi --query-gpu=index,name,utilization.gpu,temperature.gpu \
--format=csv,noheader,nounits 2>/dev/null | awk -F',' '
{
gsub(/^[ \t]+|[ \t]+$/, "")
gpu=$1; name=$2; util=$3; temp=$4
if (gpu != "") {
gsub(/ /, "_", name)
print "nvidia_smi_gpu_utilization{gpu=\"" gpu "\",name=\"" name "\"} " (util=="" || util=="N/A" ? "0" : util)
print "nvidia_smi_gpu_temperature_celsius{gpu=\"" gpu "\"} " (temp=="" || temp=="N/A" ? "0" : temp)
}
}'
} | nc -w1 -l -p 9400
done
백그라운드 실행.
nohup bash gpu_metrics_simple.sh > /dev/null 2>&1 &
Prometheus 설정.
prometheus.yml
scrape_configs:
- job_name: 'remote-ollama-server'
scrape_interval: 15s
scrape_timeout: 10s
static_configs:
- targets: ['gpu-server.example.com:59100']
labels:
instance: 'ollama-server'
region: 'remote'
- job_name: 'gpu-metrics'
scrape_interval: 15s
scrape_timeout: 10s
static_configs:
- targets: ['gpu-server.example.com:59400']
labels:
instance: 'ollama-gpu'
region: 'remote'
Prometheus 리로드.
curl -X POST http://localhost:9090/-/reload
Grafana 패널.
GPU 사용률.
nvidia_smi_gpu_utilization{job="gpu-metrics"}
GPU 온도.
nvidia_smi_gpu_temperature_celsius{job="gpu-metrics"}
수집 메트릭.
nvidia_smi_gpu_utilization
nvidia_smi_gpu_temperature_celsius
확인용.
watch nvidia-smi
Prometheus target 확인.
Grafana 대시보드 확인.
문제.
DCGM Exporter ARM64 이미지가 안 맞음.
GB10 GPU 메모리 값은 N/A로 나와서 일단 사용률과 온도만 수집.
Grafana 대시보드 UID 중복으로 프로비저닝 충돌도 있었음.
중복 파일 정리 후 Grafana 재시작.
rm gpu-monitoring.json gpu-monitoring-updated.json
docker restart grafana