Skip to content

Prometheus API

Эндпоинты для расчёта SLO на основе Prometheus-запросов, получения метрик в реальном времени и проверки соединения с Prometheus.

POST /prometheus/calculate-slo

Расчёт значения SLO за заданный временной интервал. Запрос выполняется синхронно: сервер отправляет PromQL-запрос в Prometheus и возвращает результат.

Тело запроса

json
{
  "slo_id": 1,
  "time_window": "1h",
  "include_details": true
}

Успешный ответ (200)

json
{
  "slo_id": 1,
  "slo_name": "Доступность API",
  "time_window": "1h",
  "current_value": 99.943,
  "target_value": 99.9,
  "status": "healthy",
  "error_budget": {
    "total": 0.001,
    "used": 0.00057,
    "remaining": 0.00043,
    "percentage_used": 57.0
  },
  "query_metrics": {
    "good_events": 98423,
    "total_events": 98500,
    "window_seconds": 3600
  },
  "calculated_at": "2026-06-11T13:00:00Z"
}

Поля ответа

ПолеОписание
current_valueТекущее значение SLO в процентах
statushealthy (>= target), warning (< target, > 50% budget), critical (<= 50% budget), unknown
error_budget.totalДопустимый процент ошибок
error_budget.usedИспользованный процент ошибок
error_budget.remainingОставшийся процент ошибок
error_budget.percentage_usedПроцент использованного budget

GET /real-time-metrics

Метрики в реальном времени для всех активных SLO в организации.

Успешный ответ (200)

json
{
  "metrics": [
    {
      "slo_id": 1,
      "slo_name": "Доступность API",
      "current_value": 99.94,
      "target_value": 99.9,
      "status": "healthy",
      "error_budget_used": 57.0,
      "updated_at": "2026-06-11T13:00:05Z"
    }
  ],
  "total": 5
}

POST /prometheus/queries

Создание Prometheus-запроса для SLO. Используется для настройки метрик, по которым будет считаться SLO.

Тело запроса

json
{
  "slo_id": 1,
  "query": "sum(rate(http_requests_total{status=~\"2..\"}[5m])) / sum(rate(http_requests_total[5m]))",
  "query_type": "ratio",
  "name": "Доступность по HTTP-статусам"
}

Успешный ответ (201)

json
{
  "id": 1,
  "slo_id": 1,
  "query": "sum(rate(http_requests_total{status=~\"2..\"}[5m])) / sum(rate(http_requests_total[5m]))",
  "query_type": "ratio",
  "name": "Доступность по HTTP-статусам",
  "created_at": "2026-06-11T13:00:00Z"
}

GET /prometheus/health

Проверка соединения с Prometheus. Выполняет запрос up за последние 5 минут и возвращает статус.

Успешный ответ (200)

json
{
  "service": "prometheus",
  "status": "healthy",
  "message": "Prometheus is responding to queries",
  "timestamp": "2026-06-11T13:00:00Z"
}

При недоступности Prometheus (503)

json
{
  "service": "prometheus",
  "status": "unhealthy",
  "error": "connection refused",
  "timestamp": "2026-06-11T13:00:00Z"
}

Сводная таблица

МетодПутьОписание
POST/prometheus/calculate-sloРасчёт значения SLO по PromQL-запросу
GET/prometheus/real-time-metricsМетрики в реальном времени для всех SLO
POST/prometheus/queriesСоздание Prometheus-запроса
GET/prometheus/healthПроверка здоровья Prometheus