> Назови примеры метрик для алертов (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Wildberries, Ozon
Стек: Go
> Пример ответа
Короткий ответ
Основные метрики для алертов: RED-метод (Rate, Errors, Duration) для HTTP-сервисов, USE-метод (Utilization, Saturation, Errors) для инфраструктуры, и бизнес-метрики (количество заказов, конверсия). Для Go-сервисов дополнительно: количество горутин, GC pause, heap usage, rate of panics. Алерты строятся на SLO-базисе: error budget burn, latency percentiles (p50, p95, p99), availability. Важно различать алерты на симптом (пользовательское восприятие) и на причину (CPU, memory).
Подробное объяснение
Метрики для алертов делятся на три категории:
Симптомные метрики - отражают то, что видит пользователь:
- latency percentiles (p50, p95, p99) - например, алерт, если p99 > 500ms в течение 5 минут
- error rate - доля 5xx ответов, обычно порог 1-5%
- throughput/rate - резкое падение или рост RPS может сигнализировать о проблеме
- availability - процент успешных запросов за окно
Причинные метрики - помогают диагностировать:
- CPU utilization, load average
- memory usage, OOM kills
- disk I/O, disk space
- network: packet loss, connection errors
- для Go: goroutine count (утечки), GC pause duration, heap in use, mutex contention
Бизнес-метрики - показывают влияние на продукт:
- количество успешных операций (заказов, платежей)
- конверсия в целевое действие
- задержка бизнес-процесса (например, время обработки очереди)
Для алертов критично использовать SLO-подход: алерт срабатывает, когда скорость сжигания error budget превышает допустимую. Например, если SLO = 99.9% за 30 дней, алерт на 2% ошибок за 1 час.
На практике
Для Go-бэкенда типичный набор:
- HTTP-сервис: p99 latency, error rate по статус-кодам, RPS. Алерт на p99 > 300ms 5 минут подряд.
- Работники/очереди: длина очереди, возраст сообщения, количество ретраев. Алерт, если очередь растёт или сообщение старше N минут.
- База данных: connection pool utilization, query latency, deadlocks.
- Go-runtime: goroutine count > порога (например, 100k), heap growth, GC pause > 100ms.
- Инфраструктура: CPU > 85% на 10 минут, memory > 90%, disk > 80%.
Важно: алерты должны быть action-able. Если на алерт нельзя ответить действием - это шум. Используйте multi-window алерты (например, 1-минутное и 5-минутное окно) для снижения ложных срабатываний.
Пример кода
GO// Пример метрик для HTTP-сервиса с Prometheusvar (httpRequestsTotal = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "http_requests_total",Help: "Total HTTP requests",},[]string{"method", "path", "status"},)httpRequestDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: "http_request_duration_seconds",Help: "HTTP request duration",Buckets: []float64{0.05, 0.1, 0.25, 0.5, 1, 2.5},},[]string{"method", "path"},))// Middleware для сбора метрикfunc MetricsMiddleware(next http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {start := time.Now()sw := &statusWriter{ResponseWriter: w}next.ServeHTTP(sw, r)duration := time.Since(start).Seconds()httpRequestsTotal.WithLabelValues(r.Method, r.URL.Path, strconv.Itoa(sw.status),).Inc()httpRequestDuration.WithLabelValues(r.Method, r.URL.Path,).Observe(duration)})}// Пример алерта в Prometheus// alert: HighErrorRate// expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05// for: 5m
Как отвечать на собеседовании
Начни с классификации: симптомные vs причинные метрики. Затем приведи конкретные примеры для Go-бэкенда: latency percentiles, error rate, goroutine count, GC pause. Обязательно упомяни SLO/error budget подход - это отличает senior от middle. Покажи понимание trade-off: слишком много алертов - шум, слишком мало - пропущенные инциденты. Добавь про multi-window алерты и важность action-ability. Если спросят про конкретные инструменты - упомяни Prometheus + Alertmanager, Grafana, но не углубляйся, если не просят.
Что проверяет интервьюер
Интервьюер оценивает:
- понимание разницы между симптомами и причинами
- знание специфики Go-runtime метрик (горутины, GC)
- умение строить алерты на основе SLO, а не просто "по порогам"
- способность отличать важные метрики от шумных
- практический опыт: как избегать ложных срабатываний, как настраивать окна
Типичные ошибки
- Называть только CPU/memory - это причинные метрики, без симптомных они бесполезны для алертов
- Предлагать алерт на каждый 5xx - нужно учитывать процент от общего трафика
- Игнорировать SLO и error budget - алерты "на глазок"
- Не упоминать Go-специфику (горутины, GC) - для senior это ожидаемо
- Предлагать слишком много алертов без приоритизации - интервьюер увидит отсутствие системного подхода
- Забывать про multi-window алерты и проблему ложных срабатываний
> Похожие задачи по backend
Для чего нужен FOR UPDATE в PostgreSQL
Есть ли у вас мониторинг и на каком стеке он работает
Для чего используется профилирование pprof в Go
Какую функцию выполняет транзакция
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью