Короткий ответ: какой стек мониторинга выбрать в 2026 году
Для большинства небольших и средних инфраструктур в 2026 году подходит связка Prometheus или VictoriaMetrics, exporters, Grafana и Alertmanager. Для новых приложений добавьте OpenTelemetry Collector, который принимает метрики, логи и трейсы, фильтрует их и отправляет в подходящие backend-системы. Такой набор закрывает мониторинг Kubernetes, Docker, виртуальных машин, Nginx, баз данных и внутренних API.
Prometheus выбирайте для одной команды, одного региона и умеренного срока хранения. VictoriaMetrics удобна, когда растут число временных рядов, объем данных или retention. Loki подключайте при реальной потребности в централизованных логах, а Tempo - когда микросервисам нужны распределенные трассировки. Для нескольких кластеров и регионов смотрите на Thanos или Grafana Mimir, но только после расчета масштаба и требований к отказоустойчивости.
Итоговый выбор определяют размер среды, частота сбора, кардинальность labels, срок хранения, тип нагрузок, требования к SLO и компетенции команды. Популярность инструмента не компенсирует слабую модель данных, шумные алерты и отсутствие плана восстановления.
Базовый стек для Kubernetes, Docker и виртуальных машин
| Задача | Компонент | Назначение |
|---|---|---|
| Сбор инфраструктурных метрик | Prometheus exporters | Метрики Linux, узлов Kubernetes, Nginx, баз данных, контейнеров и сетевых сервисов. |
| Хранение метрик | Prometheus TSDB или VictoriaMetrics | Запись временных рядов, выполнение запросов и хранение истории. |
| Визуализация | Grafana | Дашборды, запросы, исследование метрик, логов и трейсов. |
| Оповещения | Prometheus Alerting Rules и Alertmanager | Расчет условий, группировка, дедупликация и доставка уведомлений. |
| Унифицированный сбор телеметрии | OpenTelemetry Collector | Прием, фильтрация, обогащение, буферизация и маршрутизация сигналов. |
| Централизованные логи | Fluent Bit или Vector и Loki | Сбор и поиск событий приложений и инфраструктуры. |
| Распределенные трассировки | OpenTelemetry SDK, Collector и Tempo | Поиск задержек и ошибок между сервисами одного запроса. |
Для Kubernetes начните с метрик kube-state-metrics, node-exporter и компонентов кластера. В Docker-среде добавьте метрики контейнеров, Docker daemon и хостов. Для виртуальных машин соберите CPU, RAM, диски, сеть, состояние systemd-сервисов и прикладные показатели.
Когда базовой связки уже недостаточно
Переход к распределенному backend нужен, когда один экземпляр Prometheus перестает выдерживать ingestion или запросы, когда требуется единый обзор нескольких кластеров, либо когда история должна храниться месяцами в object storage. Признаки усложнения архитектуры:
- несколько Kubernetes-кластеров, регионов или изолированных площадок;
- сотни тысяч или миллионы активных временных рядов;
- высокая кардинальность labels, например отдельный ряд для каждого пользователя, заказа или динамического URL;
- требование переживать отказ отдельного экземпляра без полной потери данных;
- долгий retention при сохранении короткого интервала сбора;
- единая точка запросов для нескольких команд и платформ.
В такой среде Prometheus может отправлять данные через remote write в Thanos или Grafana Mimir, а object storage хранит долгую историю. Схема дает запас по росту, но добавляет query layer, compactor, репликацию, очереди и новые точки отказа. Перед переходом измерьте активные ряды, samples per second, задержку запросов и объем диска за сутки.
Начните с требований инфраструктуры, а не с названия инструмента
Фраза «поставить мониторинг» не описывает задачу. Сначала зафиксируйте, какие операции критичны для пользователей, как быстро команда должна узнать о сбое, сколько истории требуется для расследований и какой уровень потери данных допустим. Мониторинг поддерживает надежность бизнеса тогда, когда помогает быстро обнаружить проблему, найти источник и восстановить работу.
Для интернет-магазина критичными сигналами станут доступность каталога, ошибки корзины, задержка платежного API и состояние базы данных. Для платформы обучения нужны доступность LMS, активность пользователей, время ответа БД и ошибки авторизации. Для NAS или внутреннего сервиса приоритет могут иметь заполнение пула, состояние дисков, latency хранилища и ошибки репликации.
Размер среды и модель развертывания
Считайте не только серверы. В инвентаризацию включите виртуальные машины, Kubernetes-кластеры, namespace, базы данных, очереди, балансировщики, облачные сервисы, изолированные сети и внешние зависимости. Двадцать узлов с тысячами динамических labels способны создать больше проблем, чем двести узлов с понятным набором статичных меток.
| Профиль среды | Типичные условия | Первый вариант |
|---|---|---|
| Малая | До нескольких десятков узлов, один регион, одна команда, умеренный поток метрик. | Prometheus, Grafana, Alertmanager и exporters. |
| Средняя | Один или несколько кластеров, несколько команд, централизованные логи, требования к общим дашбордам. | Prometheus Operator или совместимая схема, Grafana, Alertmanager, Loki, при необходимости VictoriaMetrics. |
| Крупная | Несколько регионов, много кластеров, долгий retention, отказоустойчивость и единые запросы. | Несколько Prometheus с remote write в Thanos или Grafana Mimir, object storage и резервирование. |
Учитывайте модель сети. Pull-сбор Prometheus удобен, когда backend видит targets напрямую. В изолированных площадках и нестабильных каналах чаще нужен агент, локальная очередь или gateway Collector, который доставит данные после восстановления соединения.
Типы сигналов и задачи диагностики
Метрики показывают состояние и динамику: загрузку CPU, свободную память, RPS, долю ошибок, latency и число активных соединений. Они хорошо подходят для SLO и алертов.
Логи раскрывают детали события: этап операции, текст ошибки, идентификатор запроса, имя сервиса и входные параметры без персональных данных. По журналам можно понять, на каком шаге оборвалась операция, какой компонент инициировал сбой, сколько пользователей затронуто и повторяется ли ошибка.
Трейсы связывают вызовы нескольких сервисов в один запрос. Они помогают увидеть, что 900 миллисекунд задержки API появились из-за запроса к базе данных, внешнего платежного сервиса или очереди.
- Для Nginx собирайте количество запросов, коды ответа, request duration, активные соединения и ошибки upstream.
- Для API добавьте RPS, latency по квантилям, частоту ошибок, размер очередей и бизнес-операции.
- Для баз данных контролируйте connections, locks, cache hit ratio, slow queries, replication lag и свободное место.
- Для Docker и Kubernetes отслеживайте рестарты, OOMKilled, pending pods, состояние nodes, CPU throttling и сетевые ошибки.
Для последовательного поиска узкого места пригодится разбор диагностики bottleneck по метрикам. Он помогает отделить краткий пик от повторяющейся деградации.
Retention, частота сбора и кардинальность
Интервал scrape напрямую влияет на поток samples. При 100 000 активных рядов и интервале 15 секунд система получает примерно 6 667 samples в секунду. При интервале 60 секунд поток снижается в четыре раза, но короткие пики становятся менее заметными.
Главная причина неконтролируемого роста чаще скрывается в labels. Метка user_id, полный URL с query-параметрами или динамический идентификатор контейнера создают новый временной ряд для каждого значения. Для метрик используйте ограниченный набор измерений: service, environment, cluster, instance, status и контролируемый маршрут.
Предварительный расчет можно выполнить так:
samples_per_day = active_series * (86400 / scrape_interval_seconds)
retention_samples = samples_per_day * retention_days
Например, 500 000 активных рядов при интервале 30 секунд дают около 1,44 млрд samples в сутки. Сжатие, chunks, индексы, WAL, репликация и служебные данные заметно увеличат итоговый объем. Для планирования измерьте фактический расход диска за 24 часа и заложите резерв минимум 30-50 процентов.
Избыточное логирование увеличивает расходы на хранение, усложняет поиск важных событий и повышает риск раскрытия персональной информации. Ограничивайте уровни debug в production, маскируйте PII, задавайте срок хранения для каждого типа данных и удаляйте поля, которые не участвуют в диагностике.
SLO и требования к доступности мониторинга
Для тестовой среды достаточно обнаружить проблему в течение часа. Для платежного API задержка уведомления в 15 минут уже может привести к заметным потерям. При доступности сервиса 99,9% допустимое время недоступности за 30 дней составляет примерно 43 минуты, при 99,95% - около 22 минут. Эти числа помогают определить требования к сбору и оповещениям.
- Потеря данных: решите, допустима ли потеря нескольких минут метрик при отказе backend.
- Задержка уведомления: задайте целевое время от появления симптома до сообщения дежурному.
- Резервирование: определите, нужно ли дублировать Prometheus, Alertmanager, Collector и хранилище.
- Восстановление: зафиксируйте RTO и RPO для компонентов мониторинга.
- Безопасность: ограничьте доступ к логам, секретам, trace attributes и административным endpoint.
Для медицинских систем требования к безопасности, изоляции и доступности отличаются от обычного внутреннего сервиса. Практический пример выбора Zabbix, Prometheus и Grafana для такой среды приведен в руководстве по мониторингу медицинских IT-систем.
Сбор метрик, логов и трейсов: что выбрать на входе
Слой сбора должен доставлять данные с предсказуемой задержкой, выдерживать недоступность backend и ограничивать поток лишней телеметрии. Разделяйте agent и gateway: агент находится рядом с источником, а gateway принимает данные от нескольких агентов, применяет общие политики и отправляет их в хранилища.
Prometheus exporters для инфраструктурных метрик
node_exporter подходит для Linux-узлов и отдает показатели CPU, RAM, filesystem, network и system load. kube-state-metrics описывает состояние объектов Kubernetes: deployment, pod, job, node и resource requests. Для Nginx, PostgreSQL, MySQL, Redis, RabbitMQ и сетевых устройств используйте профильные exporters или встроенные endpoints.
Минимальный набор для узла:
- занятое и свободное место на filesystem;
- inode usage и ошибки диска;
- CPU utilization, load average и steal time для виртуальных машин;
- использование памяти, swap и OOM-события;
- сетевой throughput, packet errors и drops;
- доступность exporter и возраст последнего sample.
Проверяйте качество метрик до публикации дашбордов. У каждой метрики должны быть понятные единицы измерения, описание, стабильные labels и ожидаемое поведение при отсутствии данных. Метрика без владельца и сценария реакции быстро превращается в шум.
OpenTelemetry Collector как единая точка сбора
OpenTelemetry Collector состоит из receivers, processors и exporters. Receivers принимают OTLP, Prometheus и другие форматы. Processors добавляют атрибуты, удаляют лишние поля, выполняют batch и sampling. Exporters передают данные в metric, log или trace backend.
Для серверов и pod обычно подходит режим agent. Gateway полезен, когда нужно централизованно применять правила фильтрации, ограничивать объем или выбирать разные хранилища для команд. Добавьте очередь, retry и ограничение памяти, чтобы недоступность backend не привела к исчерпанию RAM на узлах.
Collector не заменяет хранилище, Grafana или Alertmanager. Он отвечает за прием и доставку телеметрии. Его собственные метрики нужно контролировать: число rejected spans, размер очереди, ошибки export и объем dropped data.
Централизованный сбор логов
Fluent Bit обычно выбирают за небольшой ресурсный профиль и распространенность в Kubernetes. Vector удобен для сложной маршрутизации, преобразований и нескольких направлений доставки. На стороне хранения Loki хорошо сочетается с Grafana и хранит индекс по ограниченному набору labels, а содержание сообщения остается в chunks.
Для поиска задайте единый формат записи:
timestampв UTC с миллисекундами или микросекундами;service,environment,clusterиinstance;level, например info, warn или error;request_idиtrace_idдля корреляции;- код ошибки и безопасное описание операции.
Не превращайте каждый динамический атрибут в label Loki. User ID, UUID заказа и полный URL лучше оставить полями сообщения. Ограничьте debug, удаляйте секреты до отправки и задайте отдельный retention для access logs, ошибок и аудита.
Полный пример связки логов, метрик и трейсов в Kubernetes с Grafana, Loki, Prometheus и Tempo разобран в практическом руководстве по observability-стеку.
Распределенные трассировки для микросервисов
Трейсы нужны, когда один пользовательский запрос проходит через несколько сервисов, очередей и внешних API. OpenTelemetry SDK создает spans, Collector принимает и обрабатывает их, Tempo или другой trace backend хранит историю. Grafana связывает trace ID с логами и метриками.
Начните с sampling policy. Для обычного трафика может подойти head sampling на уровне 1-10 процентов, а ошибки, медленные запросы и отдельные критичные операции стоит сохранять по отдельному правилу. Точные значения зависят от RPS, стоимости хранения и требований к расследованиям.
Контролируйте размер attributes. Полезны имя сервиса, маршрут, статус, регион и тип операции. Токены, пароли, содержимое запросов и персональные данные в spans не записывайте.
Хранилище метрик: локальное, масштабируемое или распределенное
Backend выбирают по четырем измерениям: скорость записи, характер запросов, срок хранения и поведение при отказе. При одинаковом количестве узлов высокая кардинальность и частый scrape могут дать большую нагрузку, чем сама вычислительная инфраструктура.
Prometheus TSDB для локального мониторинга
Встроенное Prometheus TSDB подходит для одной команды, одного региона и умеренного retention, например 15-30 дней оперативной истории. Prometheus прост в запуске, хорошо работает с exporters и поддерживает зрелую экосистему PromQL и alerting rules.
Ограничения нужно зафиксировать заранее:
- локальный диск одного экземпляра становится отдельной точкой отказа;
- долгий retention увеличивает требования к диску и compaction;
- несколько Prometheus требуют federation или отдельного общего слоя запросов;
- резервная копия конфигурации не заменяет резервную копию данных TSDB;
- дублирование сбора увеличивает объем samples и требует дедупликации.
Для малой среды это разумная стартовая точка. Перед запуском задайте размер диска, alert на его заполнение и процедуру восстановления из snapshot.
VictoriaMetrics для простого масштабирования
VictoriaMetrics часто выбирают, когда Prometheus перестает укладываться в доступный CPU, RAM или диск, а распределенный кластер пока не нужен. Single-node вариант уменьшает число компонентов, а cluster-вариант разделяет роли хранения и обработки запросов.
Экосистема сохраняет совместимость с привычными exporters и основным набором PromQL-запросов, но сложные панели и recording rules нужно проверять на реальных данных. Сравнивайте:
- скорость ingestion при вашем числе активных рядов;
- время и стоимость миграции;
- поведение при долгом retention;
- поддержку remote write и текущих инструментов;
- компетенции команды и доступность диагностики проблем;
- стоимость дисков, object storage и резервирования.
VictoriaMetrics не заменяет проектирование labels и политики хранения. Плохая кардинальность продолжит расходовать ресурсы в любом backend.
Thanos и Grafana Mimir для нескольких кластеров и регионов
Thanos добавляет единый query layer, хранение блоков в object storage, compactor и механизмы работы с несколькими Prometheus. Sidecar связывает локальный Prometheus с общей системой. Такой подход сохраняет привычную модель сбора и помогает собрать историю из разных кластеров.
Grafana Mimir рассчитана на горизонтальное масштабирование метрик с разделением ролей distributor, ingester, querier, store-gateway и compactor. Она подходит командам, которые готовы поддерживать распределенный backend и контролировать его очереди, репликацию, лимиты tenant и object storage.
Оба варианта требуют проверки:
- что произойдет при отказе одного региона;
- как query layer поведет себя при недоступности части блоков;
- как восстанавливаются данные и правила после повреждения storage;
- какая задержка появляется между сбором и отображением;
- как команда диагностирует отставание ingestion и ошибки compactor.
Распределенная схема оправдана измеримыми требованиями к масштабу и доступности. Несколько новых сервисов сами по себе не улучшают мониторинг.
Как рассчитать срок хранения и стоимость
Зафиксируйте следующие параметры:
- число активных временных рядов;
- интервал сбора и samples per second;
- retention для оперативной истории;
- объем записи в байтах на sample по результатам пилота;
- репликацию и запас свободного места;
- стоимость быстрых дисков, object storage, запросов и исходящего трафика.
Разделяйте горячие и архивные данные. Высокая детализация нужна для расследования инцидента в ближайшие дни. Для истории за полгода часто достаточно recording rules с агрегатами по сервису, региону и SLO.
| Слой хранения | Детализация | Практическая задача |
|---|---|---|
| Оперативный | 15-30 секунд, короткий retention | Поиск причины текущей деградации. |
| Средний | 1-5 минут после агрегации | Сравнение недельных и месячных трендов. |
| Архивный | Агрегаты, длительная история | Планирование ресурсов, аудит SLO и анализ сезонности. |
Визуализация и оповещения в системе мониторинга
Дашборд отвечает на вопрос «что происходит», алерт сообщает «когда нужна реакция», а runbook объясняет «что проверить дальше». Если один из этих элементов отсутствует, дежурный получает сигнал без рабочего контекста.
Дашборды Grafana для разных уровней диагностики
Выстройте экраны по глубине поиска:
- Обзор SLO: доступность, error budget, latency и доля успешных операций.
- Платформа: состояние кластеров, узлов, ingress, DNS, очередей и баз данных.
- Сервис: RPS, коды ответов, p50, p95, p99, активные соединения и зависимости.
- Компонент: pod, контейнер, виртуальная машина, disk, network interface или конкретный процесс.
- Событие: связанные логи, trace ID, ошибки и временной интервал инцидента.
Сделайте единые переменные environment, cluster, namespace, service и instance. Одинаковые имена labels сокращают число отдельных панелей и позволяют переходить между уровнями без ручного переписывания запросов.
Панель должна отображать единицы, период расчета и допустимый диапазон. График без подписи «requests per second» или «seconds» заставляет дежурного тратить время на интерпретацию.
Правила алертов: что действительно требует реакции
Начинайте с симптомов, которые влияют на пользователя или SLO. Порог CPU сам по себе редко описывает инцидент: 90% CPU на стабильном сервисе может быть нормой, а 40% CPU при резком росте latency уже требует проверки.
Пример алерта на долю ошибок:
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m])) > 0.05
Для правила задайте окно for: 10m, severity, владельца сервиса и ссылку на runbook. Критерии должны учитывать отсутствие данных:
absent(up{job="node"})
Разделяйте уровни:
- critical: требуется немедленная реакция, например недоступность платежного API или потеря кворума;
- warning: есть запас времени, например рост заполнения диска или увеличение очереди;
- ticket: событие попадает в плановую работу, но не будит дежурного.
Не отправляйте уведомление на каждый restart pod, если один restart не нарушает SLO. Ищите устойчивые симптомы: долю ошибок, длительность деградации, потерю реплик и отсутствие данных.
Маршрутизация, дедупликация и подавление уведомлений
Alertmanager группирует связанные события, удаляет дубликаты и направляет их нужной команде. Для группы задайте labels team, service, environment и severity.
- Grouping: объединяет десятки событий одного инцидента в одно сообщение.
- Inhibition: подавляет вторичные алерты, когда уже сработала причина верхнего уровня.
- Silence: временно отключает ожидаемые уведомления во время согласованных работ.
- Escalation: передает событие другой группе, если первая не подтвердила реакцию.
Сообщение должно содержать сервис, окружение, severity, время начала, краткий симптом, ссылку на Grafana и runbook. Уведомление без владельца и инструкции фиксирует факт, но не сокращает время восстановления.
Связь алерта с логами и причиной сбоя
Для корреляции используйте одинаковые значения service, instance, environment и временные границы. Если приложение передает trace_id в логах и метриках, дежурный может перейти из алерта в конкретный запрос.
Рабочая последовательность выглядит так:
- Проверить, затронуто ли SLO и сколько запросов завершилось ошибкой.
- Сравнить latency и error rate по сервисам, регионам и кодам ответа.
- Открыть логи в том же временном окне и найти повторяющийся код ошибки.
- Перейти по trace ID и определить самый медленный span.
- Проверить ресурс, зависимость или конфигурацию, связанную с этим span.
Такой процесс помогает отличить перегрузку базы от ошибки приложения, внешнего timeout или проблем сети. Для Kubernetes готовый алгоритм диагностики pod и узлов через метрики собран в практическом руководстве по поиску неисправностей.
Сравнение готовых вариантов стека
Ниже приведены архитектурные профили, а не рейтинг продуктов. Перед выбором прогоните каждый вариант на собственном потоке данных и ваших запросах.
Prometheus + Grafana + Alertmanager
Это минимальный зрелый стек для одной команды и малой или средней инфраструктуры. Prometheus собирает метрики через pull, exporters описывают targets, Grafana строит панели, Alertmanager доставляет уведомления.
| Критерий | Оценка | Ограничение |
|---|---|---|
| Надежность | Высокая при одном регионе и корректных backup | Один экземпляр требует отдельного плана отказа. |
| Масштабируемость | Хорошая вертикально | Много кластеров и долгий retention требуют дополнительных компонентов. |
| Поддержка | Простая для команды с опытом Kubernetes | Нужно следить за кардинальностью и диском. |
| Стоимость | Низкая по лицензиям | Расходы переходят в диски, CPU и время специалистов. |
| Риск | Шумные правила и локальная потеря истории | Нужны тесты уведомлений и восстановление snapshot. |
Логи и трейсы подключаются отдельно. Это снижает стартовую сложность и позволяет добавлять диагностические слои по фактической потребности.
VictoriaMetrics + Grafana + Alertmanager
Связка подходит средам, где вырос поток временных рядов или требуется более длительное хранение при ограниченных ресурсах. Single-node вариант сохраняет компактную схему. Cluster-вариант дает горизонтальный рост, но требует больше процессов для поддержки.
Проверьте на пилоте ingestion, latency запросов, объем диска, миграцию правил, совместимость панелей и поведение при отказе узла. Сравнивайте итоговую стоимость владения, а не отдельный показатель bytes per sample.
Prometheus или VictoriaMetrics с Thanos либо Grafana Mimir
Этот профиль предназначен для нескольких кластеров, регионов и долгой истории в object storage. Локальные сборщики сохраняют близость к targets, а общий query layer объединяет данные.
Thanos обычно проще объяснить команде, которая уже работает с Prometheus и хочет добавить общую историю. Grafana Mimir подходит для организации с платформенной экспертизой, tenant-разделением и потребностью масштабировать ingestion по нескольким компонентам. В обоих случаях появятся compactor, object storage, очереди, репликация и дополнительные алерты на сам backend.
Для EdTech-платформ с тысячами пользователей полезно разделить метрики пользовательских операций, нагрузки базы данных и состояния Kubernetes. Пример такой архитектуры приведен в руководстве по мониторингу образовательной инфраструктуры.
OpenTelemetry-ориентированный стек
OpenTelemetry задает единый способ инструментирования и передачи метрик, логов и трейсов. Он не диктует конкретное хранилище. В одной схеме метрики могут уходить в Prometheus-совместимый backend, логи в Loki, а трейсы в Tempo.
Преимущества подхода проявляются в новых микросервисах, где нужны trace context, единые атрибуты и независимость от конкретного backend. Сложность появляется в контроле sampling, схем атрибутов, версий SDK, нагрузки Collector и стоимости хранения трех типов телеметрии.
| Стек | Когда выбирать | Главный риск |
|---|---|---|
| Prometheus + Grafana + Alertmanager | Одна команда, один регион, умеренный retention. | Локальная история и рост диска. |
| VictoriaMetrics + Grafana + Alertmanager | Больше рядов, длительное хранение, желание сохранить компактную схему. | Ошибочная оценка совместимости и миграции. |
| Thanos или Grafana Mimir | Несколько кластеров, регионов и единый query layer. | Рост операционной сложности. |
| OpenTelemetry + специализированные backend | Новые микросервисы и единый стандарт телеметрии. | Высокий объем данных и слабый контроль атрибутов. |
Выбор стека для трех типовых сред
Небольшая инфраструктура: до нескольких десятков узлов
Исходные условия: одна команда, один регион, Kubernetes или несколько виртуальных машин, ограниченный бюджет времени на поддержку.
Состав: Prometheus, Grafana, Alertmanager, node-exporter, kube-state-metrics и профильные exporters для Nginx, базы данных и очереди. Конфигурацию, recording rules, alerting rules и dashboards храните в Git.
Retention метрик ограничьте сроком, который нужен для рабочих расследований, например 15-30 днями. Логи подключайте точечно, начиная с ошибок приложения и access logs критичных сервисов. Tempo добавляйте при наличии распределенных запросов и понятного плана sampling.
Распределенные компоненты не нужны, пока нет нескольких кластеров, долгой истории или подтвержденного дефицита ресурсов. Для безопасного пилота на облачных VDS и Kubernetes можно использовать облачную инфраструктуру Timeweb Cloud, если такой контур соответствует требованиям к размещению и безопасности.
Переход на следующий уровень: время запросов растет, диск быстро заполняется, несколько команд требуют общего представления, а один Prometheus становится критичной точкой отказа.
Средний Kubernetes-кластер с несколькими командами
Исходные условия: несколько namespace, команды приложений и платформы, общие SLO, централизованные логи и потребность отделить владельцев алертов.
Состав: Prometheus Operator или совместимая схема, kube-state-metrics, node-exporter, Grafana, Alertmanager, Fluent Bit или Vector, Loki и OpenTelemetry Collector для новых сервисов. VictoriaMetrics можно выбрать как backend, если измерения показывают высокую нагрузку или нужен более долгий retention.
Задайте стандартные labels: team, service, environment, cluster и namespace. Каждое production-правило должно иметь владельца, severity, окно for и runbook. Команда платформы поддерживает сбор и общие панели, команда сервиса отвечает за SLO, прикладные метрики и реакцию на собственные алерты.
Проверьте кардинальность на уровне namespace и сервисов. Ограничьте labels у ingress, database exporters и application metrics. Для логов задайте PII-фильтры до отправки в backend.
Переход на следующий уровень: появляются несколько регионов, несколько независимых кластеров, единый retention больше одного квартала или потребность переживать отказ целой площадки.
Крупная или географически распределенная среда
Исходные условия: несколько регионов, высокая скорость записи, десятки кластеров, общие SLO и требования к продолжению сбора при отказе части инфраструктуры.
Состав: локальные Prometheus или VictoriaMetrics, remote write в Thanos или Grafana Mimir, object storage, отдельные query-компоненты, Alertmanager с резервированием и Grafana с единой моделью переменных. Collector разворачивайте в agent и gateway-режимах, добавьте очереди, retry и лимиты памяти.
Разделите региональные и глобальные алерты. Локальный Alertmanager должен продолжать отправлять критичные уведомления при проблеме центрального query layer. Данные в object storage шифруйте, доступ выдавайте по ролям, а восстановление проверяйте на изолированном контуре.
Мониторьте сам pipeline: remote write errors, ingestion lag, dropped samples, состояние compactor, заполнение bucket, задержку query и доставку уведомлений. Распределенная архитектура без этих сигналов скрывает собственные отказы.
План запуска, проверки и дальнейшей поддержки
Успешный запуск заканчивается проверенным рабочим процессом, а не появлением нескольких pod в namespace. Идите короткими этапами: требования, пилот, алерты, отказ, измерение затрат, документация и расширение.
Пилот на критичном, но безопасном контуре
- Выберите один Kubernetes-кластер или несколько тестовых виртуальных машин.
- Подключите узлы, Nginx, базу данных, приложение и один внешний dependency.
- Зафиксируйте активные временные ряды, samples per second, объем логов и задержку отображения.
- Создайте обзорный дашборд, сервисный экран и три-пять алертов по реальным SLO.
- Проверьте, что уведомление содержит владельца, причину, ссылку на Grafana и порядок действий.
На пилоте смотрите на нагрузку агентов, Collector и backend. Пиковая нагрузка после подключения exporters должна быть измерена, а не оценена по числу серверов.
Тесты отказа и восстановления
Сымитируйте недоступность Prometheus, Grafana, Alertmanager, Collector, object storage и сети между регионами. Для каждого сценария зафиксируйте:
- какие данные теряются и за какой период;
- продолжается ли сбор на узлах;
- доставляется ли критичное уведомление;
- сколько времени занимает возврат сервиса;
- как восстанавливаются rules, dashboards, secrets и routing;
- какие алерты срабатывают на неисправность самого мониторинга.
Добавьте нагрузочное тестирование. Проверьте ingestion при штатном потоке, пиковом количестве pod и массовом рестарте сервисов. Отдельно измерьте тяжелые Grafana-запросы за 6 часов и за 30 дней.
Версионирование, резервные копии и обновления
Храните Helm values, Terraform, конфигурации Collector, alerting rules, recording rules, Grafana dashboards и политики retention в Git. Изменение должно проходить проверку синтаксиса и тестовый rollout.
Для крупных резервных копий используйте возобновляемую передачу по SSH, например rsync over SSH:
rsync -aH --partial --checksum --info=progress2 \
/srv/monitoring-backup/ ops@storage-vps:/srv/backup/monitoring/
Такая схема передает изменения, продолжает прерванные файлы и проверяет блоки. Удаленное Storage VPS отделяйте от основного сервера, ограничивайте SSH-ключ, проверяйте свободное место и периодически выполняйте пробное восстановление.
Перед обновлением зафиксируйте совместимость версий Prometheus, exporters, Grafana, Alertmanager, Collector и Kubernetes. Подготовьте процедуру отката и сохраните предыдущие образы, values и конфигурации.
Мониторинг самого мониторинга
Минимальный набор self-monitoring включает:
- доступность scrape endpoints и свежесть последнего sample;
- ошибки remote write и число dropped samples;
- задержку ingestion и размер очередей Collector;
- заполнение дисков, inode, WAL и object storage;
- ошибки query, timeout и рост времени ответа Grafana;
- состояние Alertmanager и успешную доставку сообщений;
- тестовый алерт, который регулярно проверяет дежурный канал.
Один тестовый алерт в неделю подтверждает, что цепочка rule, Alertmanager, интеграция с мессенджером и дежурная процедура все еще работают. Результат проверки фиксируйте рядом с конфигурацией.
Итоговый чек-лист выбора стека
Вопросы перед утверждением архитектуры
- Какие пользовательские операции защищает мониторинг?
- Сколько узлов, кластеров, регионов и изолированных сетей нужно подключить?
- Сколько активных временных рядов и samples per second ожидается?
- Есть ли labels с user ID, UUID, полными URL или другими источниками высокой кардинальности?
- Нужны ли логи, трейсы или достаточно метрик?
- Какой retention нужен для оперативной работы, аудита и планирования ресурсов?
- Где будут храниться горячие данные, архив и резервные копии?
- Какой объем потери данных допустим при отказе backend?
- Какой RTO нужен для восстановления мониторинга?
- Кто владеет каждым алертом и кто обновляет runbook?
- Есть ли у команды опыт самостоятельного развертывания, Helm, Terraform и сопровождения managed monitoring?
- Сколько стоят диски, object storage, трафик и часы специалистов?
- Как проверяются версии, обновления, откат и восстановление?
Признаки правильного выбора
Выбранный стек позволяет быстро обнаружить сбой, определить затронутый сервис и пользователей, найти первопричину по метрикам, логам или трейсам, доставить уведомление нужной команде и восстановить работу после отказа компонента.
Система остается управляемой при росте числа узлов и временных рядов. Кардинальность контролируется, retention связан с задачами, алерты имеют владельцев, а резервные копии регулярно проверяются восстановлением.
Начинайте с минимального набора, который закрывает текущие SLO: Prometheus или VictoriaMetrics, exporters, Grafana и Alertmanager. OpenTelemetry Collector, Loki, Tempo, Thanos и Grafana Mimir добавляйте по измеримым требованиям к сигналам, масштабу, сроку хранения и доступности. Такой порядок сокращает риск избыточной архитектуры и оставляет команде понятный путь роста.