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