Вернуться к главной странице, списку всех тем
Техническое задание для инженера мониторинга
Что проверяет: умеешь ли ты в одиночку развернуть мониторинг, настроить осмысленные алерты, разобрать инцидент и оставить после себя документацию
Что нужно пройти заранее: тему 1 (bash, systemd), тему 4 (Compose) и обязательно тему 8 (метрики, PromQL, SLO, алерты)
Сколько времени займёт: 12–16 часов
Результат: git-репозиторий, который не стыдно показать на собеседовании
Часть 1: Развёртывание стека мониторинга
Задача: самостоятельно развернуть полноценный стек мониторинга на своей машине или виртуальной машине
Требования:
- Развернуть через Docker Compose следующие компоненты:
- Prometheus
- Grafana
- Alertmanager
- Node Exporter (для мониторинга самой системы)
- Требования к качеству конфигурации:
- У всех образов зафиксированы версии, тега
latestбыть не должно - У всех сервисов задан
restart: unless-stopped - Данные Prometheus и Grafana лежат в именованных томах и переживают
docker compose down - Ключ
version:в начале файла не используется — он устарел
- У всех образов зафиксированы версии, тега
- Предоставить:
- Файл
compose.yml - Все конфигурационные файлы (
prometheus.yml,alertmanager.yml) - Скриншот работающих контейнеров (
docker compose ps)
- Файл
Часть 2: Настройка мониторинга и алертинга
Задача: настроить сбор метрик и правила алертинга
Требования:
- В Prometheus настроить:
- Scrape-конфиг для Node Exporter
- Минимум 4 правила алертинга, из них обязательно:
HostHighCpuLoad— загрузка CPU выше 80% в течение 2 минутHostHighMemoryUsage— использование памяти выше 85%HostDiskSpaceCritical— свободного места на диске меньше 10%HostDiskWillFillIn24h— по текущему тренду диск закончится в ближайшие сутки (подсказка:predict_linear)
- Обосновать письменно: в теме 8 объясняется, почему алерт «CPU выше 80%» сам по себе плохой — он сообщает о причине, а не о симптоме, и часто будит человека, когда пользователи ничего не заметили. В файле
docs/alerts.mdответь:- Какой из твоих четырёх алертов действительно требует немедленной реакции ночью, а какой может подождать до утра?
- Как ты изменил бы эти алерты, если бы за стеком стоял реальный пользовательский сервис? Приведи хотя бы один алерт на симптом (доля ошибок или задержка), а не на ресурс
- У каждого алерта должно быть поле
severityи аннотация с описанием, что делать дежурному
- В Alertmanager настроить:
- Отправку уведомлений в Telegram
- Маршрутизацию по
severity:critical— немедленно,warning— с группировкой и задержкой - Дедупликацию и группировку (
group_by,group_wait,repeat_interval) — объясни в комментариях выбранные значения
- Предоставить:
- Файлы конфигураций с комментариями
- Скриншот Prometheus → Status → Targets, все цели в состоянии
UP - Скриншот страницы Alerts в Prometheus
- Скриншот пришедшего в Telegram уведомления
Часть 3: Создание дашборда в Grafana
Задача: создать дашборд, по которому дежурный за 10 секунд понимает, всё ли в порядке
Требования:
Создать дашборд минимум с шестью панелями:
- Общее состояние — статус всех целей (up/down) одним числом или таблицей
- CPU Usage — график использования процессора
- Memory Usage — график использования памяти
- Disk Space — свободное место по разделам
- Disk I/O или Network — нагрузка на диск либо сетевой трафик
- Load Average — с линией порога, равной числу ядер
Требования к оформлению:
- У всех панелей подписаны единицы измерения (проценты, байты, секунды)
- На панелях, где есть порог, нарисована пороговая линия
- Самое важное — вверху: дежурный смотрит на верхнюю треть экрана
Предоставить:
- Экспортированный JSON дашборда
- Скриншоты дашборда с данными (не пустой)
Часть 4: Симуляция и диагностика инцидента
Задача: провести диагностику и задокументировать инцидент
Сценарий:
- Искусственно создать инцидент (на выбор):
- Нагрузка на CPU:
stress-ng --cpu 4 --timeout 300sили цикл в bash - Заполнение диска:
fallocate -l 5G /tmp/bigfile - Утечка памяти: контейнер с лимитом и приложением, которое его превышает
- Нагрузка на CPU:
- Действия:
- Зафиксировать момент возникновения алерта (скриншот)
- Замерить MTTD — сколько секунд прошло от начала проблемы до срабатывания алерта
- Провести диагностику: метрики в Prometheus, логи, состояние системы
- Определить причину
- Устранить инцидент и замерить MTTR — время от алерта до восстановления
- Зафиксировать восстановление
- Предоставить:
-
Хронологию инцидента в виде таблицы:
| Время | Событие | Действие | Результат | |——-|———|———-|———–|
- Скриншоты: алерт → метрики → диагностика → восстановление
- Постмортем без поиска виноватых (5–10 предложений): что произошло, как обнаружили, как устранили, что сделать, чтобы не повторилось. Формулируй причины через процессы и системы, а не через людей
-
Часть 5: Автоматизация и документация
Задача: оставить после себя то, чем сможет пользоваться другой человек
Требования:
- Написать Runbook для одного из алертов в формате Markdown:
- Описание проблемы и на что она влияет для пользователя
- Как проверить — готовые к копированию команды
- Шаги по устранению
- Что делать, если не помогло; контакты для эскалации
- Ссылка на дашборд с нужными метриками
- Написать bash-скрипт
healthcheck.sh, который:- Начинается с
set -euo pipefail - Проверяет доступность Prometheus, Grafana и Alertmanager через
curl - Проверяет, что все контейнеры стека запущены
- Выводит статус в читаемом виде —
OK/FAILпо каждому компоненту - Возвращает код 0, если всё хорошо, и 1, если есть проблемы
- Работает при запуске из любого каталога (никаких относительных путей)
- Начинается с
- Проверить скрипт делом: останови один контейнер, запусти скрипт, убедись, что он вернул
FAILи код 1. Приложи скриншот обоих запусков
Предоставить: runbook.md, healthcheck.sh, скриншоты выполнения
Формат сдачи результатов
Создать git-репозиторий (GitHub или GitLab) со структурой:
monitoring-test/
├── README.md (описание и инструкция по запуску)
├── compose.yml
├── configs/
│ ├── prometheus.yml
│ ├── alert.rules.yml
│ └── alertmanager.yml
├── grafana/
│ └── dashboard.json
├── scripts/
│ └── healthcheck.sh
├── docs/
│ ├── alerts.md (обоснование алертов из части 2)
│ ├── runbook.md
│ └── incident-report.md
└── screenshots/
├── 01-containers.png
├── 02-prometheus-targets.png
├── 03-alerts.png
├── 04-telegram.png
├── 05-grafana-dashboard.png
├── 06-incident-alert.png
├── 07-incident-recovery.png
└── 08-healthcheck.png
Прислать ссылку на репозиторий
Как это будет оцениваться
| Критерий | На что смотрят |
|---|---|
| Работоспособность | Стек поднимается из репозитория одной командой на чистой машине |
| Воспроизводимость | Версии зафиксированы, данные в томах, нет ручных шагов «а потом я кликнул в интерфейсе» |
| Осмысленность алертов | Алерт сообщает, что сломалось и что делать, а не просто «метрика превысила число» |
| Качество дашборда | По нему видно состояние системы без объяснений автора |
| Разбор инцидента | Есть измеренные MTTD и MTTR, причина названа честно, выводы конкретные |
| Документация | По README посторонний человек запускает стек, по runbook — чинит проблему |
Главный критерий: отдай репозиторий знакомому и попроси развернуть стек по инструкции, ничего не спрашивая у тебя. Получилось — задание сдано