English translation is not available yet. Showing Russian content.

Настроить дашборд для failures

ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Настроить дашборд для failures

1. Цель задачи

Разработать и развернуть дашборд визуализации ошибок LLM-системы по типам (timeout, галлюцинация, rate limit). Дашборд должен позволять оперативно отслеживать частоту и распределение failures, выявлять аномалии и использовать как источник данных для postmortem-анализа.

Ключевой результат Работающий дашборд в Grafana (или аналоге) с тремя панелями: временной ряд по типам ошибок, круговая диаграмма распределения, таблица последних ошибок.

2. Исходные данные

Что нужноОткуда взять
Источник данных об ошибках (логи, метрики)Prometheus / Loki / ClickHouse / CSV-файл с логами
Инструмент для дашбордаGrafana (или аналог: Metabase, Redash)
Типы ошибок для визуализацииtimeout, hallucination, rate_limit + опционально: context_length_exceeded, tool_call_failure
Метки времени и severityЛоги приложения

Если нет реального инструмента — симулируем:

  1. Создать Python-скрипт generate_failure_logs.py, который генерирует CSV-файл с колонками: timestamp, error_type, request_id, severity, message
  2. Параметры генерации: частота ошибок (10–50 записей/час), 3–5 типов ошибок, временной диапазон 7 дней
  3. Развернуть локальный контейнер с Prometheus + Grafana (через docker-compose) и загрузить данные через prometheus-pushgateway или напрямую записать в CSV и импортировать в Grafana через Data SourceCSV
  4. Альтернатива: использовать in-memory экспорт в Prometheus через Python-клиент

3. Технологический стек

КомпонентИнструментыНазначение
Хранение метрикPrometheus (pull model) или PushgatewayСбор и хранение временных рядов ошибок
ВизуализацияGrafana (v9+)Дашборды и панели
ЛогированиеLoki / CSV-файлыДетальная информация об ошибках
Генерация данныхPython 3.10+ (pandas, prometheus_client)Симуляция failure-логов
КонтейнеризацияDocker + docker-composeЛокальное окружение
ДокументированиеMarkdown, Mermaid (опционально)Архитектура дашборда

4. Этапы выполнения

Этап 1: Определение метрик и источников данных (30 минут)

Действия

  1. Составить список отслеживаемых типов ошибок

  2. Определить структуру метрик и логов

  3. Выбрать источник для дашборда

Ожидаемый результат этапа Документ с перечнем метрик, типов ошибок и описание источника данных.

Этап 2: Сбор и подготовка данных (1–2 часа)

Действия

  1. Развернуть окружение (если нет production):

  2. Написать Python-скрипт для симуляции данных

    import csv
    import random
    from datetime import datetime, timedelta
    
    error_types = ["timeout", "hallucination", "rate_limit", "context_length_exceeded"]
    severities = ["critical", "warning", "info"]
    messages = {
        "timeout": ["LLM response time exceeded 30s", "Gateway timeout on model call"],
        "hallucination": ["Factual inconsistency detected in answer", "Entailment score < 0.5"],
        "rate_limit": ["OpenAI rate limit reached", "429 Too Many Requests"],
        "context_length_exceeded": ["Token count > max context (8192)", "Prompt too long"]
    }
    
    start_time = datetime(2025, 3, 1, 0, 0, 0)
    num_entries = 2000
    data = []
    
    for i in range(num_entries):
        ts = start_time + timedelta(seconds=random.randint(0, 604800))  # 7 days
        err_type = random.choices(error_types, weights=[0.4, 0.3, 0.2, 0.1], k=1)[0]
        severity = random.choice(severities)
        msg = random.choice(messages[err_type])
        data.append([ts.isoformat(), err_type, f"req_{i}", severity, msg])
    
    with open("failure_logs.csv", "w", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(["timestamp", "error_type", "request_id", "severity", "message"])
        writer.writerows(data)
    
  3. Опционально: отправить данные в Prometheus Pushgateway:

    • Написать скрипт, который аггрегирует count по error_type за 5-минутные интервалы и пушит метрики
    • Использовать библиотеку prometheus_client:
      from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
      
      registry = CollectorRegistry()
      g = Gauge('failures_total', 'Count of failures', ['error_type', 'severity'], registry=registry)
      # ... заполнение данными из CSV
      push_to_gateway('localhost:9091', job='failure_generator', registry=registry)
      

Ожидаемый результат этапа Файл failure_logs.csv с 2000 записей и/или метрики в Prometheus.

Этап 3: Построение дашборда в Grafana (2–3 часа)

Действия

  1. Подключить источник данных

    • Если Prometheus: добавить Data Source типа Prometheus, URL: http://prometheus:9090
    • Если CSV: установить плагин grafana-csv-datasource (или импортировать через InfluxDB/MySQL)
  2. Создать дашборд

    • Имя: "LLM Failure Overview"
    • Переменные: $error_type (multi-select), $severity
  3. Добавить панели

    Панель 1: Временной ряд по типам ошибок (Time series)

    • Запрос (PromQL):
      sum(rate(failures_total[5m])) by (error_type)
      
    • Для CSV: group by timestamp bucket (например, 1h) + count
    • Визуализация: Stacked bars или lines

    Панель 2: Распределение типов ошибок (Pie chart)

    • Запрос:
      sum(failures_total) by (error_type)
      
    • Настройки: show percentage, legend

    Панель 3: Таблица последних ошибок (Logs / Table)

    • Если подключен Loki:
      {job="llm-service"} | logfmt | json | failure == "true"
      
    • Если CSV: использовать grafana-csv-datasource с сортировкой по timestamp DESC, limit 20
  4. Настроить оформление

    • Цветовая схема: красный для critical, жёлтый для warning, зелёный для info
    • Обновление: 30 секунд
    • Time range: Last 24 hours

Ожидаемый результат этапа Дашборд с тремя работающими панелями, доступный по ссылке.

Этап 4: Настройка алертов (опционально, 30 минут)

Действия

  1. Создать alert rules в Grafana (или Prometheus)
  2. Проверить срабатывание: сгенерировать всплеск ошибок скриптом

Ожидаемый результат этапа Правило алерта создано и протестировано.

Этап 5: Тестирование и документирование (30 минут)

Действия

  1. Провести smoke test

    • Открыть дашборд, проверить все панели
    • Изменить временной диапазон, убедиться что данные корректны
    • Экспортировать дашборд в JSON (для backup)
  2. Написать документацию

    • README с описанием дашборда, источников данных, алертов
    • Скриншоты панелей
    • Инструкция по подключению нового источника

Ожидаемый результат этапа Файл README.md с описанием дашборда, JSON-экспорт дашборда.

5. Критерии приемки (Definition of Done)

  • Дашборд содержит не менее 3 панелей (временной ряд, круговая диаграмма, таблица)
  • Данные об ошибках отображаются за произвольный временной интервал (7 дней)
  • Реализована возможность фильтрации по типу ошибки и severity через переменные
  • Для production-ready решения настроен автообновление данных (pull или push)
  • Дашборд экспортирован в JSON и сохранён в репозиторий
  • Написана документация (README) с описанием метрик и ссылкой на дашборд
  • (Опционально) Настроен alert на превышение порога ошибок по типу timeout
  • Код симуляции данных (если использовался) опубликован и воспроизводим

6. Ожидаемый результат

АртефактСодержание
Grafana дашбордJSON-экспорт (dashboard.json)
Скрипт генерации данныхgenerate_failure_logs.py (если нет продакшн-данных)
ДокументацияREADME.md с описанием дашборда, метрик, инструкцией

Дополнительно: скриншоты панелей, docker-compose.yml (если собиралось окружение с нуля).

7. Возможные сложности и их решение

СложностьРешение
Нет доступа к production-логамИспользовать симуляцию с CSV или Python-скриптом
Prometheus не может вытянуть данныеИспользовать Pushgateway для одноразовой отправки
Grafana не отображает CSVУстановить плагин grafana-csv-datasource или импортировать через InfluxDB/MySQL
Слишком много однотипных ошибокДобавить агрегацию (rate, heatmap) и исключить шум через фильтры severity
Нет чёткого разделения типов ошибокДоговориться со стейкхолдерами о таксономии (3–5 типов)

8. Бюджет времени (оценка)

ЭтапВремя
Этап 1: Определение метрик и источников данных30 мин
Этап 2: Сбор и подготовка данных1–2 часа
Этап 3: Построение дашборда в Grafana2–3 часа
Этап 4: Настройка алертов30 мин
Этап 5: Тестирование и документирование30 мин
Итого4,5–6,5 часов

Примечание: для первого выполнения задачи заложите 1 дополнительный час на изучение инструментов (Grafana + Prometheus).

9. Связанные вопросы из базы знаний

ВопросТема
145Как собрать логи LLM-запросов
203Типы ошибок в production LLM
221Настройка RAG-системы
258Метрики для детекции галлюцинаций
260Алерты на failures
261Postmortem для retrieval degradation
263Анализ root cause по дашборду
401Инструменты визуализации метрик
402PromQL запросы для мониторинга
405Экспорт дашбордов в код (GitOps)

10. Чек-лист самопроверки

  • Я определил минимум 3 типа failures (timeout, hallucination, rate_limit)
  • Я создал дашборд с временным рядом и круговой диаграммой
  • Я проверил, что данные обновляются (авто-рефреш работает)
  • Я экспортировал дашборд в JSON и сохранил в репозиторий
  • Я написал README с описанием метрик и инструкцией по подключению
  • Я протестировал фильтры переменных (если использовались)