Что такое Prometheus

Ответ

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)