Ответ
Prometheus — это ведущая open-source система для мониторинга и оповещения, изначально разработанная в SoundCloud. Она является стандартом де-факто для мониторинга в облачных и Kubernetes-средах.
Ее ключевой особенностью является pull-модель сбора метрик: Prometheus сам периодически опрашивает целевые сервисы (endpoints) по HTTP, собирает данные и сохраняет их в своей временной базе данных (TSDB).
Ключевые концепции:
- Многомерная модель данных: Метрики идентифицируются по имени и набору пар
ключ-значение
, называемых лейблами (labels). Это позволяет гибко фильтровать и агрегировать данные. - PromQL: Мощный и гибкий язык запросов для анализа и агрегации собранных временных рядов в реальном времени.
- Service Discovery: Механизмы автоматического обнаружения целей для мониторинга, что идеально подходит для динамических сред.
- Alerting: Интеграция с компонентом Alertmanager для управления оповещениями (группировка, подавление, отправка в Slack, PagerDuty и т.д.).
Пример экспорта метрик в Python:
Для того чтобы Prometheus мог собирать метрики с приложения, оно должно предоставлять их по HTTP-эндпоинту (обычно /metrics
). Это легко сделать с помощью клиентской библиотеки.
from prometheus_client import start_http_server, Counter
import time
# Создаем метрику типа Counter. Она может только увеличиваться.
# 'http_requests_total' - имя метрики
# 'Total HTTP Requests' - описание
REQUESTS = Counter('http_requests_total', 'Total HTTP Requests', ['method', 'endpoint'])
if __name__ == '__main__':
# Запускаем HTTP-сервер на порту 8000, который будет отдавать метрики
# по эндпоинту /metrics для сбора Prometheus'ом.
start_http_server(8000)
print("Prometheus metrics server started on port 8000")
# Имитация обработки запросов
while True:
REQUESTS.labels(method='get', endpoint='/api/data').inc()
time.sleep(1)
REQUESTS.labels(method='post', endpoint='/api/submit').inc()
time.sleep(1.5)