treeru.com
개발

GPU 모니터링 자동화 — 셸 스크립트 하나로 24/7 감시

2026-01-26
Treeru

GPU 서버를 운영하면서 "갑자기 느려졌는데 원인을 모르겠다"는 상황을 겪어보셨나요? nvidia-smicron을 조합하면 셸 스크립트 하나로 GPU 상태를 24시간 기록하고, 이상 징후를 즉시 감지할 수 있습니다. Prometheus 같은 무거운 도구 없이 바로 시작하는 방법을 정리합니다. 서버가 늘어나면 Grafana + Prometheus 통합 모니터링 도 고려해 보세요.

5분

수집 간격

CSV

로그 포맷

24/7

무인 운영

~50줄

스크립트 크기

1nvidia-smi 기본 사용법

nvidia-smi는 NVIDIA 드라이버에 포함된 GPU 관리 도구입니다. 기본 실행만으로도 GPU 상태를 한눈에 볼 수 있지만, 모니터링 자동화에는 쿼리 모드가 핵심입니다.

# 기본 명령어

# GPU 상태 전체 조회
nvidia-smi

# 특정 항목만 CSV로 출력 (핵심)
nvidia-smi --query-gpu=timestamp,name,temperature.gpu,\
utilization.gpu,utilization.memory,memory.used,\
memory.total,power.draw --format=csv,noheader,nounits

# 출력 예시:
# 2026/02/24 14:30:05, NVIDIA RTX PRO 6000, 62, 87, 45, 38400, 98304, 285.32
쿼리 항목설명단위
timestamp기록 시각YYYY/MM/DD HH:MM:SS
nameGPU 모델명문자열
temperature.gpuGPU 코어 온도°C
utilization.gpuGPU 연산 사용률%
utilization.memory메모리 컨트롤러 사용률%
memory.used사용 중인 VRAMMiB
memory.total전체 VRAMMiB
power.draw현재 소비 전력W

--format 옵션이 핵심입니다

csv,noheader,nounits 조합을 사용하면 파싱하기 쉬운 깨끗한 CSV를 얻을 수 있습니다. 단위(°C, MiB 등)를 제거해야 후처리가 편합니다.

2모니터링 스크립트 작성

nvidia-smi 출력을 파일로 저장하는 셸 스크립트를 작성합니다. 날짜별로 로그 파일을 분리하고, 헤더를 자동으로 추가하는 로직이 포함되어 있습니다.

# gpu-monitor.sh

#!/bin/bash

LOG_DIR="/var/log/gpu-monitor"
DATE=$(date +%Y-%m-%d)
LOG_FILE="$LOG_DIR/gpu_$DATE.csv"

# 로그 디렉토리 생성
mkdir -p "$LOG_DIR"

# 헤더가 없으면 추가
if [ ! -f "$LOG_FILE" ]; then
  echo "timestamp,gpu_name,temp_c,gpu_util,mem_util,\
mem_used_mib,mem_total_mib,power_w" > "$LOG_FILE"
fi

# GPU 데이터 수집 및 저장
nvidia-smi --query-gpu=timestamp,name,\
temperature.gpu,utilization.gpu,\
utilization.memory,memory.used,\
memory.total,power.draw \
--format=csv,noheader,nounits >> "$LOG_FILE"

echo "[$(date)] GPU 로그 기록 완료"

# 실행 및 권한 설정

# 실행 권한 부여
chmod +x gpu-monitor.sh

# 테스트 실행
./gpu-monitor.sh

# 로그 확인
cat /var/log/gpu-monitor/gpu_2026-02-24.csv

멀티 GPU 환경에서는

GPU가 여러 장일 경우 nvidia-smi가 자동으로 모든 GPU 데이터를 출력합니다. -i 옵션으로 특정 GPU만 모니터링할 수도 있습니다. (예: nvidia-smi -i 0)

3CSV 포맷 설계

잘 설계된 CSV 포맷은 나중에 분석할 때 큰 차이를 만듭니다. 어떤 항목을 수집하고, 어떤 형식으로 저장할지 미리 정해두는 게 좋습니다.

컬럼타입설명활용
timestampdatetime수집 시각시간대별 패턴 분석
gpu_namestringGPU 모델명멀티 GPU 구분
temp_cintGPU 온도발열 추세 감지
gpu_utilintGPU 사용률부하 패턴 분석
mem_utilint메모리 사용률메모리 병목 감지
mem_used_mibintVRAM 사용량모델 크기 추적
mem_total_mibint전체 VRAM잔여 용량 계산
power_wfloat소비 전력전기료 추정

# 실제 CSV 출력 예시

timestamp,gpu_name,temp_c,gpu_util,mem_util,mem_used_mib,mem_total_mib,power_w
2026/02/24 14:30:05, NVIDIA RTX PRO 6000, 62, 87, 45, 38400, 98304, 285.32
2026/02/24 14:35:05, NVIDIA RTX PRO 6000, 64, 92, 48, 38400, 98304, 298.15
2026/02/24 14:40:05, NVIDIA RTX PRO 6000, 63, 85, 44, 38400, 98304, 280.47

날짜별 파일 분리를 권장합니다

하나의 파일에 계속 쌓으면 용량이 커져서 분석이 힘들어집니다. 날짜별로 분리하면 특정 날짜 데이터만 빠르게 조회할 수 있고, 오래된 파일을 자동 삭제하기도 편합니다.

4cron 스케줄링 설정

스크립트를 수동으로 실행하면 의미가 없습니다. cron에 등록해서 자동으로 5분마다 실행되게 설정합니다.

# cron 등록

# crontab 편집
crontab -e

# 5분마다 GPU 모니터링 실행
*/5 * * * * /opt/scripts/gpu-monitor.sh >> /var/log/gpu-monitor/cron.log 2>&1

# 1분마다 (더 정밀한 모니터링)
*/1 * * * * /opt/scripts/gpu-monitor.sh >> /var/log/gpu-monitor/cron.log 2>&1

# 등록 확인
crontab -l
수집 간격일일 레코드 수월간 CSV 크기권장 용도
1분1,440~5MB실시간 디버깅 중
5분288~1MB일반 운영 (권장)
15분96~350KB장기 추세 분석
1시간24~90KB최소 모니터링

5분 간격이 가장 실용적입니다

1분 간격은 디스크 부담이 크고, 15분은 급격한 변화를 놓칠 수 있습니다.5분 간격이면 대부분의 이상 패턴을 잡으면서도 저장 부담이 적습니다.GPU 1장 기준 월 1MB 수준이라 디스크 걱정도 없습니다.

5임계값 알림 설정

데이터를 쌓기만 하면 의미가 없습니다. 임계값을 넘으면 즉시 알림을 보내는 로직을 추가합니다.

# gpu-alert.sh - 임계값 알림 스크립트

#!/bin/bash

TEMP_THRESHOLD=85
UTIL_THRESHOLD=95
MEM_THRESHOLD=90
ALERT_LOG="/var/log/gpu-monitor/alerts.log"

# GPU 데이터 수집
DATA=$(nvidia-smi --query-gpu=temperature.gpu,\
utilization.gpu,utilization.memory \
--format=csv,noheader,nounits)

TEMP=$(echo "$DATA" | awk -F', ' '{print $1}')
GPU_UTIL=$(echo "$DATA" | awk -F', ' '{print $2}')
MEM_UTIL=$(echo "$DATA" | awk -F', ' '{print $3}')

ALERT=""

if [ "$TEMP" -ge "$TEMP_THRESHOLD" ]; then
  ALERT+="[경고] GPU 온도 $TEMP°C (임계값: $TEMP_THRESHOLD°C)\n"
fi

if [ "$GPU_UTIL" -ge "$UTIL_THRESHOLD" ]; then
  ALERT+="[경고] GPU 사용률 $GPU_UTIL% (임계값: $UTIL_THRESHOLD%)\n"
fi

if [ "$MEM_UTIL" -ge "$MEM_THRESHOLD" ]; then
  ALERT+="[경고] VRAM 사용률 $MEM_UTIL% (임계값: $MEM_THRESHOLD%)\n"
fi

if [ -n "$ALERT" ]; then
  echo -e "[$(date)] $ALERT" >> "$ALERT_LOG"
  # 여기에 Slack/이메일 알림 추가 가능
fi
모니터링 항목주의 임계값위험 임계값대응 방안
GPU 온도80°C90°C쿨링 확인, 전력 제한
GPU 사용률95%100% 지속작업 분산, 큐 조정
VRAM 사용률90%98%+모델 크기 조정, 배치 축소
소비 전력TDP 90%TDP 초과전력 제한 설정

멀티 GPU 환경에서의 알림 스크립트

위 알림 스크립트는 단일 GPU 환경 기준입니다. GPU가 여러 장이면 nvidia-smi가 GPU당 한 줄씩 출력하므로,while read 루프로 각 줄을 순회하거나nvidia-smi -i 0, -i 1처럼 GPU 인덱스를 지정하여 개별 확인해야 합니다. 단일 GPU 스크립트를 멀티 GPU 서버에 그대로 적용하면 첫 번째 GPU만 모니터링되므로 주의하세요.

온도 90°C 이상은 즉각 대응하세요

GPU 온도가 90°C를 넘으면 쓰로틀링이 시작되어 성능이 급감합니다. 95°C 이상이 지속되면 하드웨어 수명에도 영향을 줍니다. 알림을 받으면 즉시 쿨링 환경을 점검하세요.

6로그 로테이션

로그를 계속 쌓기만 하면 디스크가 가득 찹니다. logrotate를 활용해 오래된 로그를 자동으로 압축하고 삭제합니다.

# /etc/logrotate.d/gpu-monitor

/var/log/gpu-monitor/gpu_*.csv {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
}

# 설명:
# daily        - 매일 로테이션
# rotate 30    - 최근 30일 보관
# compress     - gzip 압축
# delaycompress - 하루 뒤 압축 (당일 로그는 압축 안 함)
# missingok    - 파일 없어도 에러 안 냄

# 또는 셸 스크립트로 직접 관리

#!/bin/bash
# cleanup-gpu-logs.sh - 30일 이상 된 로그 삭제

LOG_DIR="/var/log/gpu-monitor"
RETENTION_DAYS=30

find "$LOG_DIR" -name "gpu_*.csv" \
  -mtime +$RETENTION_DAYS -delete

echo "[$(date)] $RETENTION_DAYS일 이상 된 로그 삭제 완료"

저장 용량 계산 (GPU 1장 기준)

5분 간격: 일 288행, 약 35KB/일
30일 보관 시: 약 1MB (압축 전)
gzip 압축 시: 약 200KB/월
1년 보관 시: 약 2.5MB (압축 후)

디스크 풀(full)은 서버를 멈춥니다

로그가 디스크를 가득 채우면 OS 자체가 멈출 수 있습니다. 특히 /var 파티션이 분리되지 않은 환경에서는 더 위험합니다. 로그 로테이션은 모니터링 자체보다 중요한 설정입니다.

이 글의 핵심 정리

  • nvidia-smi --query-gpu로 원하는 항목만 CSV 포맷으로 추출
  • 셸 스크립트 ~50줄로 날짜별 로그 수집 자동화 구현
  • cron 5분 간격이 일반 운영에 가장 적합 — GPU 1장당 월 1MB 수준
  • 임계값 알림으로 온도 85°C, 사용률 95% 초과 시 즉시 감지
  • logrotate로 30일 로테이션 — 디스크 풀 방지는 필수

본 글은 2026년 2월 기준으로 작성되었습니다. nvidia-smi의 쿼리 항목은 드라이버 버전에 따라 달라질 수 있으며, 스크립트는 환경에 맞게 수정이 필요할 수 있습니다. 임계값은 GPU 모델과 운영 환경에 따라 조정해야 합니다. 본 콘텐츠의 비상업적 공유는 자유이나, 상업적 이용 시 문의 페이지를 통해 연락 바랍니다.

AI 서버 구축이나 관리가 필요하신가요?

Treeru가 GPU 서버 모니터링부터 AI 인프라 구축까지 도와드립니다.

무료 상담 신청하기
T

Treeru

웹 개발, IT 인프라, AI 솔루션 분야의 실무 인사이트를 공유합니다. 기업의 디지털 전환을 돕는 IT 파트너, Treeru입니다.

공유

댓글

(4개)
4.38/ 5

로그인하면 댓글을 작성할 수 있습니다.

2026-02-07
454.0

nvidia-smi 옵션이 이렇게 다양한 줄 몰랐습니다. --query-gpu 옵션으로 원하는 항목만 뽑는 게 깔끔하네요.

2026-02-04
555.0

로그 로테이션을 logrotate로 연동하는 부분이 특히 좋습니다. 디스크가 가득 차서 서버가 멈춘 적이 있어서요.

2026-01-31
4.554.5

Prometheus + Grafana 세팅이 부담스러운 소규모 환경에서는 이 방법이 최고입니다. CSV로 쌓아놓으면 나중에 분석도 편하고요.

관련 글

© 2026 TreeRU. All rights reserved.

본 콘텐츠의 저작권은 TreeRU에 있으며, 출처를 밝히지 않은 무단 전재 및 재배포를 금합니다. 인용 시 출처(treeru.com)를 반드시 명시해 주세요.