Вопрос 21 · Раздел 17

Как мониторить распределённую систему микросервисов

4. Saturation — насколько заполнены ресурсы (CPU, memory)

Версии по языкам: English Russian Ukrainian

🟢 Junior Level

Мониторинг — это наблюдение за здоровьем всех сервисов в реальном времени.

Три ключевых сигнала (Golden Signals):

  1. Latency — сколько времени занимает запрос
  2. Traffic — сколько запросов в секунду
  3. Errors — сколько ошибок в секунду
  4. 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);
        });
    }
}

Типичные ошибки

  1. 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. Какие инструменты используются для оркестрации микросервисов]]