GH GambleHub

Uptime отчеты и аудит SLA

1) Зачем нужен формальный процесс uptime-отчетности

Доверие клиентов и контрактная прозрачность — единая методика измерений, повторяемые расчеты.
Управление SLO и бюджетом ошибок — связка факта доступности с релизами и инцидентами.
Правильные SLA-кредиты — объективные формулы, предсказуемые выплаты/зачеты.
Юридическая устойчивость — доказательная база, независимый аудит, Legal Hold.


2) Термины и границы

SLI Availability — доля успешных проверок/транзакций за период.
SLO — внутренняя цель (например, 99.95% за 28 дней).
SLA — внешнее обязательство (например, 99.9%/месяц + сервис-кредиты).
Окно измерения — календарный месяц (SLA) и rolling-окна (SLO).
Scope — какие компоненты входят в расчет (edge, API, платежи), а какие нет (админ-портал, non-prod).

💡 Правило: SLA ≤ SLO и базируется на SLI, проверяемых клиентом.

3) Источники истины (и когда какой главный)

1. Синтетика (blackbox/headless) — первичный SLI для «доступности глазами пользователя».
2. Логи/метрики — подтверждают масштаб и характер отказа.
3. Бизнес-события — «успех операции» (например, платеж авторизован).
4. Статус-страница — публичная коммуникация; сверяется с фактами №1–3.

При расхождениях: приоритет за синтетикой с корректным quorum из ≥2 регионов.


4) Методика расчета доступности

4.1 Базовая формула


Availability = Успешные проверки / Все проверки
ErrorBudget = 1 − SLO
Downtime(m) = (1 − Availability) × Длительность_периода(в мин)

4.2 Много-регионный quorum

Инцидент засчитывается, если ≥N независимых регионов/ASN одновременно фиксируют отказ.
Рекомендуемо: N=2 из 3 (EU/NA/APAC).

4.3 Типы SLI

HTTP SLI: код 2xx/3xx, latency ≤ T.
DNS/TLS SLI: NXDOMAIN/SERVFAIL/expiry.
Бизнес SLI: успешные транзакции / все попытки (с исключением клиентских отказов).

4.4 Исключения (documented)

Плановые maintenance окна, объявленные заранее N часов и соблюденные.
Force majeure из SLA (например, провайдер IX-катастрофы) — только при наличии доказательств и публичного уведомления.
Клиентские ошибки/ограничения (quota exceeded, 4xx).


5) Политика maintenance окон

Временные слоты, согласованные в контракте (например, вс 02:00–04:00 по UTC+0).
Маркеры `maintenance=true` в алертах/панелях → исключение из SLI.
Порог уведомления: минимум за 5 рабочих дней (или как в договоре).
Вне окна — считается SLA-влияние.


6) Edge-кейсы и правила округления

Brownout (частичное ухудшение): считать долю отказов (weighted downtime), а не «0/1».
Flapping: минимальная единица учета — интервал пробы (например, 30–60 сек) + hysteresis (for: 2–5 мин).
Clock drift: все времена в UTC и ISO-8601; синхронизация NTP.


7) Примеры PromQL (синтетика → аптайм)

Успех HTTP-проверки:
promql probe_success{job="blackbox-http"} == 1
p95 latency:
promql histogram_quantile(0.95, sum by (le, target) (rate(probe_http_duration_seconds_bucket[5m])))
SLA-аптайм за месяц (секундность):
promql sum_over_time((probe_success==1)[30d]) / (30246060)
Quorum отказов (≥2 региона в 3 минуты):
promql sum by (target) (max_over_time((probe_success==0)[3m])) >= 2

8) Примеры SQL (агрегации отчета)

Помесячный аптайм и даунтайм:
sql with checks as (
select target, ts, success -- success: 1/0 from synthetic_checks where ts >=:from and ts <:to
),
agg as (
select date_trunc('month', ts) m, target,
sum(success)::float / count() as availability from checks group by 1,2
)
select m, target, availability,
(1-availability) extract(epoch from (date_trunc('month', m) + interval '1 month' - date_trunc('month', m))) / 60 as downtime_minutes from agg;
Сверка со статус-страницей (инциденты):
sql select a.m, a.target, a.downtime_minutes, s.incident_id, s.start_utc, s.end_utc from monthly_downtime a left join statuspage_incidents s on a.m = date_trunc('month', s.start_utc)
and tstzrange(s.start_utc, s.end_utc) && daterange(a.m, a.m + interval '1 month');

9) Шаблон ежемесячного отчета (Customer-friendly)

yaml period: "2025-10-01..2025-10-31 (UTC)"
services:
- name: "API Edge"
sla: "99.90%"
measured_availability: "99.93%"
downtime:
total: "30m 14s"
windows:
- start: "2025-10-12T03:12Z"
end:  "2025-10-12T03:38Z"
impact: "EU+NA, HTTP 5xx spike, p95>2s"
root_cause: "DB connection pool exhaustion"
rca_link: "INC-20251012-0312"
slo_budget:
period_target: "0.10%"
consumed: "0.07%"
- name: "Payments API"
sla: "99.95%"
measured_availability: "99.97%"
summary:
sla_breaches: 0 service_credits: 0 maintenance:
announced: 2 total_duration: "48m"
signatures:
generated_at: "2025-11-01T10:00Z"
report_id: "SLA-2025-10-API"

10) SLA-кредиты: расчет и применение

Таблица кредитов: например, 99.0–99.5% → 5% MRR; 98.0–99.0% → 10% и т.д.
True-up: кредит применяется как credit note к следующему счету.
Автоматизация: правило «если `measured_availability < SLA` → `credit_note.create()`».
Витрина для клиента: портальная карточка «SLA credits balance».


11) Аудит, доказательства и Legal Hold

Аудит-трейл: кто/что/когда рассчитал, версия методики, контрольные суммы.
Raw-данные неизменяемы (append-only); корректировки — отдельными записями.
Legal Hold: заморозка диапазона данных (пробы, логи, инцидент-карточки, алерты).
Реплика архивов: независимое хранилище (WORM/S3 Object Lock).


12) Сверка с публичной статус-страницей

Инцидент на статус-странице обязан иметь таймлайн и компоненты.
Несоответствие времени/масштаба → создается discrepancy-record и проводится RCA.
Итог отчета содержит раздел «Reconciliation Notes».


13) Инциденты и отчетность

Каждому окну даунтайма соответствует INC-карточка (ID, SEV, владелец, RCA, CAPA).
В отчете: ссылка на INC, краткий root cause, статус CAPA.
Для SEV-1: постмор тем ≤ 48 ч от закрытия.


14) Контроль качества данных

Гигиена проб: >99% успешных скрейпов агентов, отсутствие пропусков >5 минут.
Анти-шум: quorum + multi-window, debounce.
Сэмплирование трасс/логов фиксируется и документируется.
Тесты методики: юнит-тесты расчетов, golden-файлы на исторических данных.


15) Безопасность и приватность

TLS/mTLS для ingest, подпись пакетов (HMAC).
PII-редакция в логах/отчетах; SLA-отчет не должен раскрывать персональные данные.
RBAC/ABAC на отчеты; следы доступа пишутся в аудит-лог.


16) Дашборды и SLO-виджеты (что показывать)

Overall availability по сервисам за месяц/квартал.
Downtime windows с severity и каналом детекта.
Error budget burn (fast/slow) и тренды.
Releases overlay — аннотации выкладок.
SLA credits forecast — при текущем тренде.


17) План внедрения (3 итерации)

1. Модель и данные (2 недели): зафиксировать SLI/SLO/SLA, включить quorum-синтетику, собрать «сырье» в DWH.
2. Расчет и отчет (2–3 недели): формулы, SQL/PromQL, шаблоны YAML/PDF, портал клиента, авто-кредиты.
3. Аудит и автоматизация (3–4 недели): Legal Hold, reconciliation со статус-страницей, подписанные вебхуки, регламенты диспутов.


18) Чек-лист качества отчета

  • Определены scope, SLI, методика и окно измерения.
  • Есть quorum и multi-window; flapping подавляется.
  • Исключения (maintenance/force majeure) документированы.
  • Каждое окно даунтайма связано с INC и RCA.
  • Подсчитаны SLA-кредиты и отражены в биллинге.
  • Отчет воспроизводим (версии формул/данных).
  • Аудит-трейл и Legal Hold включены.
  • Публичная статус-страница согласована (reconciliation notes).

19) Мини-FAQ

Почему синтетика главный источник?
Она ближе всего к пользовательскому пути и включает периметр (DNS/CDN/WAF). Метрики/логи — уточняют причину.

Как считать частичные деградации?
Взвешенный даунтайм: доля неуспехов × длительность окна, а не «все или ничего».

Нужно ли хранить «сырые» проверки?
Да. Для аудита и повторного расчета при споре — raw нужны обязательно.


Итог

Uptime-отчеты и аудит SLA — это не «цифра в конце месяца», а воспроизводимая система измерений, правил и доказательств: корректные SLI, quorum-проверки, прозрачные формулы, связка с инцидентами и биллингом, контроль исключений и Legal Hold. Зафиксируйте методику, автоматизируйте расчет и кредиты, держите аудит-трейл — и ваши SLA станут управляемыми, понятными и защищенными.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.