Skip to content

Custom SLI Formulas ​

Библиотека готовых PromQL выражений для метрик, которые не покрываются стандартными типами (availability/latency/throughput).

Когда использовать ​

Когда нужно отслеживать метрику, специфичную для домена:

  • Apdex Score — индекс удовлетворённости пользователей
  • Saturation — загрузка ресурсов (CPU/Memory/Disk)
  • Queue Depth — длина очереди (Kafka lag, RabbitMQ backlog)
  • Cache Hit Rate — эффективность кэша
  • Error Budget Burn Rate — скорость выгорания бюджета ошибок
  • p99 Latency (Success Only) — латентность только успешных запросов
  • Throughput (RPS) — общая пропускная способность
  • DB Connection Pool Utilization — утилизация пула соединений БД

Использование ​

В SLO Wizard, на шаге SLO Definition:

  1. Выберите Indicator Type = Custom
  2. Появится панель "Pick a pre-built formula"
  3. Выберите формулу из списка — поле metric_query заполнится автоматически
  4. При необходимости отредактируйте PromQL (замените <service>, <topic> и т.п.)
  5. Задайте target и завершите создание SLO

Можно и без выбора формулы — просто напишите свой PromQL в поле Metric Query.

API ​

GET /api/v1/custom-formulas ​

Возвращает все формулы. Опциональный фильтр ?category=:

Доступные категории: User Experience, Capacity, Message Queue, Performance, Reliability, Database.

Ответ:

json
{
  "formulas": [
    {
      "id": "apdex-score",
      "name": "Apdex Score",
      "category": "User Experience",
      "description": "Application Performance Index — ratio of satisfactory responses to total. T is the target threshold (e.g. 300ms).",
      "query": "(sum(rate(http_request_duration_seconds_bucket{job=\"<service>\",le=\"<T>\"}[5m])) + sum(rate(http_request_duration_seconds_bucket{job=\"<service>\",le=\"4\"}[5m])) / 2) / sum(rate(http_request_duration_seconds_count{job=\"<service>\"}[5m]))",
      "unit": "ratio_0_1"
    }
  ]
}

GET /api/v1/custom-formulas/ ​

Возвращает одну формулу по ID.

Добавление новых формул ​

Формулы определяются в internal/formulas/formulas.go как статический registry. Каждая формула содержит:

  • ID — уникальный slug
  • Name — человекочитаемое название
  • Category — для группировки
  • Description — пояснение и инструкция по подстановке параметров
  • Query — шаблон PromQL (используйте <service>, <topic> и т.п. для подстановки)
  • Unit — тип значения (ratio_0_1, count, seconds, req_per_sec, burn_rate)

Безопасность ​

Все формулы проходят regex-валидацию на фронтенде (/^[a-zA-Z_{}[\]()0-9\s.,:='"+\-*/%^]+$/). На бэкенде дополнительная валидация не выполняется — предполагается, что вы доверяете своим формулам.