← Назад к вопросам

Что такое SLO?

1.0 Junior🔥 151 комментариев
#Мониторинг и логирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое SLO?

SLO (Service Level Objective) — это ключевой метрический показатель в рамках практики SRE (Site Reliability Engineering) и DevOps, определяющий целевой уровень надежности сервиса, выраженный в виде измеримой цели. Проще говоря, SLO — это конкретное, количественное и привязанное ко времени обязательство перед пользователями о том, как хорошо должен работать сервис. Это не абстрактное пожелание, а строгая метрика, на основе которой принимаются инженерные и бизнес-решения.

В связке SLI (Service Level Indicator) → SLO (Service Level Objective) → SLA (Service Level Agreement) SLO занимает центральное место:

  • SLI — это сырая измеряемая метрика (например, процент успешных HTTP-запросов, время отклика p99).
  • SLO — это целевое значение для этой метрики (например, "99.9% HTTP-запросов должны быть успешными в течение календарного месяца").
  • SLA — это договор с пользователями, часто с финансовыми последствиями, который базируется на SLO, но обычно является его более консервативной версией (например, "гарантируем доступность 99.9%, иначе предоставим кредит").

Зачем нужны SLO?

Основная цель SLO — создать объективную основу для принятия решений о том, куда направлять инженерные усилия. Без SLO команды часто либо "тушат пожары" без стратегии, либо наоборот, стремятся к избыточной, экономически невыгодной надежности ("five nines").

Ключевые функции SLO:

  • Управление надежностью (Error Budgeting): Это самый мощный концепт. Если SLO — это "цель по успешным операциям", то Error Budget (бюджет ошибок) — это допустимый процент неудач (100% - SLO). Например, при SLO 99.9% месячный бюджет ошибок составляет 0.1% (примерно 43 минуты недоступности). Пока бюджет не исчерпан, можно смело запускать рискованные изменения, эксперименты, рефакторинг. Если бюджет близок к исчерпанию, фокус смещается на стабильность и исправление проблем. Это переводит разговор о "риске" в количественное русло.
  • Приоритизация работ: Четкий ответ на вопрос "Надо ли нам срочно чинить эту проблему?" становится очевидным: если она серьезно съедает бюджет ошибок — да, если нет — можно запланировать.
  • Улучшение коммуникации: SLO создает единый язык между разработкой (Dev), эксплуатацией (Ops), продукт-менеджерами и бизнесом. Все понимают, какая надежность является приемлемой.
  • Формирование SLA: SLO служат техническим фундаментом для составления реалистичных и измеримых договоров с клиентами.

Пример SLO на практике

Допустим, у нас есть API-сервис. Мы определяем ключевую метрику пользовательского опыта — латентность (время отклика).

  1. Определяем SLI: (Количество HTTP-запросов с временем ответа < 300 мс) / (Общее количество HTTP-запросов).
  2. Устанавливаем SLO: "95% всех HTTP-запросов к API за скользящий 28-дневный период должны возвращать ответ быстрее 300 мс".
  3. Внедряем мониторинг и вычисляем бюджет ошибок: Для SLO 95% бюджет ошибок — 5%. Если за 7 дней из 28 мы уже израсходовали 4.8% бюджета, запуск новой функциональности с риском деградации производительности должен быть отложен.

Вот как может выглядеть упрощенный код для вычисления текущего "состояния" бюджета ошибок (на Python-псевдокоде):

# Пример вычисления использования Error Budget
def calculate_error_budget(slo_target: float, current_sli: float, total_requests: int) -> dict:
    """
    slo_target: Целевое значение SLO (например, 0.95 для 95%)
    current_sli: Текущее измеренное значение SLI
    total_requests: Общее количество запросов за период
    """
    # Допустимое количество "плохих" запросов по SLO
    error_budget_allowed = (1 - slo_target) * total_requests

    # Фактическое количество "плохих" запросов
    bad_requests_actual = (1 - current_sli) * total_requests

    # Использованный бюджет ошибок (%)
    budget_consumed_percent = (bad_requests_actual / error_budget_allowed) * 100 if error_budget_allowed > 0 else 100

    status = "OK" if budget_consumed_percent < 100 else "EXHAUSTED"

    return {
        "slo_target": slo_target,
        "current_sli": current_sli,
        "error_budget_remaining_percent": max(0, 100 - budget_consumed_percent),
        "status": status
    }

# Использование
result = calculate_error_budget(slo_target=0.95, current_sli=0.93, total_requests=1_000_000)
print(f"Состояние SLO: {result['status']}")
print(f"Осталось бюджета ошибок: {result['error_budget_remaining_percent']:.1f}%")

Критерии хорошего SLO

  • Измеримость: Должен основываться на четком SLI.
  • Релевантность: Отражает реальный пользовательский опыт (например, не "uptime сервера", а "успешность запросов от клиента").
  • Простота: Легко понимается и отслеживается.
  • Привязанность ко времени: Определен период измерения (скользящее окно 28 дней, календарный месяц).
  • Достижимость, но не тривиальность: Цель должна быть достаточно амбициозной, чтобы требовать усилий, но реалистичной.

Итог: SLO — это не просто метрика, а философия управления надежностью. Это инструмент, который позволяет командам балансировать между скоростью разработки (инновациями) и стабильностью сервиса, переводя субъективные споры в объективные данные и создавая основу для прогнозируемой и устойчивой работы сервисов. Внедрение SLO — один из краеугольных камней зрелой DevOps-культуры.