1.4 Мониторинг и Observability #
🎯 Зачем нужен мониторинг #
Представьте, что вы управляете самолетом без приборной панели. Примерно так себя чувствует DevOps-инженер без мониторинга — не знает, что происходит с системой, пока она не упадет.
Мониторинг отвечает на вопрос: “Что происходит?”
Observability отвечает на вопрос: “Почему это происходит?”
📊 Три столпа Observability #
1. Метрики (Metrics) #
Числовые данные о состоянии системы
Примеры метрик в формате Prometheus:
Количественные показатели состояния системы:
- Общее количество HTTP-запросов (GET-метод, статус 200): 1547
- Процент использования CPU: 67.3%
- Объем используемой оперативной памяти: 1,073,741,824 байта (1 ГБ)
- Среднее время ответа: 0.234 секунды
Типы метрик:
- Counter — только растет (количество запросов)
- Gauge — может расти и убывать (использование CPU)
- Histogram — распределение значений (время ответа)
2. Логи (Logs) #
Текстовые записи о событиях в системе
Примеры структурированных логов:
Текстовые записи о событиях в системе с метками времени и уровнями:
- 15 января 2024, 10:30:15 - INFO: Пользователь 12345 успешно авторизовался (сервис UserService)
- 15 января 2024, 10:30:16 - WARN: Превышен лимит времени оплаты заказа 67890 (сервис PaymentService)
- 15 января 2024, 10:30:17 - ERROR: Исчерпан пул соединений с базой данных (сервис DatabaseService)
- 15 января 2024, 10:30:18 - DEBUG: Попадание в кэш по ключу user_profile_12345 (сервис CacheService)
Уровни логирования:
- DEBUG — детальная информация для разработки
- INFO — общая информация о работе
- WARN — предупреждения о потенциальных проблемах
- ERROR — ошибки, требующие внимания
- FATAL — критические ошибки, приводящие к остановке
3. Трейсы (Traces) #
Путь запроса через микросервисы
Пример распределенного трейса:
Путь запроса через микросервисы с временем обработки:
- Пользователь отправляет запрос (1 мс)
- API Gateway маршрутизирует запрос (5 мс)
- Auth Service проверяет авторизацию (15 мс) ← Узкое место!
- User Service обрабатывает запрос (25 мс)
- Обращение к базе данных (40 мс)
Общее время обработки: 86 мс
🛠️ Популярные инструменты мониторинга #
Prometheus + Grafana (Open Source стек) #
Prometheus — сбор и хранение метрик Пример конфигурации Prometheus:
Настройка собирателя метрик:
- Глобальный интервал сбора: 15 секунд
- Конфигурация для веб-приложения:
- Целевой адрес: localhost:8080
- Путь для метрик: /metrics
- Интервал сбора: 5 секунд (чаще глобального)
Grafana — визуализация метрик Пример конфигурации Grafana dashboard:
Описание дашборда для визуализации метрик:
- Название дашборда: “Web Application Dashboard”
- Панель для отображения времени ответа:
- Заголовок: “Response Time”
- Тип: график
- Источник данных: метрика http_request_duration_seconds
ELK Stack (Elasticsearch + Logstash + Kibana) #
Для работы с логами: Пример конфигурации Logstash:
Настройка пайплайна для обработки логов:
Входные данные:
- Чтение лог-файлов из папки /var/log/app/
- Начало чтения с начала файла
Фильтрация:
- Парсинг сообщений с помощью Grok-паттернов
- Извлечение метки времени, уровня логирования и содержимого
Выходные данные:
- Отправка обработанных логов в Elasticsearch
- Адрес Elasticsearch: localhost:9200
- Индекс с датой: application-logs-YYYY.MM.dd
Jaeger (Distributed Tracing) #
Пример инструментирования Python-приложения для Jaeger:
Настройка распределённого трейсинга:
Инициализация трейсера:
- Импорт библиотеки jaeger_client
- Конфигурация с полным сэмплингом (параметр 1)
- Включение логирования
- Имя сервиса: ‘user-service’
Инструментирование API-маршрута:
- Создание спана с именем ‘get_user’
- Добавление метки с ID пользователя
- Выполнение запроса к базе данных
- Добавление метки о результате поиска
- Возврат JSON-ответа
🚨 Алертинг (Alerting) #
Принципы хорошего алертинга #
1. Алертьте на симптомы, а не на причины Принципы хорошего алертинга:
Неправильно: Алерт на высокое использование CPU (причина, а не симптом)
Правильно: Алерт на медленный ответ (симптом, который замечают пользователи)
2. Actionable алерты Пример actionable алерта:
Конфигурация алерта с полной информацией для реагирования:
- Условие: База данных недоступна (статус up = 0)
- Время ожидания: 5 минут (чтобы избежать ложных срабатываний)
- Краткое описание: “База данных недоступна”
- Подробное описание: “База данных недоступна более 5 минут”
- Ссылка на runbook: пошаговое руководство по устранению
- Действия: конкретные шаги для реагирования
3. Правильные пороги Пример правильного определения порогов:
Конфигурация алерта на основе статистических данных:
- Метрика: частота HTTP-ошибок статусов 5xx за последние 5 минут
- Порог: более 0.01 (1% error rate)
- Обоснование: 1% - стандартный порог для ошибок в веб-приложениях
- Время ожидания: 2 минуты для подтверждения тренда
Каналы уведомлений #
Пример конфигурации Alertmanager:
Настройка маршрутизации и доставки алертов:
Маршрутизация:
- Группировка: по именам алертов
- Время ожидания группы: 10 секунд
- Интервал между группами: 10 секунд
- Интервал повтора: 1 час
Каналы уведомлений:
- Slack: канал #alerts с кратким описанием алерта
- Email: отправка на devops@company.com с темой, содержащей имя алерта
📊 Ключевые метрики для мониторинга #
RED метрики (для сервисов) #
- Rate — количество запросов в секунду
- Errors — процент ошибок
- Duration — время ответа
Примеры вычисления RED метрик:
Rate (частота): Количество HTTP-запросов в секунду за последние 5 минут
Errors (ошибки): Процент ошибок - отношение запросов с 5xx статусами к общему количеству запросов
Duration (длительность): 95-й персентиль времени ответа (время, которое не превышают 95% запросов)
USE метрики (для ресурсов) #
- Utilization — загруженность ресурса
- Saturation — очереди и ожидание
- Errors — количество ошибок
Примеры вычисления USE метрик:
CPU Utilization (загруженность): 100% минус средний процент времени простоя CPU
Memory Utilization (загруженность памяти): Процент использования оперативной памяти (общая минус доступная)
Disk Saturation (насыщенность диска): Частота времени выполнения дисковых операций
SLI/SLO/SLA #
SLI (Service Level Indicator) — метрика качества сервиса Пример вычисления SLI:
Availability SLI (доступность): Отношение успешных запросов (не 5xx) к общему количеству запросов за 5 минут
SLO (Service Level Objective) — целевое значение SLI Примеры SLO (целевые показатели):
API Availability (доступность API):
- Метрика: availability (доступность)
- Цель: 99.9% (успешно должны выполняться 99.9% запросов)
API Latency (задержка API):
- Метрика: latency_p95 (95-й персентиль задержки)
- Цель: 500ms (95% запросов должны выполняться быстрее 500 мс)
SLA (Service Level Agreement) — договор с клиентом Пример SLA (соглашение об уровне сервиса):
Коммерческие обязательства перед клиентами:
- Доступность: 99.5% времени работы в месяц
- Производительность: время ответа менее 2 секунд для 90% запросов
- Компенсация: при нарушении SLA - скидка 10% за месяц
🎯 Реальный кейс: Внедрение мониторинга #
Проблема: E-commerce без мониторинга #
- Пользователи жалуются на медленный сайт
- Непонятно, какие страницы тормозят
- Узнаем о проблемах от пользователей
- Много времени на поиск причин
Решение: Поэтапное внедрение #
Этап 1: Базовые метрики (1 неделя) Пример Docker Compose для развертывания мониторинга:
Конфигурация для быстрого развертывания стека мониторинга:
Prometheus (сбор метрик):
- Образ: prom/prometheus
- Порт: 9090 (веб-интерфейс)
- Монтирование конфигурации из локального файла
Grafana (визуализация):
- Образ: grafana/grafana
- Порт: 3000 (веб-интерфейс)
- Пароль администратора: admin
Этап 2: Логирование (1 неделя) Пример добавления структурированного логирования:
Модификация Python-приложения для сбора структурированных логов:
Настройка:
- Импорт библиотеки structlog для структурированного логирования
- Инициализация логгера
Инструментированный API-маршрут:
- Замер времени выполнения операции
- Логирование успешного создания заказа с метаданными: ID заказа, ID пользователя, сумма, время выполнения
- Логирование ошибок с контекстом: текст ошибки, ID пользователя, время выполнения
Этап 3: Алерты (1 неделя) Пример критических алертов для e-commerce:
Конфигурация важнейших алертов для интернет-магазина:
Алерт на высокий процент ошибок заказов:
- Условие: отношение неудачных заказов к общему количеству > 5%
- Время ожидания: 2 минуты
- Описание: “Высокий процент ошибок заказов” + фактическое значение
Алерт на медленный checkout:
- Условие: 95-й персентиль времени checkout > 10 секунд
- Время ожидания: 5 минут
- Описание: “Оформление заказа занимает слишком много времени” + фактическое значение в секундах
Результат через месяц #
- MTTR: 2 часа → 15 минут
- Proactive alerts: 0% → 80% проблем выявляется до жалоб
- Customer satisfaction: +25%
- Time to debug: -70%
🏗️ Dashboard Design Best Practices #
1. Правило 5 секунд #
Пользователь должен понять состояние системы за 5 секунд
🟢 Все хорошо - зеленые метрики
🟡 Есть проблемы - желтые предупреждения
🔴 Критично - красные алерты
2. Иерархия дашбордов #
Level 1: High-level overview (для менеджмента)
├── System health: 99.8% ✅
├── User satisfaction: 4.2/5 ✅
└── Revenue impact: $0 ✅
Level 2: Service-level (для команд)
├── API response time: 234ms
├── Error rate: 0.1%
└── Throughput: 1.2K req/s
Level 3: Deep dive (для debugging)
├── Database query performance
├── Cache hit rates
└── Individual service metrics
3. Контекст и аннотации #
Panel Title: "API Response Time (P95)"
Description: "95th percentile response time for all API endpoints.
Target: < 500ms. Alert threshold: > 1000ms"
Thresholds:
- Green: < 500ms
- Yellow: 500-1000ms
- Red: > 1000ms
🎯 Практические задания #
Задание 1: Настройка базового мониторинга #
- Установите Prometheus и Grafana через Docker Compose
- Добавьте мониторинг собственного приложения
- Создайте dashboard с основными метриками
- Настройте простой алерт
Задание 2: Structured logging #
- Добавьте структурированное логирование в приложение
- Настройте отправку логов в Elasticsearch
- Создайте dashboard в Kibana
- Найдите и исправьте проблему по логам
📚 Полезные ресурсы #
Документация #
- Prometheus Documentation
- Grafana Documentation
- OpenTelemetry - стандарт для observability
Книги #
- “Site Reliability Engineering” by Google
- “Observability Engineering” by Charity Majors
- “The Art of Monitoring” by James Turnbull
Блоги #
- Honeycomb Blog - лидеры в observability
- Grafana Blog
- SRE Weekly - новости SRE/мониторинга
🎯 Заключение #
Мониторинг и Observability — это глаза и уши DevOps-инженера. Ключевые принципы:
✅ Мониторьте то, что важно пользователям
✅ Алертьте на симптомы, а не на причины
✅ Стройте дашборды для разных аудиторий
✅ Используйте SLI/SLO для измерения качества
✅ Логируйте структурированно и осмысленно
Помните: Хороший мониторинг — это не про количество метрик, а про возможность быстро понять, что происходит с системой и почему.
Следующий раздел: 1.5 Облачные технологии