Как я поднял мониторинг инфраструктуры за 3 часа

Кейс junior DevOps без героизма и магии

Как я поднял мониторинг инфраструктуры за 3 часа

Спойлер: ничего гениального. Зато теперь инфраструктура не «чёрный ящик».

Контекст: «у нас нет мониторинга, но он нужен вчера»

История довольно банальная.

Небольшая команда, несколько сервисов, часть в Docker, часть просто на VM. Прод падает редко, но каждый раз — внезапно. Причина стандартная: «а кто его знает, что там было».

В какой-то момент это всех достало, и мне прилетела задача:

«Подними базовый мониторинг. Не идеальный, просто чтобы видеть, что происходит».

Я тогда был Junior DevOps. Без иллюзий, без архитектурных амбиций и без времени.

Ограничения были жёсткие:

  • времени — пара часов
  • бюджета — 0
  • доступ — обычный VPS + Docker
  • цель — CPU / память / диск / контейнеры / алерты

Никакого SRE, SLO и observability-манифестов. Просто — чтобы не гадать после падения.

Что хотелось получить в итоге

Минимальный набор, без фанатизма:

  • загрузка CPU
  • память
  • диск (и чтобы не заканчивался внезапно)
  • что происходит с Docker-контейнерами
  • алерт, если всё совсем плохо

Главное требование — быстро и воспроизводимо. Если завтра скажут «давай на стейдже так же», я должен повторить без боли.

Почему не Zabbix и не «что-то попроще»

Первой мыслью был Zabbix. Он умеет всё, шаблонов море, enterprise-стандарт и так далее.

Но если честно — я бы не уложился во время.

Zabbix хорош, когда:

  • инфраструктура уже устоявшаяся
  • есть время на шаблоны, хосты, авто-дискавери
  • нужен контроль всего и сразу

У меня была другая задача: “сделать, чтобы заработало сегодня”.

Netdata я тоже смотрел, но:

  • алерты там на старте довольно условные
  • контейнеры видно, но кастомизировать тяжеловато
  • хотелось чего-то более «стандартного»

В итоге выбор был очевиден и скучен:

Prometheus + Grafana + node_exporter + cAdvisor

Да, банально. Зато разворачивается за 15 минут, много кто работал и умеет, да и развивать в последующем труда не составит.

Архитектура «на коленке»

Вся схема выглядела так:

  • отдельная VM под мониторинг
  • всё в docker-compose
  • никаких TLS, auth и high availability
  • алерты — хоть куда-нибудь (для начала)

Схема максимально простая — и в этом её плюс.

Поднимаем стек (docker-compose)

Я сразу пошёл по пути «один compose — всё сразу».

Как я поднял мониторинг инфраструктуры за 3 часа

Ничего необычного:

Node Exporter работает в режиме host network — это необходимо сбора метрик системы без изоляции в контейнере.

cAdvisor запущен с флагом privileged и монтирует системные директории в read-only режиме. Это дает доступ к информации о всех запущенных контейнерах и их ресурсах.

Именованные volumes (prom_data,graf_data) для сохранности данных Prometheus и настроек Grafana при перезапуске контейнеров.

Запуск:

Как я поднял мониторинг инфраструктуры за 3 часа

Через пару минут:

  • Prometheus доступен
  • Grafana открывается
  • экспортеры отвечают

Уже на этом этапе становится спокойнее.

Prometheus: минимум конфига

Конфиг был максимально короткий.

Как я поднял мониторинг инфраструктуры за 3 часа

Без relabel, без service discovery, без Kubernetes-магии.

Я специально не усложнял: если сейчас не понятно — через месяц будет ещё хуже.

Grafana: никаких кликов вручную

Одна из распространенных ошибок, которую я видел у коллег при работе с grafana — “настроили Grafana руками, а потом забыли, как”. Я решил пойти другим путем.

Первым делом добавил Prometheus как datasource.

Дальше — дашборды. Вместо рисования панелей с нуля импортировал готовые из Grafana Community:

  • Node Exporter Full — для метрик хоста
  • Docker Container & Host Metrics — для контейнеров через cAdvisor

Через 10 минут у меня уже были:

  • CPU по ядрам
  • Память и swap
  • Дисковое пространство
  • Контейнеры с детализацией по потреблению ресурсов

Не идеально, местами избыточно, но наглядно.

Первые грабли (куда без них)

1. Контейнеры «что-то жрут», но непонятно кто

После запуска cAdvisor столкнулся с классической проблемой — данных слишком много. Графики показывают десятки метрик по каждому контейнеру, но первые 10 минут я просто смотрел на них и не мог понять:

  • Это нормальное потребление или проблема?
  • Сколько вообще "много" для этого контейнера?
  • Кто конкретно сейчас жрёт ресурсы?

Решение оказалось банальным — упростить дашборд

  • вынести top-контейнеры по CPU и памяти
  • убрать всё лишнее

Мониторинг — это не про "показать всё возможное", а про быстрые ответы на конкретные вопросы. Если не понятно, зачем метрика на дашборде — её можно убрать.

2. Диск внезапно почти закончился

Самое смешное — первая реальная польза от мониторинга пришла не через алерты и не через сложные метрики. Я просто открыл дашборд Node Exporter и увидел:

  • Диск заполнен на 85%
  • Логи занимают вагон места
  • Ротация не настроена

До этого момента я даже не думал проверять место на диске. Без мониторинга эта проблема всплыла бы ровно в тот момент, когда место закончилось окончательно — скорее всего, в самое неподходящее время.

Алерты: чтобы мониторинг не был телевизором

Мониторинг без алертов — это просто красивые графики. Чтобы система действительно работала, добавил базовые правила алертинга в Prometheus.

Я начал с двух правил:

  • Сервис недоступен
  • Диск занят на >90%

Конфигурация в prometheus/alerts.yml:

Как я поднял мониторинг инфраструктуры за 3 часа

Без сложных порогов, без "умных" условий, без многоуровневой логики. Принцип простой:

Лучше ложный алерт днём, чем сюрприз ночью.

Что получилось через 3 часа

В итоге имею рабочий стек мониторинга, который:

  • Показывает состояние хост-системы
  • Видно метрики всех Docker-контейнеров
  • Есть базовые алерты при проблемах
  • Всё поднимается одной командой
  • Легко переносится на другие стенды

Это не enterprise-решение с распределённым хранением метрик и сложными SLA. Но это реальный шаг от "ничего не видим" к "понимаем, что происходит".

Главные выводы (как для junior)

  1. Мониторинг — это не про инструменты, а про вопросы
    Если ты не знаешь, что хочешь увидеть — Grafana не поможет. Инструменты — это только средство для ответов.
  2. Лучше простой мониторинг сегодня, чем идеальный никогда
    За 3 часа можно сделать работающую систему, которая уже даёт пользу. За неделю размышлений о "правильной архитектуре" — можно не сделать вообще ничего. Начни с базы, улучшай по мере необходимости.
  3. Готовые дашборды — это нормально
    Не нужно рисовать панели с нуля, если есть проверенные community-решения. Сначала — просто видеть что происходит, кастомизация придет позже.
  4. Первый эффект почти всегда неожиданный
    Я ждал проблем с CPU или памятью контейнеров, а первым делом обнаружил заполненный диск. Мониторинг показывает не то, что ты ожидаешь увидеть, а то, что на самом деле происходит.

Что бы я сделал дальше (если было бы время)

  • Алерты по памяти и CPU
  • Централизованное логирование, хотя бы ELK/Loki для агрегации логов из контейнеров
  • Нормальную доставку алертов
  • Разделение prod / stage

Но это уже следующий уровень.

Вместо заключения

Этот кейс не про героизм и не про "я всё знаю". Это про нормальную инженерную работу: взял задачу, разобрался, сделал минимально работающее решение, получил результат.

Начни с простого:

  1. Что я хочу видеть?
  2. Какие инструменты для этого подходят?
  3. Как быстро это поднять?

Принцип один: лучше видеть хоть что-то, чем ничего.

Раз в неделю мы проводим бесплатные встречи для начинающих DevOps-инженеров, где обсуждаем собеседования, реальную работу и подводные камни, а также проводим пробные собеседования. #devops

1
Начать дискуссию