Метрики
и наблюдаемость
От медленного запроса
к объяснённому инциденту
Как узнать, что происходит с приложением после запуска на сервере: что измерять, какие события записывать и как найти этап, на котором запрос теряет время. В главах — код, настоящие измерения и снимки стенда, который можно запустить у себя.
Начать первую тему →IКак устроен справочник
Первая тема посвящена мониторингу, наблюдаемости и телеметрии. Мы начинаем с небольшого сервиса на FastAPI и разбираем, что разработчик теряет после его развёртывания. Затем по отдельности разбираем метрики, логи и трассы, проводим по ним расследование и смотрим, как данные собирают Prometheus и Grafana.
Каждая глава построена одинаково: объяснение по разделам, частые ошибки, вопросы для самопроверки с ответами и шпаргалка. Все числа и снимки получены на стенде справочника; его архив можно скачать и повторить опыт. Модуль 2 о том, как работает Prometheus, оформлен отдельной книгой со своим стендом. Следующие модули показаны в содержании как план.
IIСодержание по модулям
Мониторинг, наблюдаемость и телеметрия
От жалобы пользователя до подтверждённой причины сбоя.
- 1.1После развёртывания: что происходит с приложениемчитать ↗
- 1.2Мониторинг: регулярные измерения и историячитать ↗
- 1.3Наблюдаемость и телеметриячитать ↗
- 1.4Метрики: количества, скорость и распределениячитать ↗
- 1.5Логи: запись о событии и её контекстчитать ↗
- 1.6Трассы: где операция потратила времячитать ↗
- 1.7Разбор инцидента: API иногда отвечает медленночитать ↗
- 1.8Prometheus и Grafana: как метрики попадают на графикчитать ↗
- 1.9Практика: от жалобы к проверяемому выводучитать ↗
- 1.10Итоги модуля: главное короткочитать ↗
Как работает Prometheus
От строки на /metrics до отсчёта в TSDB: target, формат, scrape, pull-модель, первый запуск.
- 2.1Что такое Prometheusчитать ↗
- 2.2Target: куда обращаться за метрикамичитать ↗
- 2.3Endpoint /metrics и текстовый форматчитать ↗
- 2.4Scrape: как Prometheus собирает значениячитать ↗
- 2.5Pull-модель: запрос идёт от серверачитать ↗
- 2.6Первый запуск: Prometheus и FastAPIчитать ↗
- 2.7Формат YAML и ряд upчитать ↗
- 2.8Итоги модуля: главное короткочитать ↗
Метрика как данные
Главы готовятся.
- 3.1Измерение, timestamp и sample
- 3.2Имя и единица измерения
- 3.3Labels и идентичность ряда
- 3.4Counter: события и сбросы
- 3.5Gauge: состояние системы
- 3.6Histogram: распределение длительности
- 3.7Кардинальность и стоимость детализации
Сбор и хранение
Главы готовятся.
- 4.1Exporters и границы измерения
- 4.2Service discovery и relabeling
- 4.3Лимиты scrape и кардинальность
- 4.4TSDB: head, WAL, блоки и retention
- 4.5Пропуски, сбросы и устаревшие ряды
- 4.6Pushgateway и пакетные задачи
- 4.7Федерация и remote_write
Запросы PromQL
Главы готовятся.
- 5.1Селекторы и временные диапазоны
- 5.2rate и increase для счётчиков
- 5.3Агрегации и группировка
- 5.4Доля ошибок и нулевой трафик
- 5.5Перцентили и histogram_quantile
- 5.6Сопоставление рядов и vector matching
- 5.7Recording rules и проверка запросов
Grafana: от вопроса к панели
Главы готовятся.
- 6.1Источник данных и первый запрос
- 6.2Единицы, легенды и интервал
- 6.3Time series, stat, table и heatmap
- 6.4Переменные и повторение панелей
- 6.5Сравнение периодов и annotations
- 6.6Корреляция: перейти от метрики к событию
- 6.7Дашборд расследования
Python и зависимости
Главы готовятся.
- 7.1Инструментация FastAPI
- 7.2RED: rate, errors, duration
- 7.3PostgreSQL: соединения, ожидания и запросы
- 7.4Redis: память, попадания и вытеснения
- 7.5RabbitMQ: ready, unacked и throughput
- 7.6Celery: очередь, retries и результаты
- 7.7Процесс, хост и контейнер
Алерты и надёжность
Главы готовятся.
- 8.1SLI, SLO и бюджет ошибок
- 8.2Симптом, условие и уведомление
- 8.3Pending, firing и for
- 8.4Alertmanager: группировка и маршруты
- 8.5Silence, inhibition и шум
- 8.6Runbook и проверка восстановления
- 8.7Тестирование правил
OpenTelemetry и расследования
Главы готовятся.
- 9.1Resource, scope и semantic conventions
- 9.2Spans, context propagation и baggage
- 9.3HTTP и сообщения очереди
- 9.4Collector: receivers, processors, exporters
- 9.5Сэмплирование и потерянные данные
- 9.6Логи и трассы: Loki и Tempo
- 9.7Профилирование и стоимость наблюдаемости
IIIСтенд и материалы к теме
IVДанные и снимки экрана
Снимки страницы стенда, Swagger, /metrics, Prometheus и Grafana сделаны на стенде этого справочника. Длительности в главах 1.4–1.6 взяты из записанного прогона и совпадают с файлами в архиве. Данные кейса в главе 1.7 составлены для разбора, и это указано в самой главе.