Что такое Prometheus?

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

Ответ

Prometheus — это open-source система мониторинга и оповещения, основанная на модели pull (вытягивания метрик). Она собирает и хранит метрики как временные ряды, предоставляя мощный язык запросов PromQL для их анализа.

Ключевые компоненты архитектуры:

  1. Prometheus Server: Основной компонент для сбора, хранения и запроса метрик.
  2. Targets: Приложения, инструментированные для экспорта метрик (обычно через HTTP-эндпоинт /metrics).
  3. Service Discovery: Автоматическое обнаружение целей для мониторинга (Kubernetes, Consul и др.).
  4. Alertmanager: Обрабатывает алерты, отправленные сервером Prometheus, и управляет их группировкой, подавлением и маршрутизацией (email, Slack, PagerDuty).

Пример метрики (использование библиотеки Micrometer в Spring Boot):

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;

@RestController
public class MyController {
    private final Counter requestCounter;

    public MyController(MeterRegistry registry) {
        requestCounter = Counter.builder("http.requests.total")
                .description("Total number of HTTP requests")
                .tag("method", "GET") // Метка (label) для многомерности
                .register(registry);
    }

    @GetMapping("/api/data")
    public String getData() {
        requestCounter.increment(); // Увеличиваем счетчик
        return "Data";
    }
}

Пример запроса PromQL:

# Суммарное количество HTTP-запросов за последние 5 минут
rate(http_requests_total[5m])

# 95-й перцентиль времени ответа
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))

Почему Prometheus популярен? Его многомерная модель данных (метрики + ключ-значение лейблы) и PromQL позволяют проводить глубокий анализ взаимосвязей, а pull-модель упрощает обнаружение недоступных сервисов.