Ответ
Prometheus — это open-source система мониторинга и оповещения, основанная на модели pull (вытягивания метрик). Она собирает и хранит метрики как временные ряды, предоставляя мощный язык запросов PromQL для их анализа.
Ключевые компоненты архитектуры:
- Prometheus Server: Основной компонент для сбора, хранения и запроса метрик.
- Targets: Приложения, инструментированные для экспорта метрик (обычно через HTTP-эндпоинт
/metrics). - Service Discovery: Автоматическое обнаружение целей для мониторинга (Kubernetes, Consul и др.).
- 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 — это такой язык запросов, мощный, блядь, до охуения.
Из чего эта махина состоит, на пальцах:
- Prometheus Server: Главный мозг, который всё собирает, хранит и отвечает на твои капризные запросы.
- Targets: Это те самые приложения, которые мы мониторим. Они должны выставлять наружу эндпоинт
/metrics, как будто говорят: «На, блядь, бери мои цифры, только не бей». - Service Discovery: Чтобы не прописывать каждую цель вручную, эта фигня сама находит, кого мониторить — в Kubernetes, Consul и прочих штуках.
- 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 это сразу видит, потому что сам не смог прийти за метриками. Гениально и просто, как тапок.