Как была организована сборка метрик с production-серверов?

«Как была организована сборка метрик с production-серверов?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Система мониторинга была построена на стеке Prometheus + Grafana.

Сбор метрик:

  1. Инфраструктурные метрики (CPU, память, диск, сеть): Собирались node_exporter с каждого сервера.
  2. Метрики приложения (Java): Использовалась библиотека Micrometer, которая интегрировалась с Prometheus. Она автоматически собирала JVM-метрики (память, потоки, GC), метрики HTTP-запросов (через Spring Boot Actuator) и позволяла добавлять кастомные метрики.

    @Service
    public class OrderService {
        private final Counter orderCounter = Metrics.counter("orders.created.total");
    
        public void createOrder() {
            // бизнес-логика
            orderCounter.increment(); // Кастомная метрика
        }
    }
  3. Метрики базы данных и кэша: Собирались соответствующими экспортерами (например, mysqld_exporter, redis_exporter).

Визуализация и алертинг:

  • Grafana: Использовалась для создания дашбордов, агрегирующих метрики из Prometheus.
  • Alertmanager (Prometheus): Настраивались алерты на критические условия (например, rate(http_server_requests_errors_total[5m]) > 0.1, высокая загрузка CPU) с уведомлениями в Slack/Telegram.

Такой подход обеспечивал полную observability за состоянием приложения и инфраструктуры.