Как SLI, SLO и SLA делают сервис надёжным, а бизнес — предсказуемым
Вечер пятницы. Вы предвкушаете большой наплыв заказов в своем сервисе доставки еды и уже прикидываете прибыль. Но вдруг что-то ломается! В чате поддержки — шквал сообщений:
- «Где мой заказ?! Я жду уже час!»
- «Деньги списали, а еда не приехала!»
- «В приложении ошибка 502, вообще не работает!»
Радость улетучивается — вместе с деньгами, репутацией и лояльностью клиентов… После «тушения пожара» возникают вопросы: «Почему мы не увидели проблему раньше?» и «Как вообще понять, что работает плохо, а что — нормально?».
Еще недавно многие работали по принципу «пока гром не грянет»: о проблемах узнавали только от разгневанных клиентов или когда система уже лежала. SLA (Service Level Agreement) существовал формально, а про SLO и SLI почти не слышали. Но времена меняются. Сегодня SLI, SLO и SLA — это инструменты, которые позволяют вывести надёжность на новый уровень и предсказывать проблемы до того, как они ударят по бизнесу. Разбираемся, что означают эти аббревиатуры и как с их помощью превратить хаос в управляемый процесс.
SLI: измеряем, что происходит с сервисом
SLI (Service Level Indicator) — это числовой показатель, который отражает, насколько хорошо система работает с точки зрения пользователя. Проще говоря, SLI — это метрика состояния сервиса здесь и сейчас, «спидометр» для ИТ-продукта.
Рассмотрим несколько конкретных SLI-метрик для нашего примера с доставкой еды.
- Процент успешных заказов. Показывает, сколько попыток оформить заказ заканчиваются успехом. Например: за 12 часов из 2000 пользователей, пытавшихся сделать заказ, у 1960 все прошло гладко, а у 40 произошла ошибка. Тогда SLI успешности = 1960 / 2000 * 100% ≈ 98%. Это высокий показатель стабильности. Если же он падает ниже, скажем, 95% – явный сигнал: что-то мешает людям оформить заказ, надо чинить.
- Аптайм (доступность) приложения. Процент времени, когда сервис работает штатно: приложение загружается, кнопки нажимаются, страницы не выдают ошибок. Например: за 30 дней (43 200 минут) приложение было недоступно 60 минут. Тогда SLI доступности = (43 200 − 60) / 43 200 * 100% ≈ 99,86%. Отлично! Но падение до 97% (~1300 минут простоя в месяц) означает, что пользователи массово не могут войти в сервис – проблема.
- Доля своевременной доставки. Оценивает, какой процент заказов приезжает вовремя. Например: за день было 500 заказов, из них 460 доставлены в срок до обещанных 60 минут. Тогда SLI по времени доставки = 460 / 500 * 100% = 92%. Оставшиеся 8% заказов опоздали.
SLI нужны, чтобы измерять качество сервиса не на глаз, а на основе объективных данных. SLI-мониторинг сразу показывает, где сбоит: проблемы в доставке, сбой в приложении или сбой платежей. Кроме того, прозрачные SLI помогают команде и партнерам: можно показать «У нас всё работает на 98% успешно» – и это звучит весомо.
SLI – основа для понимания текущей надёжности сервиса: это данные, на которые потом опираются цели (SLO) и обещания клиентам (SLA).
SLO: ставим цели надёжности для команды
Если SLI — это измеряемый факт, то SLO (Service Level Objective) — это цель по качеству сервиса, которую вы устанавливаете на основе этих фактов. SLO — внутренняя договоренность, ориентир для команды, определяющий порог допустимого состояния системы. По сути, SLO отвечает на вопрос: «Какой уровень показателей мы хотим и готовы обеспечить?»
Например, можно сформулировать несколько SLO на базе указанных выше метрик.
- Оформление заказов: «Не менее 99,5% заказов должны проходить без ошибок в оплате, подтверждении и т.д.». То есть из 2000 попыток заказа максимум 10 могут закончиться сбоем. Если платежный шлюз или другой компонент начнёт глючить, вы заметите просадку до того, как тысячи клиентов напишут в поддержку.
- Доступность приложения: «Приложение должно быть доступно 99,9% времени в месяц». Это означает максимум ~43 минуты простоя в месяц. Если приложение недоступно дольше, нужно принимать меры: оптимизировать инфраструктуру, увеличивать ресурсы, настраивать резервирование.
- Срок доставки: «95% заказов доставляются в течение 60 минут». Команда ставит цель, чтобы опоздания случались не чаще чем в 5% случаев. Если метрика падает ниже 95%, значит, где-то сбой: не хватает курьеров, рестораны не успевают готовить или подводит логистика – нужно разбираться и улучшать процессы.
Команда разработки, DevOps, поддержки и даже курьеры – все знают, к чему стремиться, и держат фокус на этих целях. SLO помогает управлять ожиданиями внутри бизнеса и приоритизировать работу: если видим, что SLO по доступности приближается к порогу, откладываем выпуск новых фич и сначала стабилизируем систему.
Благодаря SLO вы фактически задаёте планку качества. Эта планка должна быть реалистичной: не стоит из головы ставить 99.999% аптайма, если вы не Google. Цель должна основываться на данных и возможностях команды (например, на текущих SLI плюс некоторый запас на улучшение).
Ещё одно понятие, тесно связанное с SLO, – error budget (бюджет на ошибки). Проще говоря, это время на ошибки, которое вы можете «потратить» без серьёзных последствий. Error budget позволяет балансировать между развитием и стабильностью: вы знаете, сколько сбоев или простоя можете допустить. Если бюджет на ошибки начинает исчерпываться, пора переключаться с внедрения новых фич на усиление надёжности. Такой подход помогает команде быть проактивной и избегать крупных инцидентов.
Важно понимать, что SLO – это внутренний ориентир, а не публичное обещание. Но они становятся основой для SLA.
SLA: обещаем надёжность и несём ответственность
Когда внутренние показатели (SLI) измеряются, а цели (SLO) определены, дело за внешней стороной — SLA (Service Level Agreement), то есть соглашением об уровне сервиса для клиентов или партнёров.
SLA – это формализованное обещание, в котором прописано, какой уровень услуг мы гарантируем, и что произойдет, если эти условия нарушаются. Если SLO – «мы обещаем сами себе достичь», то SLA – «мы гарантируем вам, а если нет – понесем ответственность». SLA – внешняя рамка, SLO – внутренняя цель, а SLI – измерение реальности.
Рассмотрим, как SLA работает в доставке.
- Вы – клиент банка. Предположим, пользуетесь сервисом эквайринга для онлайн-оплаты. Вы заключаете с ним SLA, где оговаривается:
- Аптайм платежного API не менее 99,9% в месяц.
- Время реакции на инцидент – например, не более 15 минут с момента обнаружения.
- Компенсация: например, если сервис оплаты простаивает дольше 1 часа подряд, провайдер возвращает вам, скажем, 10% комиссии за этот месяц.
Без SLA вы остаетесь один на один с проблемой. В нашей истории как раз этот случай: платежи легли в прайм-тайм, а поддержки со стороны партнёра нет. SLA страхует ваш бизнес: провайдер обязан оперативно реагировать при сбоях и компенсировать потери. У него есть стимул держать свои SLO, потому что на кону деньги и его репутация.
- Вы — поставщик. Допустим, крупная сеть ресторанов подключилась к вашей платформе доставки. Для них вы – поставщик услуги, и они хотят гарантий. Вы составляете SLA для клиента-ресторана:
- Время доставки – в 95% случаев не превышает 60 минут.
- Обязательство: если ваш сервис оказывается недоступен более часа (например, сбой приложения) и из-за этого заказы не могут оформляться, вы возвращаете партнёру часть агентской комиссии.
Этот SLA показывает серьёзность ваших намерений. Ресторан видит, что вы берёте ответственность: либо обеспечиваете оговоренный уровень сервиса, либо разделяете издержки. Это выстраивает доверие и долгосрочное сотрудничество.
Вы, конечно, внутри у себя тоже отслеживаете эти показатели – через SLI и SLO, – чтобы не допустить срыва обязательств. SLA же фиксирует их на бумаге.
Практические советы: как внедрить SLI/SLO/SLA
- Определите, какие функции сервиса наиболее важны для пользователей и бизнеса. Это могут быть регистрация, добавление товара в корзину, оплата, оформление заказа, загрузка главной страницы. Не все компоненты системы равны по значимости – сфокусируйтесь на тех, от которых напрямую зависит заработок или удовлетворённость клиентов.
- Определите ключевые метрики (SLI) для этих сценариев. Под каждую критичную функцию выберите 3-5 показателей, которые отражают её качество с точки зрения пользователя. Например, для мобильного приложения – скорость загрузки экрана, процент вылетов, потребление памяти и т.д. Главное, чтобы метрика была понятна и имела связь с опытом пользователя.
- Замерьте текущее состояние и установите SLO. Соберите статистику по выбранным SLI за последние недели или месяцы: как они колеблются, какое среднее значение, худший случай. На основе этого определите реалистичный порог. SLO должно чуть превышать текущий уровень, но быть достижимым без чудес.
- Оформите SLA. Если вы предоставляете сервис внешним клиентам или внутренним пользователям других подразделений – обсудите с ними приемлемые уровни сервиса. Заключите SLA: пропишите, какой уровень доступности или производительности вы гарантируете. Согласуйте, какие будут действия, если требования не выполняются (коммуникация, сроки исправления) и будет ли какая-то компенсация.
- Настройте мониторинг и алерты. Метрики и цели не имеют смысла без постоянного контроля. Инструментов масса: от классической связки Prometheus + Grafana для сборки и визуализации метрик до самописных решений и дашбордов. Настройте оповещения не на каждое событие, а именно на нарушение ваших SLO. Например, не нужно получать 100 писем при каждой ошибке оплаты – лучше одно, когда успешность заказов падает ниже установленного порога.
- Отслеживайте error budget. Сделайте практикой команды проверку, сколько «бюджета на ошибки» потрачено. Это можно визуализировать на дашборде: например, месяц начался с 43 минут допускаемого простоя, из них уже использовано 20 минут на несколько мелких инцидентов – осталось 23. Такой счетчик дисциплинирует. Если видите, что error budget тает быстрее, чем планировалось, примите меры: временно остановите релизы, сконцентрируйтесь на стабильности, найдите и устраните узкие места.
- Регулярно пересматривайте SLI/SLO. Раз в квартал или при значимых изменениях продукта задавайтесь вопросами: «А правильные ли мы метрики измеряем? Может, появились новые болевые точки у клиентов?» Метрики эволюционируют вместе с вашим сервисом. Главное – не забывать их обновлять и улучшать.
- Вовлеките всю команду. SLI/SLO – это не только забота SRE-инженера или отдела мониторинга. Донесите их значение до всех: разработчиков, тестировщиков, менеджеров продукта, службы поддержки. Когда SLO становится общим договором всей команды, появляется совместная ответственность за надежность. Люди начинают думать, как их работа влияет на итоговые показатели. Например, QA-инженер, зная про цель «не больше 3% жалоб», будет более тщательно проверять сложные кейсы, а продукт-менеджер подумает дважды, прежде чем выпускать сырую фичу 31 декабря.
Пусть поначалу это кажется дополнительной бюрократией, на деле эти практики экономят время и деньги. Поэтому методика SLI → SLO → SLA постепенно становится нормой. Она привносит культуру измерения и ответственности, которой раньше не хватало. Бизнес, научившийся говорить языком этих метрик, выглядит профессиональнее и привлекает клиентов, зная что надёжность = доверие = прибыль.
P.S. Если тема надёжности и управления сервисами вас заинтересовала, рекомендуем почитать другие материалы в нашем блоге. Например, ознакомьтесь со статьёй о том, как инженеры Google и Amazon внедряют практики SRE (Site Reliability Engineering). Также советуем материал про концепцию «двухскоростного ИТ», где разбираем баланс между стабильностью и инновациями в развитии IT-систем.
И подписывайтесь на наш Telegram-канал – там мы регулярно делимся опытом, кейсами и полезными советами для IT-директоров и технических специалистов.