Как мониторить распределённую систему микросервисов
4. Saturation — насколько заполнены ресурсы (CPU, memory)
🟢 Junior Level
Мониторинг — это наблюдение за здоровьем всех сервисов в реальном времени.
Три ключевых сигнала (Golden Signals):
- Latency — сколько времени занимает запрос
- Traffic — сколько запросов в секунду
- Errors — сколько ошибок в секунду
- Saturation — насколько заполнены ресурсы (CPU, memory)
Инструменты:
- Prometheus — сбор метрик
- Grafana — визуализация
- Alertmanager — алерты
🟡 Middle Level
Метрики
Application metrics:
- Request rate (req/s)
- Error rate (%)
- Latency (p50, p95, p99)
- Active connections
- Thread pool usage
Infrastructure metrics:
- CPU usage
- Memory usage
- Disk I/O
- Network I/O
Prometheus + Grafana
// Micrometer для Spring Boot
@RestController
public class OrderController {
private final Counter orderCounter;
private final Timer orderTimer;
public OrderController(MeterRegistry registry) {
this.orderCounter = registry.counter("orders.created");
this.orderTimer = registry.timer("orders.processing.time");
}
@PostMapping("/orders")
public Order createOrder(@RequestBody OrderRequest req) {
return orderTimer.record(() -> {
// MeterRegistry — интерфейс Micrometer (Spring Boot Actuator).
// record() — замеряет время выполнения лямбды и записывает в Timer.
orderCounter.increment();
return orderService.create(req);
});
}
}
Типичные ошибки
- Too many alerts:
100 алертов в час → alert fatigue → настоящие пропускаются Решение: только actionable alerts // Actionable alert = если сработал, инженер знает ЧТО делать. // Если alert сработал, а делать нечего — это noise, его надо убрать или улучшить.
🔴 Senior Level
RED method
For services:
- Rate: requests per second
- Errors: failed requests per second
- Duration: request latency distribution
USE method
For resources:
- Utilization: average time resource was busy
- Saturation: amount of work queued
- Errors: error count
Production Experience
Prometheus config:
scrape_configs:
- job_name: 'user-service'
metrics_path: '/actuator/prometheus'
scrape_interval: 15s
- job_name: 'order-service'
metrics_path: '/actuator/prometheus'
scrape_interval: 15s
Alerting rules:
groups:
- name: service_alerts
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
# Это >5% error rate, а не >0.05 запросов/сек.
for: 5m
labels:
severity: critical
Best Practices
✅ Golden Signals
✅ RED/USE методы
✅ Actionable alerts только
✅ Dashboard per service
✅ SLI/SLO tracking
❌ Too many alerts
❌ Without dashboards
❌ Without SLO
🎯 Шпаргалка для интервью
Обязательно знать:
- Golden Signals: Latency, Traffic, Errors, Saturation
- Prometheus — сбор метрик, Grafana — визуализация, Alertmanager — алерты
- Micrometer + Spring Boot Actuator — стандарт для Java-приложений
- RED method (Rate, Errors, Duration) — для сервисов
- USE method (Utilization, Saturation, Errors) — для ресурсов
- Только actionable alerts — если сработал, инженер знает ЧТО делать
- p50, p95, p99 latency — p99 показывает worst-case опыт пользователя
Частые уточняющие вопросы:
- Что такое actionable alert? Alert, при котором инженер знает конкретное действие. Без action = noise, убрать.
- RED vs USE? RED — для сервисов (Rate, Errors, Duration), USE — для ресурсов (Utilization, Saturation, Errors).
- Почему p99 а не average? Average скрывает outliers — p99 показывает опыт 1% худших пользователей.
- Alert fatigue что это? 100 алертов в час → настоящие пропускаются → только actionable alerts.
Красные флаги (НЕ говорить):
- “Чем больше alerts — тем лучше” — нет, alert fatigue приводит к пропуску реальных
- “Average latency достаточно” — нет, скрывает outliers, p99 важен
- “Метрики = логи” — нет, метрики = агрегированные числа, логи = детализация
- “Prometheus без Grafana — норм” — без dashboards невозможно оперативно реагировать
Связанные темы:
- [[22. Что такое distributed tracing]]
- [[21. Как мониторить распределённую систему микросервисов]]
- [[5. Что такое паттерн Circuit Breaker]]
- [[17. Как обеспечить отказоустойчивость микросервисов]]
- [[26. Какие инструменты используются для оркестрации микросервисов]]