
Привет, коллеги!
Если вы когда-нибудь просыпались среди ночи от алертов о том, что «всё упало», но не могли понять, почему — эта статья для вас. Поговорим о том, как построить нормальный мониторинг и перестать гадать на кофейной гуще.
В современном мире, где многие компании переходят на облачные технологии и используют managed-сервисы, важно понимать, какие метрики действительно необходимо мониторить самостоятельно, а какие можно оставить на усмотрение провайдера. Managed-ресурсы предоставляют множество преимуществ, включая автоматическое управление инфраструктурой и встроенные инструменты мониторинга. Однако это не освобождает вас от ответственности за мониторинг критичных для бизнеса метрик.
Автор статьи — Максим Гусев, спикер курса «SRE: data-driven подход к управлению надёжностью систем».
Системные метрики: железо и его причуды
CPU: не дайте процессору задохнуться
Load Average
-
Это среднее количество процессов, готовых к выполнению
-
Измеряется за 1,5 и 15 минут
-
Если больше количества ядер — система перегружена
-
Помогает предсказать проблемы с производительностью
-
Пример из жизни: Load Average 30 на 8-ядерной машине. Спойлер: кто-то запустил парсинг логов в проде.
CPU Usage по типам
-
User time — время выполнения пользовательских процессов
-
System time — время выполнения системных вызовов
-
Iowait — время ожидания ввода/вывода
-
Idle — время простоя
-
Steal — для виртуалок: время, украденное гипервизором
-
Реальный кейс: высокий iowait выдал проблему с логированием — приложение писало логи быстрее, чем диск успевал их сохранять.
Context Switches
-
Количество переключений между процессами
-
Высокие значения = потеря производительности
-
Помогает найти проблемы с многопоточностью
-
История из практики: однажды неправильная настройка thread pool привела к 100k+ переключений в секунду. Процессор был занят, но не работой.
Memory: когда «просто добавить оперативки» не помогает
Used/Available Memory
-
RSS (Resident Set Size) — реально используемая память
-
Virtual Memory — зарезервированная память
-
Heap — память для объектов в Java
-
Non-Heap — память для метаданных JVM
-
Dirty pages — данные, ожидающие записи на диск
-
Пример: приложение с memory leak съело всю память за 3 часа. Графики показали проблему за час до падения.
Swap Usage
-
Использование диска как дополнительной памяти
-
Swap In — чтение из swap в память
-
Swap Out — выгрузка из памяти в swap
-
Высокая активность swap = серьезное падение производительности
-
Кейс: система «тормозила», потому что база данных ушла в swap. Спасибо OOM Killer за «помощь».
Application Metrics: что творится в вашем коде
Response Time: почему пользователи жалуются на лаги
Latency (P95/P99)
-
P95 — время ответа для 95% запросов
-
P99 — время ответа для 99% запросов
-
Помогает найти «медленные» запросы
-
Важнее среднего времени ответа
-
Разбивка по эндпоинтам критична
-
Учет размера ответа
-
История: API с средним временем 100ms и P99 в 5 секунд. Причина? Один «тяжёлый» запрос к базе данных.
Apdex Score (Application Performance Index)
-
Оценка удовлетворенности пользователей от 0 до 1
-
T — целевое время ответа
-
Satisfied: < T (считается как 1)
-
Tolerating: < 4T (считается как 0.5)
-
Frustrated: > 4T (считается как 0)
-
Пример: если T = 300ms:
-
Отлично: < 300ms
-
Терпимо: < 1.2s
-
Плохо: > 1.2s.
-
Traffic: понимаем нагрузку
RPS (Requests per Second)
-
Количество запросов в секунду
-
Разбивка по:
-
HTTP методам (GET, POST, etc)
-
эндпоинтам
-
статус-кодам
-
-
Помогает планировать мощности
-
Кейс: резкий рост 404 ошибок выявил проблему с кешированием старых URL.
Concurrent Users
-
Количество одновременных пользователей
-
Active Sessions — активные сессии
-
User Flow — путь пользователя по системе
-
Geographic Distribution — распределение по регионам
-
Пример: пиковая нагрузка по понедельникам в 10 утра — готовимся заранее.
Database Metrics: когда база данных решает пойти погулять
Connection Pool
-
Active connections — активные соединения с базой
-
Idle connections — простаивающие соединения
-
Max connections — максимум возможных соединений
-
Connection timeouts — таймауты при получении соединения
-
Connection acquisition time — время получения соединения
-
История из жизни: connection leak в тестах убил прод через неделю после деплоя. Никто не ожидал, что тесты могут влиять на прод.
Query Performance
-
Query execution time — время выполнения запросов
-
Slow queries — запросы дольше определенного порога
-
Table scans — полные просмотры таблиц (спойлер: это обычно плохо)
-
Index usage — использование индексов
-
Lock contentions — конфликты блокировок
-
Buffer cache hit ratio — эффективность кеширования
-
Кейс: один «безобидный» JOIN без индекса положил всю базу. Привет, полночный дебаг!
Storage Metrics
-
Disk IOPS — операций ввода/вывода в секунду
-
Write/Read latency — задержки записи/чтения
-
Storage space usage — использование места
-
WAL/Binlog size — размер журнала транзакций
Пример: однажды логи транзакций съели все место на диске. Угадайте, когда это случилось? Правильно, в пятницу вечером!
Security Metrics: потому что параноик — это не диагноз, а профессия
Authentication Failures
-
Failed login attempts — неудачные попытки входа
-
Password reset requests — запросы сброса пароля
-
Brute force attempts — попытки подбора
-
IP-based patterns — подозрительные паттерны по IP
-
Geographic anomalies — странная география запросов
-
Пример: брутфорс атака из Китая в 3 часа ночи. Спасибо rate limiting и геоблокировке!
Resource Access Patterns
-
Unusual data access — нетипичные обращения к данным
-
Privilege escalations — повышение привилегий
-
API usage anomalies — аномалии использования API
-
Data exfiltration attempts — попытки выгрузки данных
-
Suspicious user behavior — подозрительное поведение пользователей
-
Кейс: необычный паттерн запросов выявил утечку данных через API. Кто-то «умный» пытался выгрузить всю базу клиентов…
Infrastructure Security
-
Port scan attempts — попытки сканирования портов
-
DDoS indicators — индикаторы DDoS атак
-
SSL/TLS issues — проблемы с сертификатами
-
Firewall denials — отказы файрвола
-
История: однажды забытый open port чуть не стал причиной взлома. Теперь у нас есть регулярные проверки.
Cost Metrics: чтобы финансовый директор не поседел раньше времени
Resource Utilization vs Cost
-
Cost per service — стоимость каждого сервиса
-
Resource efficiency — насколько эффективно используются ресурсы
-
Idle resources — простаивающие (и бесполезно дорогие) ресурсы
-
Autoscaling efficiency — насколько правильно работает автомасштабирование
-
Reserved vs On-demand usage — использование зарезервированных мощностей
-
История: забытый тестовый кластер «съел» месячный бюджет за неделю. Теперь у нас есть автоматическое удаление тестовых окружений.
Traffic Costs
-
Egress traffic — исходящий трафик (самый дорогой в облаках)
-
Inter-region traffic — трафик между регионами
-
API calls — вызовы API (особенно платные)
-
Storage operations — операции с хранилищем
-
CDN usage — использование CDN
-
Пример оптимизации: перенос бэкапов в тот же регион сэкономил 30% бюджета. Кто же знал, что межрегиональный трафик такой дорогой?
Роль провайдера в мониторинге
Что обычно берет на себя провайдер:
-
Базовый мониторинг инфраструктуры
-
Автоматическое масштабирование
-
DDoS защита
-
Базовые метрики безопасности
-
Мониторинг доступности сервисов.
Что остается на нашей совести:
-
Мониторинг бизнес-метрик
-
Специфичные для приложения метрики
-
Кастомные алерты и пороговые значения
-
Мониторинг затрат и оптимизация
-
End-to-end мониторинг пользовательского опыта.
Пример из жизни: провайдер радостно рапортовал, что «всё работает», пока пользователи жаловались на тормоза. Оказалось, что наш кеш был жив, но работал как улитка.
Общие рекомендации по настройке мониторинга
1. Начните с главного
-
Определите критичные бизнес-метрики
-
Настройте базовые системные метрики
-
Добавьте мониторинг основных компонентов
-
Кейс: начали с 500 метрик, закончили 50-ю действительно важными.
2. Настройте правильные алерты
-
Избегайте ложных срабатываний
-
Используйте разные уровни важности
-
Добавьте контекст к алертам
-
Настройте правильную маршрутизацию
-
История: после сотого ложного алерта в 3 часа ночи мы наконец научились их правильно настраивать.
3. Правильное хранение метрик
-
Определите retention policy для разных типов метрик
-
Настройте агрегацию для старых данных
-
Планируйте storage capacity заранее
-
Используйте разные интервалы сбора для разных метрик
-
Пример: CPU metrics каждые 10 секунд, а бизнес-метрики раз в минуту.
4. Визуализация, которая реально помогает
-
Создавайте тематические дашборды
-
Группируйте связанные метрики
-
Добавляйте аннотации для важных событий
-
Используйте разные типы графиков для разных данных
-
Кейс: после добавления deployment markers на графики поиск проблем ускорился в разы.
5. Автоматизация мониторинга
-
Используйте Infrastructure as Code для конфигурации
-
Автоматизируйте создание дашбордов
-
Настройте автоматическое реагирование на типовые проблемы
-
Регулярно проверяйте и обновляйте конфигурацию
-
История: автоматическое увеличение диска при 80% заполнении спасло не один наш уикенд.
Практические советы по внедрению
Для начинающих
-
Начните с базовых метрик:
-
CPU, Memory, Disk
-
Basic HTTP metrics
-
Error rates
-
Response times.
-
-
Добавьте простые алерты:
-
Disk space > 80%
-
Error rate > 1%
-
Response time P95 > 1s.
-
Для продвинутых
-
Внедрите трейсинг:
-
Distributed tracing
-
Service mesh metrics
-
Custom business metrics.
-
-
Настройте продвинутую аналитику:
-
Anomaly detection
-
Trend analysis
-
Capacity planning.
-
Типичные ошибки и как их избежать
-
Слишком много метрик
-
Проблема: Information overload
-
Решение: начните с малого, расширяйтесь по необходимости
-
Пример: из 1000 метрик реально использовались только 100.
-
-
Плохие алерты
-
Проблема: Alert fatigue
-
Решение: настраивайте значимые пороги, используйте агрегацию
-
Кейс: после пересмотра порогов количество ночных вызовов уменьшилось на 90%.
-
-
Отсутствие контекста
-
Проблема: сложно понять причину проблемы
-
Решение: добавляйте метаданные, связывайте метрики
-
Пример: добавление version tags помогло быстро находить проблемные деплои.
-
Заключение: как построить мониторинг, который реально работает
Ключевые принципы
-
Мониторинг должен приносить пользу
-
Не собирайте метрики «просто потому что можно»
-
Каждая метрика должна помогать принимать решения
-
Регулярно пересматривайте набор метрик.
-
-
Баланс между полнотой и простотой
-
Слишком много данных так же плохо, как и слишком мало
-
Фокусируйтесь на том, что действительно важно
-
Начинайте с простого, усложняйте по необходимости.
-
-
Культура мониторинга
-
Обучайте команду работе с метриками
-
Документируйте решения и настройки
-
Проводите регулярные ревью системы мониторинга.
-
Чек-лист для проверки вашего мониторинга
✅ Базовые метрики
-
CPU, Memory, Disk metrics настроены
-
Application metrics работают
-
Error tracking налажен
-
Performance metrics собираются.
✅ Алертинг
-
Критичные алерты настроены
-
Есть разные уровни важности
-
Настроена правильная маршрутизация
-
Документированы действия по алертам.
✅ Визуализация
-
Основные дашборды созданы
-
Метрики сгруппированы логически
-
Графики понятны и информативны
-
Есть документация по метрикам.
Напоследок: золотые правила мониторинга
-
Не усложняйте без необходимости
-
Простой и работающий мониторинг лучше сложного и сломанного
-
Начните с малого, растите постепенно.
-
-
Думайте о людях
-
Метрики должны быть понятны всей команде
-
Алерты должны быть действительно важными
-
Документация должна быть актуальной.
-
-
Регулярно улучшайте
-
Собирайте фидбек от команды
-
Анализируйте инциденты
-
Обновляйте пороги и правила.
-
P.S. И помните, хороший мониторинг — это не тот, который собирает все возможные метрики, а тот, который помогает решать реальные проблемы до того, как о них узнают пользователи.
P.P.S. Да, и ещё раз про пятничные деплои — настройте особые алерты на вечер пятницы. Почему-то именно в это время все любят заливать в прод «маленькие безобидные фиксы», которые потом чинит вся команда в субботу.
Полезные ссылки и инструменты
-
Популярные стеки мониторинга:
-
Инструменты для трейсинга:
-
Тулзы для логирования:
Удачного мониторинга! И пусть ваши графики всегда будут красивыми, а алерты — только по делу!
Больше полезного про метрики, алерты и не только — на курсе учебного центра Слёрм «SRE: Observability». Возьмите под контроль состояние системы! Программа и условия — по ссылке.
ссылка на оригинал статьи https://habr.com/ru/articles/888488/
Добавить комментарий