Есть ли у вас опыт работы с Prometheus?

«Есть ли у вас опыт работы с Prometheus?» — вопрос из категории DevOps, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я активно использовал Prometheus для мониторинга инфраструктуры и приложений. Мои задачи включали настройку сбора метрик, написание правил алертинга на PromQL и интеграцию с Grafana.

Пример кастомного экспортера на Python для мониторинга бизнес-логики:

from prometheus_client import start_http_server, Gauge, Counter, Histogram
import time
import psycopg2

# Объявление метрик
DB_CONNECTION_STATUS = Gauge('app_db_connection_up', 'Status of database connection (1=up, 0=down)')
ORDERS_PROCESSED = Counter('app_orders_processed_total', 'Total number of processed orders')
REQUEST_DURATION = Histogram('app_request_duration_seconds', 'Request latency in seconds', buckets=[0.1, 0.5, 1.0, 2.0])

def check_database():
    """Проверка доступности БД и обновление метрики."""
    try:
        conn = psycopg2.connect("dbname=orders user=app")
        conn.close()
        DB_CONNECTION_STATUS.set(1)
    except Exception:
        DB_CONNECTION_STATUS.set(0)

def process_order():
    """Имитация обработки заказа с замером времени."""
    start = time.time()
    # ... бизнес-логика ...
    time.sleep(0.05)
    duration = time.time() - start
    REQUEST_DURATION.observe(duration)
    ORDERS_PROCESSED.inc()

if __name__ == '__main__':
    # Запуск HTTP-сервера для сбора метрик Prometheus на порту 8000
    start_http_server(8000)
    while True:
        check_database()
        time.sleep(30)

Что я настраивал:

  • Prometheus Server: Конфигурация scrape_configs для сбора метрик с Node Exporter, приложений (Spring Boot Actuator, client libraries) и Kubernetes pods через service discovery.
  • Alertmanager: Настройка группировки, подавления (inhibition) и маршрутизации алертов в Slack и PagerDuty. Например, правило для алерта о высокой латенции:
    groups:
      - name: app_alerts
        rules:
        - alert: HighRequestLatency
          expr: histogram_quantile(0.95, rate(app_request_duration_seconds_bucket[5m])) > 1
          for: 2m
          annotations:
            summary: "High latency detected on {{ $labels.instance }}"
  • Grafana: Создание дашбордов с использованием PromQL запросов для визуализации ключевых метрик приложения и инфраструктуры.