как мы считаем бюджет ошибок без специально обученных инструментов типа Sloth или Pyrra? для всех махинаций нам понадобится только grafana и victoriametrics (с prometheus чуть сложнее).
шаг 1:
описываем в *recording rules* метрики, которые будем трекать с максимально точным фильтром по лейблам.
additionalPrometheusRules:
- name: sre-metrics
groups:
- name: kubernetes-resource
rules:
- record: sre:shop:apigw:99pct
expr: quantile(0.99, http_server_requests_seconds_max{namespace="shop",job="apigateway",uri=~"/users/profile|/auth/{userId}"})
- record: sre:shop:apigw:errors
expr: sum(rate(http_server_requests_seconds_count{namespace="shop",job="apigateway",status=~"5..|429",uri=~"/users/profile|/auth/{userId}"}[1m]) or vector(0))
шаг 2:
в grafana панели описываем состояние метрик, которое сигнализирует о наличии инцидента.
вычитаем временные интервалы, когда у нас плохое состояние, из общего времени в месяц (или другой интервал).
у меня еще есть переменная, которая отвечает за старт операционного дня — несколько часов ночью бюджет мы не считаем:
WITH(
shop_responses = sre:shop:apigw:99pct > 2.5,
shop_errors = sre:shop:apigw:errors > 0.5
)
((days_in_month() * 24 * 60 * 60) -
running_sum(
(duration_over_time(shop_responses[:15s],16s) default
duration_over_time(shop_errors[:15s],16s)) or vector (0) ifnot (hour(time()[1h:1h] + timezone_offset("Europe/Moscow")[1h:1h])[1h:1h] < ($operation_day_start - 1))
)) / (days_in_month() * 24 * 60 * 60)
а дальше строим тренды, считаем burn rate и, конечно же, говорим друзьям, что у вас много девяток!
в дальнейшем выложу полноценное демо с дашбордом и данными.
