Мониторинг LLM-фермы: Grafana + Prometheus + Docker для локальных моделей | AiManual
AiManual Logo Ai / Manual.
07 Фев 2026 Гайд

Как настроить мониторинг локальной LLM-фермы с Grafana и Prometheus: полный гайд с Docker

Пошаговый гайд по настройке мониторинга локальной LLM-фермы с Grafana, Prometheus и DCGM-exporter. Мониторинг GPU, VRAM, температуры и производительности моделе

Тихий сбой в 3 часа ночи: почему ваш LLM-сервер умирает без предупреждения

Вы запустили локальную LLM-ферму. Llama 3.2, GLM-4.7 Flash, Claude Code - все работает. До тех пор, пока в 3 часа ночи не закончится VRAM, не перегреется GPU или не упадет контейнер с моделью. Вы узнаете об этом только утром, когда пользователи жалуются на недоступность сервиса.

Проблема в том, что локальные LLM-фермы - это черные ящики. Они молча потребляют ресурсы, молча перегреваются и молча умирают. Стандартные системные мониторы показывают только загрузку CPU и RAM, но не говорят о критическом: сколько VRAM съела модель, какая температура у GPU, сколько токенов в секунду генерирует сервер.

Без мониторинга вы летите вслепую. Один сбойный запрос может занять всю видеопамять, и следующие 8 часов ваш сервер будет просто висеть, пока кто-то не перезапустит его вручную.

Решение: стек мониторинга, который видит все

Мы собираем промышленный стек мониторинга для домашней LLM-фермы. Не просто "посмотреть нагрузку", а полноценную систему с алертами, дашбордами и историей метрик.

Вот что нам нужно отслеживать:

  • Использование VRAM по GPU и по процессу
  • Температуру GPU (критично для долгой работы)
  • Загрузку GPU (utilization) - чтобы понять, не простаивает ли железо
  • Потребление энергии (power draw) - для расчета стоимости электричества
  • Производительность LLM-сервера: токены в секунду, latency запросов
  • Статус контейнеров Docker
  • Сетевую активность между клиентами и сервером

Стек технологий: Prometheus как сборщик метрик, Grafana для визуализации, DCGM-exporter для мониторинга NVIDIA GPU, cAdvisor для мониторинга контейнеров, и node-exporter для системных метрик.

💡
DCGM-exporter - это официальный инструмент от NVIDIA для мониторинга GPU через Data Center GPU Manager. Он дает доступ к 50+ метрикам, которые обычные утилиты не показывают. Обязательно используйте версию 3.5.0 или новее - в ней исправлены баги с мониторингом VRAM для современных карт серии RTX 5000.

Шаг 1: Подготовка системы и установка Docker

Предположим, у вас уже есть работающая LLM-ферма. Если нет - посмотрите мой гайд по запуску локальной LLM-инфраструктуры на домашнем железе.

Проверяем, что Docker установлен и работает:

docker --version
systemctl status docker

Если Docker не установлен:

# Для Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker

Важно: если вы используете NVIDIA GPU, убедитесь, что установлены драйверы версии 550 или новее и nvidia-container-toolkit. Без этого DCGM-exporter не увидит ваши карты.

1 Создаем сеть Docker для мониторинга

Все компоненты стека должны общаться между собой. Создаем изолированную сеть:

docker network create monitoring

Эта сеть будет использоваться всеми контейнерами мониторинга. LLM-серверы могут оставаться в своих сетях или в этой же - зависит от вашей архитектуры.

Шаг 2: Запускаем Prometheus - сборщик метрик

Prometheus - это временная база данных, которая будет собирать и хранить все метрики. Создаем конфигурационный файл:

# 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']

  - job_name: 'dcgm-exporter'
    static_configs:
      - targets: ['dcgm-exporter:9400']

  - job_name: 'llama-server'
    static_configs:
      - targets: ['llama-server:8000']  # Ваш LLM-сервер
    metrics_path: '/metrics'  # Если поддерживает Prometheus метрики

Теперь запускаем Prometheus в Docker:

docker run -d \
  --name=prometheus \
  --network=monitoring \
  -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus:latest

Проверяем, что Prometheus работает:

curl http://localhost:9090/-/healthy
💡
Используйте последнюю версию Prometheus (на февраль 2026 это 3.0+). В ней улучшена работа с большими объемами метрик и добавлена поддержка native histograms для более точного мониторинга latency.

Шаг 3: DCGM-exporter - мониторинг GPU от NVIDIA

Это самый важный компонент для LLM-фермы. DCGM-exporter дает доступ к метрикам, которые nvidia-smi показывает только в реальном времени.

Запускаем контейнер с DCGM-exporter:

docker run -d \
  --name=dcgm-exporter \
  --network=monitoring \
  --runtime=nvidia \
  -p 9400:9400 \
  -v /run/nvidia:/run/nvidia \
  nvcr.io/nvidia/k8s/dcgm-exporter:3.5.0

Ключевые моменты:

  • --runtime=nvidia - обязательно для доступа к GPU
  • -v /run/nvidia:/run/nvidia - монтируем сокет NVIDIA
  • Используем версию 3.5.0 или новее

Проверяем, что метрики доступны:

curl http://localhost:9400/metrics | grep -i "gpu" | head -5

Вы должны увидеть что-то вроде:

DCGM_FI_DEV_GPU_TEMP{gpu="0",UUID="GPU-1234"} 65
DCGM_FI_DEV_MEM_COPY_UTIL{gpu="0",UUID="GPU-1234"} 45
DCGM_FI_DEV_FB_USED{gpu="0",UUID="GPU-1234"} 12000

Ошибка: если вы видите "No GPUs found", проверьте, что nvidia-container-toolkit установлен и работает. Перезапустите Docker: sudo systemctl restart docker.

Шаг 4: cAdvisor и node-exporter - мониторинг контейнеров и системы

cAdvisor отслеживает ресурсы Docker-контейнеров, node-exporter - системные метрики хоста.

Запускаем cAdvisor:

docker run -d \
  --name=cadvisor \
  --network=monitoring \
  -p 8080:8080 \
  -v /:/rootfs:ro \
  -v /var/run:/var/run:ro \
  -v /sys:/sys:ro \
  -v /var/lib/docker/:/var/lib/docker:ro \
  gcr.io/cadvisor/cadvisor:latest

Запускаем node-exporter:

docker run -d \
  --name=node-exporter \
  --network=monitoring \
  -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  prom/node-exporter:latest

Шаг 5: Grafana - визуализация и дашборды

Теперь, когда метрики собираются, нужно их красиво отображать. Запускаем Grafana:

docker run -d \
  --name=grafana \
  --network=monitoring \
  -p 3000:3000 \
  -v grafana-storage:/var/lib/grafana \
  grafana/grafana:latest

Открываем http://localhost:3000 в браузере. Логин: admin, пароль: admin (сразу меняем!).

Добавляем источник данных Prometheus:

  1. Configuration → Data Sources → Add data source
  2. Выбираем Prometheus
  3. URL: http://prometheus:9090 (важно: используем имя контейнера, так как они в одной сети)
  4. Save & Test

2 Импортируем готовые дашборды для LLM-фермы

Не нужно создавать дашборды с нуля. Используем готовые:

  • DCGM Exporter Dashboard (ID: 12239) - мониторинг GPU
  • Node Exporter Full (ID: 1860) - системные метрики
  • Docker Monitoring (ID: 193) - мониторинг контейнеров

Импортируем дашборд для GPU:

  1. Create → Import
  2. Вводим 12239 → Load
  3. Выбираем Prometheus как источник данных
  4. Import

Теперь у вас есть дашборд с графиками температуры, использования VRAM, загрузки GPU и потребления энергии.

Шаг 6: Мониторинг самого LLM-сервера

Стандартные метрики - это хорошо, но нам нужно знать, как работает именно LLM-сервер. Если вы используете Ollama, vLLM или llama.cpp - у них есть встроенная поддержка Prometheus метрик.

Пример для Ollama (версия 0.5.0+):

# docker-compose.yml для Ollama с метриками
version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
      - "8000:8000"  # Метрики Prometheus
    volumes:
      - ollama_data:/root/.ollama
    environment:
      - OLLAMA_METRICS=true  # Включаем метрики
      - OLLAMA_METRICS_PORT=8000
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama_data:

Запускаем и проверяем метрики:

curl http://localhost:8000/metrics | grep -i "llama"

Добавляем в prometheus.yml:

scrape_configs:
  - job_name: 'ollama'
    static_configs:
      - targets: ['ollama:8000']
    metrics_path: '/metrics'
💡
Если ваш LLM-сервер не поддерживает Prometheus метрики из коробки, добавьте их самостоятельно. Напишите простой экспортер на Python, который будет собирать latency, количество запросов, токены в секунду и отдавать их в формате Prometheus.

Шаг 7: Настройка алертов - чтобы узнавать о проблемах первым

Мониторинг без алертов - просто красивые графики. Настраиваем алерты в Prometheus.

Создаем файл alerts.yml:

groups:
- name: llm-farm-alerts
  rules:
  - alert: HighGPUTemperature
    expr: DCGM_FI_DEV_GPU_TEMP > 85
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "GPU {{ $labels.gpu }} temperature is {{ $value }}°C"
      description: "GPU temperature exceeded 85°C for 5 minutes"

  - alert: HighVRAMUsage
    expr: DCGM_FI_DEV_FB_USED / DCGM_FI_DEV_FB_FREE > 0.9
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "GPU {{ $labels.gpu }} VRAM usage is {{ $value | humanizePercentage }}"
      description: "VRAM usage exceeded 90% for 2 minutes"

  - alert: LLMServerDown
    expr: up{job="ollama"} == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "LLM server is down"
      description: "Ollama server has been down for more than 1 minute"

Обновляем prometheus.yml:

rule_files:
  - "alerts.yml"

Перезапускаем Prometheus:

docker restart prometheus

Теперь в Grafana можно настроить уведомления:

  1. Alerting → Contact points → Add contact point
  2. Выбираем тип (Email, Slack, Telegram)
  3. Настраиваем канал уведомлений
  4. Создаем правило алерта на основе Prometheus запроса

Шаг 8: Собираем все в docker-compose.yml

Управлять 5+ контейнерами через отдельные команды docker run - неудобно. Создаем единый 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
      - ./alerts.yml:/etc/prometheus/alerts.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=30d'
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=secure_password_here
    networks:
      - monitoring
    depends_on:
      - prometheus

  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.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
    networks:
      - monitoring

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    networks:
      - monitoring

  dcgm-exporter:
    image: nvcr.io/nvidia/k8s/dcgm-exporter:3.5.0
    container_name: dcgm-exporter
    ports:
      - "9400:9400"
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    volumes:
      - /run/nvidia:/run/nvidia
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge

volumes:
  prometheus_data:
  grafana_data:

Запускаем все одной командой:

docker-compose up -d

Типичные ошибки и как их избежать

Ошибка Причина Решение
DCGM-exporter не видит GPU Отсутствует nvidia-container-toolkit или устаревшие драйверы Установить nvidia-container-toolkit и драйверы версии 550+
Prometheus не собирает метрики Неправильные имена хостов в конфигурации Использовать имена контейнеров, а не localhost
Высокая нагрузка на CPU от Prometheus Слишком частый сбор метрик (scrape_interval) Увеличить interval до 30s для ненужных метрик
Grafana не подключается к Prometheus Разные сети Docker Поместить все контейнеры в одну сеть
Метрики LLM-сервера не отображаются Сервер не поддерживает Prometheus или порт закрыт Включить метрики в настройках сервера или написать экспортер

Что дальше? Продвинутый мониторинг для продвинутых ферм

Базовый мониторинг работает. Теперь можно добавить продвинутые фичи:

  • Мониторинг качества ответов: отслеживайте perplexity, точность ответов на тестовых запросах
  • A/B тестирование моделей: запустите две версии модели и сравнивайте их метрики в реальном времени
  • Прогнозирование нагрузки: используйте машинное обучение для предсказания пиков нагрузки
  • Интеграция с системами оркестрации: если у вас несколько серверов, добавьте мониторинг в Kubernetes

Если вы строите серьезную ферму с несколькими GPU, посмотрите мой гайд по сборке компактного DGX-кластера - там есть секция по мониторингу распределенных систем.

Самый важный совет: настройте алерт на температуру GPU. Одна перегретая карта может стоить вам $2000+ на замену. Лучше получить 100 ложных срабатываний, чем пропустить одно настоящее.

Теперь у вас есть полноценная система мониторинга локальной LLM-фермы. Вы видите не только что сервер работает, но и как он работает, насколько эффективно использует ресурсы, и когда нужно вмешаться до того, как все упадет.

Больше не нужно гадать, почему модель тормозит. Откройте Grafana, посмотрите на графики VRAM, температуры и latency - и вы сразу поймете, в чем проблема. Это не роскошь, это необходимость для любой серьезной LLM-инфраструктуры.