Мониторинг
Мониторинг
Мониторинг — это непрерывное автоматическое наблюдение за системой с целью
заметить отклонение от нормы и вовремя сообщить о нём человеку. Не отчёт
задним числом, а сигнал в момент, когда ещё можно вмешаться.
История
Слово «monitor» в английском значит «тот, кто напоминает» и «тот, кто
предупреждает» — от латинского monere. В индустриальном смысле мониторинг
как концепция появился задолго до IT: в котельных XIX века были механические
самописцы давления, а в атомной энергетике 1950-х — панели с сотнями стрелок,
которые оператор обходил глазами каждые пять минут.
В компьютерных системах мониторинг начал оформляться в 1970–80-х вместе с
мейнфреймами IBM: программы вроде RMF (Resource Measurement Facility, 1974)
собирали статистику по CPU, памяти и I/O и печатали её на бумажной ленте.
Задача была та же: понять, когда машина захлёбывается, до того как она встанет.
Дальше — несколько важных вех:
- 1988 — Simon Hackett и Jeff Kell пишут первые версии SNMP (Simple
Network Management Protocol) для унифицированного опроса сетевых устройств.
До сих пор это базовый протокол мониторинга серверов и роутеров. - 1998 — появляется Nagios (изначально NetSaint). Первый массовый
open-source-инструмент, который делал именно то, что нужно: раз в минуту
проверял сервисы и, если что-то падало, слал письмо/SMS. - 2012–2015 — приходят Prometheus (Google→SoundCloud→CNCF) и
Grafana (Torkel Ödegaard, Швеция). Это уже эпоха метрик и дашбордов:
вместо «упало / не упало» — временные ряды с миллионами точек. - 2016 — Charity Majors и её команда придумывают термин observability
как отдельное явление, шире мониторинга. О разнице ниже.
Сегодня мониторинг — это индустрия на десятки миллиардов долларов
(Datadog, New Relic, Splunk, Dynatrace — публичные компании) и обязательный
слой любой серьёзной системы.
Что это такое
Мониторинг сводится к очень простой петле, повторяющейся бесконечно:
- Измерить что-то в системе (доступность сайта, длину очереди, число
ошибок в минуту, количество новых заявок). - Сравнить с ожиданием (порог, коридор, историческое среднее).
- Уведомить, если результат вышел за рамки.
- Запомнить состояние, чтобы в следующей итерации не пропустить
и не задублировать.
Всё остальное — обвязка вокруг этих четырёх шагов.
Ключевое отличие мониторинга от логирования: логи собирают всё подряд
и читаются постфактум, чтобы понять «что произошло». Мониторинг —
целенаправленный, работает в реальном времени и должен разбудить дежурного,
если норма нарушена. Логи — архив; мониторинг — сигнальная лампа.
Отличие от метрик: метрики — это сырьё (числа во времени: RPS, latency,
CPU). Мониторинг — надстройка, которая интерпретирует эти числа: «если
latency > 500 мс десять минут подряд — паникуем».
Отличие от observability (наблюдаемости): мониторинг отвечает на
известные вопросы («жива ли база?»), observability даёт возможность задать
новый, ещё не сформулированный («почему ровно у половины пользователей из
Германии ошибка 502 в понедельник в 15:47?»). Мониторинг работает на
предопределённых дашбордах; observability — на структурированных событиях,
которые можно фильтровать и группировать произвольно.
Практически: любой рабочий мониторинг сегодня — это связка из агента
(что-то, что измеряет), хранилища временных рядов (TSDB вроде Prometheus,
InfluxDB, VictoriaMetrics), правил (когда бить тревогу) и канала
уведомлений (Telegram, Slack, PagerDuty, SMS).
Аналогии из жизни
Дымовой датчик в квартире. Висит на потолке, каждую секунду измеряет
концентрацию частиц, сравнивает с порогом и, если превышает — орёт. Идеальный
мониторинг: одна метрика, один порог, один канал уведомления.
Где ломается: датчик умеет только орать «дым есть», но не сказать, откуда
он. Точно так же и плохой мониторинг: приходит алерт «CPU 100%», а какой из
двадцати процессов виноват — идти разбираться руками. Настоящий мониторинг
должен присылать не только сигнал, но и контекст.
Медсестра в отделении реанимации обходит палаты, записывает пульс,
давление, сатурацию каждые два часа. Если что-то вылезло за коридор — вызывает
врача. Это тоже мониторинг: регулярный опрос, набор метрик, правило эскалации.
Где ломается: обход раз в два часа — это редкий «сэмплинг». Между обходами
пациент может успеть умереть. Поэтому серьёзные показатели (ЭКГ) снимают
непрерывно. В IT аналог: если ты пингуешь сайт раз в 5 минут, ты гарантированно
пропустишь падение длиной 4 минуты 59 секунд.
Спидометр в машине. Показывает скорость постоянно, а не в моменты,
когда её у тебя спрашивают. Плюс есть сигнальные лампочки: масло, температура,
ремень. Разные метрики — разные способы уведомления: скорость смотришь сам,
про масло тебе говорят.
Где ломается: спидометр не знает, куда ты едешь. Показатель «скорость
80 км/ч» — это норма на трассе и катастрофа во дворе. Хороший мониторинг
знает контекст: «500 запросов в секунду ночью» — норма для одного сервиса и
аномалия для другого.
Как это работает
Возьмём мониторинг веб-сайта — классический пример. Пошагово:
Шаг 1. Сборщик (collector).
Раз в N секунд (обычно 10–60) агент делает HTTP-запрос к твоему сайту:
GET /health или GET /. Записывает три числа: код ответа (200? 500?),
задержку в миллисекундах, размер ответа. Если сервер не ответил вообще —
записывает «timeout».
Шаг 2. Хранилище (TSDB, Time Series Database).
Числа падают в специальную БД для временных рядов. Пример структуры записи:
metric=http_response_time
labels={site="pik.ru", endpoint="/", region="msk"}
timestamp=1738296420
value=234
TSDB (Prometheus, InfluxDB) умеют хранить миллиарды таких точек и быстро
считать по ним агрегации: среднее за минуту, максимум за час, 95-й
перцентиль (значение, ниже которого 95% всех замеров) за сутки.
Перцентили — важный трюк. Среднее по времени отклика обманчиво: если у тебя
99% запросов быстрые, а 1% медленных, среднее скажет «нормально», а 99-й
перцентиль честно покажет, что каждый сотый пользователь ждёт 5 секунд.
Шаг 3. Правила (rules).
Отдельный движок постоянно перечитывает свежие точки и проверяет условия
вида «если за последние 5 минут более 3 замеров с кодом ≥ 500 —
триггер». В Prometheus это язык PromQL:
rate(http_requests_total{status=~"5.."}[5m]) > 0.01
(«доля ошибок 5xx за последние 5 минут больше 1%»).
Шаг 4. Уведомление (alerting).
Триггер попадает в диспетчер (Alertmanager, PagerDuty), тот решает: кому,
куда, с какой срочностью. Умеет группировать («не 500 писем за 500 упавших
проверок, а одно с общим числом»), заглушать по расписанию (maintenance
window), эскалировать (если через 15 минут никто не ответил — звонить второму
дежурному).
Шаг 5. Состояние (state).
Часто пропускают — и зря. Правильный монитор помнит, какие алерты уже
активны, чтобы не слать один и тот же сигнал каждую минуту. И помнит
«точку отсчёта» (offset, cursor, last_id), чтобы после падения самого
монитора продолжить с того же места, а не переиграть всё с нуля.
Если state не сохранён — монитор либо молчит про новые проблемы (потому что
считает, что уже уведомил), либо спамит одинаковыми сообщениями. Это самая
частая ошибка проектирования собственных мониторов, и она у меня вчера
случилась ровно так.
Пуш vs пулл. Есть две философии, кто с кем инициирует общение:
- Пулл (Prometheus-way): мониторинг сам ходит по сервисам и собирает
метрики. Плюсы: сервис не знает про мониторинг, легко отключить/поменять.
Минусы: сложнее с прокси и NAT, надо держать список целей. - Пуш (StatsD, InfluxDB, Datadog): сервис сам отправляет метрики
наружу. Плюсы: работает через любые NAT, годится для короткоживущих
процессов (Lambda, cron-задачи). Минусы: если приёмник упал, метрики
теряются; надо где-то держать секреты.
Хорошая практика — использовать оба: пулл для стабильной инфраструктуры,
пуш для эфемерных задач.
Где встречается в обычной жизни
- Автомобиль: приборная панель — это мониторинг двадцати систем сразу.
Топливо, температура, давление шин, износ колодок, состояние аккумулятора. - Умные часы: отслеживают пульс постоянно, шаги, кислород в крови,
падения. Если пульс > 120 в покое три часа — сработает уведомление. - Стиральная машина современного класса пишет диагностический лог: при
поломке мастер втыкает USB-кабель и видит «датчик давления жаловался
6 раз за последнюю неделю» — точно как в серверном мониторинге. - Погодные приложения — по сути мониторинг атмосферы: сеть тысяч
датчиков, агрегатор, правила («если давление резко упало — предупредить
о буре»). - Банковское приложение уведомляет о списании больше 5 000 ₽ или о
входе с нового устройства. Тот же паттерн: измерение → правило →
уведомление.
Где встречается в IT и бизнесе
- Uptime-мониторинг сайтов: UptimeRobot, Pingdom, Better Stack.
Раз в минуту — пинг из десяти точек мира, если из большинства не отвечает —
SMS. - Мониторинг инфраструктуры: Prometheus + Grafana, Zabbix, Nagios.
Смотрит CPU, память, диск, сеть на всех серверах. - APM (Application Performance Monitoring): New Relic, Datadog, Sentry.
Разбирает каждый запрос внутри приложения: сколько заняла БД, сколько
внешний API, где было исключение. - Мониторинг заявок и продаж (то, что я делал вчера): каждая новая
заявка проходит через скоринг — набор правил про признаки спама. Если
score выше порога, приходит алерт в Telegram с разбором. - Мониторинг качества в call-центрах: система пишет разговоры и по
паттернам (интонация, ключевые слова, длина пауз) отмечает потенциально
проблемные. Супервизор потом слушает точечно.
Кто пользуется
Все, кто держит хоть что-то работающее в сети. Порядки величин:
- Datadog (публичная компания, тикер DDOG, капитализация ≈ $40 млрд на
2026 год) обрабатывает по разным оценкам триллионы точек метрик в сутки
для более чем 25 000 клиентов. Точные цифры — в отчётах инвесторам. - Google SRE — команда, изобретавшая современный подход к мониторингу.
Их книга «Site Reliability Engineering» (O'Reilly, 2016) — де-факто
стандарт. Оттуда пошли термины SLO (Service Level Objective), error
budget, four golden signals. - Grafana Labs — платформа для дашбордов, установлена в миллионах
инстансов, около 20 миллионов пользователей по их собственным заявлениям. - PagerDuty — специализированный алертинг для дежурств. Держит расписания
on-call для десятков тысяч технических команд по всему миру. - Яндекс внутри использует свою систему Yasm и Solomon (публично об
этом рассказывали в докладах на Highload). Классические Prometheus и
Grafana тоже везде.
Из моего мира: Marquiz и любая CRM показывают тебе дашборд с воронкой —
это тоже мониторинг, только продуктовый, а не технический.
Альтернативы и конкуренты
Prometheus + Grafana + Alertmanager (open-source, CNCF).
Плюсы: бесплатно, гибко, огромное сообщество, стал стандартом.
Минусы: собирать по частям, кривая входа неделя-две, при больших объёмах
приходится подключать VictoriaMetrics или Thanos.
Datadog (SaaS).
Плюсы: включил и работает, отличный UI, интеграции с 800+ сервисами.
Минусы: дорого при масштабе (счёт может расти с трафиком экспоненциально),
данные ходят наружу.
Zabbix (open-source, венгерская разработка).
Плюсы: одна коробка со всем, отличный для классической enterprise-серверной,
хорошо работает без интернета.
Минусы: устаревший UI, менее удобен для микросервисов и cloud-native.
Nagios / Icinga (open-source, легенда 2000-х).
Плюсы: проверено временем, миллион готовых плагинов.
Минусы: конфиг в текстовых файлах, идеология «up/down», без метрик.
New Relic (SaaS APM).
Плюсы: лучшее в классе application-monitoring, автотрейсинг Java, .NET,
Node.js.
Минусы: цена, лок-ин.
Для маленьких pet-проектов часто вообще достаточно Uptime Kuma —
однофайловый Docker-контейнер, который делает 80% Pingdom бесплатно.
Когда НЕ стоит использовать
- Прототип на выходные, живой один день. Мониторинг требует
сопровождения. Настраивать Prometheus для MVP — потерянные два дня.
Логи +curl -Iруками достаточно. - Система, в которой нет чёткого понятия «нормы». Если ты сам не
знаешь, какой уровень CPU нормальный для твоего сервиса, — сначала
наблюдай неделю глазами. Иначе будешь тонуть в ложных срабатываниях. - Когда нельзя реагировать в разумный срок. Мониторинг без дежурного
или процесса реагирования — просто трата денег. Если алерт приходит в
чат, где никто не читает, — лучше не приходил бы.
Alert fatigue
Главная патология мониторинга — «усталость от алертов». Если система шлёт 200 писем в день, из которых 195 ложных, то настоящую проблему в этом шуме никто не увидит. Правило Google SRE: если алерт не требует вмешательства человека прямо сейчас — это не алерт, а метрика для дашборда. Каждый алерт должен быть actionable.
Связанные понятия
- Observability — умение задать системе произвольный вопрос постфактум,
а не только заранее заготовленные. - SLO / SLA / SLI — цель по надёжности (SLO), контракт с клиентом (SLA),
измеряемый показатель (SLI). Основа осмысленного мониторинга. - Error budget — сколько минут падений в квартал ты можешь себе
позволить в рамках SLO. Полезно, чтобы не паниковать по мелочам. - Alertmanager — компонент Prometheus, который решает, кому и как
доставить алерт. - Time Series Database (TSDB) — специализированная БД для метрик:
Prometheus, InfluxDB, VictoriaMetrics, TimescaleDB. - Golden signals — четыре сигнала, по которым Google SRE советует
мониторить любой сервис: latency, traffic, errors, saturation. - Heartbeat — сообщение «я жив», которое сервис шлёт мониторингу
регулярно, чтобы отсутствие сообщения тоже было сигналом. - Дедупликация алертов — объединение сотни одинаковых срабатываний в
одно письмо, чтобы не спамить дежурному.
Литература и источники
- «Site Reliability Engineering» (O'Reilly, 2016, en) — коллектив Google,
ред. Beyer, Jones, Petoff, Murphy. Бесплатно на sre.google/books/. Главы
4–6 — базовый учебник мониторинга. - «Observability Engineering» (O'Reilly, 2022, en) — Charity Majors, Liz
Fong-Jones, George Miranda. Про переход от классического мониторинга к
observability. - Документация Prometheus: prometheus.io/docs/ — эталон open-source
документации. - Wikipedia: Network monitoring,
Application performance management. - Блог Charity Majors (charity.wtf) — резкие эссе про observability
от её изобретательницы. - Доклады с Highload++ по мониторингу Яндекса и Авито — искать на YouTube
по запросам «Solomon Yandex мониторинг», «Авито мониторинг».
Где встретилось у меня
Вчера мы с Claude собирали инкрементальный монитор входящих заявок в CRM
для отслеживания спама: пришла заявка → скоринг по признакам подделки yclid,
подозрительным устройствам и таймингам → уведомление в Telegram с
разбором, если что-то не так. Классическая схема из четырёх шагов (измерь →
сравни → уведоми → запомни состояние) — и, конечно, я споткнулся ровно о
шаг «запомни состояние»: файл state записывался только при наличии новых
лидов, из-за чего первая итерация уходила в пустоту и монитор молчал два
часа. Ровно про это предупреждает любой SRE-учебник — и вот теперь я знаю,
почему.
Краткое резюме
- Мониторинг = четыре шага: измерь, сравни, уведоми, запомни. Всё
остальное — обвязка. - Ключевое отличие от логирования: мониторинг работает в реальном времени и
зовёт человека. Логи читают потом. - Три сущности любого стека: сборщик метрик, TSDB для хранения, движок
правил и уведомлений. - Пуш vs пулл — два подхода; выбирают по инфраструктуре и характеру
сервисов. - Главная патология — alert fatigue. Каждый алерт должен требовать
действия, иначе это шум. - Стандарт индустрии — Prometheus + Grafana + Alertmanager, если on-prem;
Datadog или New Relic, если готов платить и хочешь «под ключ».