Что такое Prometheus?

Ответ

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-модель упрощает обнаружение недоступных сервисов.

Ответ 18+ 🔞

Ну, представляешь, есть такая штука — Prometheus. Это, блядь, опенсорсная система, которая за тобой следит и орёт, если что-то пошло не так. Основана на принципе pull — то есть она сама, сука, приходит и вытягивает из тебя метрики, а не ждёт, пока ты их пришлёшь. Собирает всё это добро в виде временных рядов, а потом ты можешь ковыряться в них своим PromQL — это такой язык запросов, мощный, блядь, до охуения.

Из чего эта махина состоит, на пальцах:

  1. Prometheus Server: Главный мозг, который всё собирает, хранит и отвечает на твои капризные запросы.
  2. Targets: Это те самые приложения, которые мы мониторим. Они должны выставлять наружу эндпоинт /metrics, как будто говорят: «На, блядь, бери мои цифры, только не бей».
  3. Service Discovery: Чтобы не прописывать каждую цель вручную, эта фигня сама находит, кого мониторить — в Kubernetes, Consul и прочих штуках.
  4. Alertmanager: Отдельный, блядь, начальник по крикам. Когда Prometheus видит проблему, он кидает алерт сюда. А Alertmanager уже решает: кому слать (в слак, на почту), как группировать эти вопли и когда заткнуться.

Вот, смотри, как в коде на 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") // Это лейбл, чтоб можно было фильтровать, кто, как и что
                .register(registry);
    }

    @GetMapping("/api/data")
    public String getData() {
        requestCounter.increment(); // Щёлк — и счётчик подрос
        return "Data";
    }
}

А вот как потом этими цифрами тыкать в PromQL:

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

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

И почему все на него молятся? Да потому что у него, блядь, многомерная модель данных! Это не просто «счётчик запросов», а «счётчик запросов метода POST к эндпоинту /api/users со статусом 500». Лейблы, ёпта! И его PromQL позволяет вытаскивать такие взаимосвязи, что просто волосы дыбом. Ну и pull-модель — если сервис сдох и не отвечает, Prometheus это сразу видит, потому что сам не смог прийти за метриками. Гениально и просто, как тапок.