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:
- Выберите Indicator Type =
Custom - Появится панель "Pick a pre-built formula"
- Выберите формулу из списка — поле
metric_queryзаполнится автоматически - При необходимости отредактируйте PromQL (замените
<service>,<topic>и т.п.) - Задайте target и завершите создание SLO
Можно и без выбора формулы — просто напишите свой PromQL в поле Metric Query.
API
GET /api/v1/custom-formulas
Возвращает все формулы. Опциональный фильтр ?category=:
Доступные категории: User Experience, Capacity, Message Queue, Performance, Reliability, Database.
Ответ:
{
"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— уникальный slugName— человекочитаемое названиеCategory— для группировкиDescription— пояснение и инструкция по подстановке параметровQuery— шаблон PromQL (используйте<service>,<topic>и т.п. для подстановки)Unit— тип значения (ratio_0_1,count,seconds,req_per_sec,burn_rate)
Безопасность
Все формулы проходят regex-валидацию на фронтенде (/^[a-zA-Z_{}[\]()0-9\s.,:='"+\-*/%^]+$/). На бэкенде дополнительная валидация не выполняется — предполагается, что вы доверяете своим формулам.