D-10 · Цели уровня обслуживания и их измерение#
- Версия: 1.2 · 2026-09-22 · по мастер-шаблону v6.0
- Известно также как: SLO, SLI, бюджет ошибок, «сколько девяток», что обещаем пользователю и чем это проверяем
- Этап: W0 · Рамки и требования · измеритель строится на W9, его цена считается на W10
- Стадия: гринфилд · работающая — на гринфилде измерителя ещё нет, и решение раздваивается: сначала измеритель, потом обещание
- Профиль: дорого изменить · высокое влияние → полная форма
- Не решает: как устроена наблюдаемость — три сигнала, их связь и их стоимость: это OPS-07 и OPS-08; что показывать пользователю, когда обещание нарушено, — D-06; обещание о неизменности интерфейса, выраженное сроком, — D-11; во что обходится отдельный контур хранения, которого требует пятый дисквалификатор, — D-01
- Не путать с: D-06 — там решают, что делать при отказе, здесь — что мы вообще обещали и как узнаем, что обещание нарушено
- Карточки: OPS-09 SLI, SLO и бюджет ошибок · DATA-16 целостность и сверка данных · OPS-07 observability · OPS-08 стоимость observability · PERF-02 перцентили и хвост · REL-05 health checks · REL-12 серый отказ
Документ вобрал в себя два кандидата очереди, и это результат правила, введённого в мастер-шаблон v5.0. «Состав телеметрии» стоял в очереди отдельным документом — и не устоял: OPS-07 и OPS-08 содержат все три признака карточки, делающей работу решения. Всё, что осталось от него решением, оказалось обратной стороной цели: нельзя обещать то, чего не измеряешь, и незачем измерять то, чего не обещаешь.
Предмет: что мы обещаем, чем это измеряется и сколько стоит измерение. Три части одного решения, а не три решения.
Область — один сценарий, а не система. Одна цель на всю систему означает, что её не выбирали.
1. Что выяснить#
| Вопрос | Где смотреть | Заполняет |
|---|---|---|
| Какой сценарий обещаем — и с чьей точки зрения он измеряется? | Продукт, основные сценарии W0 | Область; дисквалификатор точки зрения |
| Что считается «работает»: какое событие успешно, какое нет, что не считается ни тем ни другим? | Требования, коды ответов, поведение клиента | Определение измерителя |
| Откуда цель — из того, что теряет пользователь, или из круглого числа? | Продукт, деньги | Дисквалификатор цены |
| Чем измеряется — и существует ли этот сигнал сегодня? Если нет — решение состоит из двух шагов, и раздел 3 заполняется для измерителей, а не для целей | Имеющаяся телеметрия | Дисквалификатор |
| Сколько стоит измерение и как цена растёт вместе с системой? | Счёт за наблюдаемость, кардинальность | Ось цены |
| Что происходит, когда бюджет ошибок исчерпан, и кто это решает? | Договорённость с продуктом | Дисквалификатор |
| На какой вопрос система обязана уметь ответить во время инцидента по этому сценарию? | Разбор прошлых инцидентов | Состав телеметрии |
Четвёртый и седьмой вопросы — это и есть бывший отдельный документ#
Обещание и измеритель — одно решение, взятое с разных сторон. Цель без сигнала — лозунг: нарушение не обнаружится, пока не позвонит пользователь. Сигнал без цели — расход: он собирается, хранится, попадает в счёт и не отвечает ни на один заданный вопрос.
Отрицательный ответ на четвёртый вопрос не отменяет работу, а перенаправляет её. Местная проверка в конце документа — «измеритель показывает число сегодня» — отменит любую цель, и узнать об этом лучше здесь, а не после заполненной матрицы. Но заполнять её всё равно придётся: колонками становятся измерители, осями — их цена, точка зрения и то, что каждый ловит и чего не ловит. Цели назначаются вторым шагом, с датой. На прогоне E-03 так и вышло: ни одна цель не обещана, выбраны три измерителя.
Седьмой вопрос задаётся до инцидента, а не в нём. Формулировка проверки: возьмите последний разбор и спросите, можно ли было ответить на его главный вопрос имеющейся телеметрией, ничего не добавляя. Отрицательный ответ — это не «надо добавить логов», а недостающая часть обещания.
Цена измерения — не накладной расход, а часть цены обещания. Расходы на наблюдаемость составляют в среднем 17 % от расходов на вычислительную инфраструктуру, медиана 10 % (Grafana Labs, опрос 2025, n = 1255; опрос проведён поставщиком средств наблюдаемости и набирался через его каналы, поэтому означает «у тех, кто этим занимается», а не «в среднем по отрасли»). Цель, требующая сигнала, которого нет, стоит столько же, сколько его постройка и содержание.
2. Оси и дисквалификаторы#
Оси сравнения. Измеримость сегодня · точка зрения измерителя · цена измерения и её рост · чувствительность цели к росту нагрузки · что следует из исчерпания бюджета · связь с деньгами или с потерей пользователя.
Дисквалификаторы.
- Цель обещана, сигнала нет. Обещание, которое нечем проверить, не цель, а лозунг: нарушение обнаружит пользователь, а не мы. Либо сначала измеритель, либо обещание не даётся.
- Измеряется не с точки зрения пользователя. Доступность, посчитанная по проверкам здоровья сервиса, расходится с тем, что видит потребитель: процесс исправен, отвечает на проверку и не обслуживает (Huang et al., HotOS '17). Точка зрения — свойство измерителя, а не настройка.
- Исчерпание бюджета ошибок ни к чему не приводит. Если после исчерпания не меняется ничего — ни приоритеты, ни темп выката, — это не бюджет, а отчёт. Дисквалифицируется не цель, а способ ею пользоваться.
- Цель выбрана без цены. Каждая девятка стоит денег: резерва, дублирования, дежурства, измерения. Цель, у которой не посчитана цена, — пожелание, и первым же сокращением бюджета она отменится.
- Измеритель падает вместе с измеряемым. Система, считающая доступность, не должна зависеть от той, чью доступность считает (OPS-07). Иначе во время аварии не будет ни системы, ни данных о ней.
Следствие исчерпания бывает двух родов, и второй не про разработку. Третий дисквалификатор спрашивает «что изменится», но до этой версии все примеры к нему отвечали одним и тем же — темпом изменений. Это не единственный доступный ответ и не всегда доступный вообще.
| Род следствия | Что меняется | Когда он единственный |
|---|---|---|
| Темп изменений — приоритеты, заморозка выката, доля работы на надёжность | Что мы делаем с системой | Обычный случай: выкаты в нашей власти |
| Режим эксплуатации и внешняя эскалация — переход в деградацию целиком, ручной режим, запрос на продление срока у того, кто его назначил | Как система работает и кого мы об этом извещаем | Когда темп менять нечем: выкаты запрещены извне, срок назначен не нами |
Признак, что нужен второй род: обычное следствие уже в силе до всякого исчерпания. Если выкаты внутри окна и так запрещены, «остановить выкаты» — не следствие, а описание текущего положения. Дисквалификатор при этом срабатывает верно, и ловушка именно здесь: он говорит «следствия нет», но не подсказывает, где искать другое. На прогоне U-02 ответ нашёлся в режиме эксплуатации — доля подач, идущих отложенным путём, — и в эскалации наружу, вплоть до продления окна приказом.
Следствие второго рода обязано быть согласовано заранее с тем, к кому обращено. Оно затрагивает того, кем мы не распоряжаемся, и «запросим продление» — не следствие, если никто не обязался это рассматривать. Строка записи называет не только действие, но и адресата и то, что он обязался сделать; иначе третий дисквалификатор срабатывает снова, уже на втором роде.
Одно наблюдение с того же прогона, пока единственное: следствие второго рода вышло ступенчатым — своё действие на половине бюджета, своё на исчерпании. Похоже, дело в том, что режим эксплуатации — величина, которую можно двигать постепенно, тогда как «остановить выкаты» двоично. Правилом это не объявляется: случай один.
Первые два отсекают обещание, третий и четвёртый — способ, пятый превращается в работу.
3. Матрица оценки#
Колонки — формы цели из раздела 4, применимые к этому сценарию.
Словарь пометок. [продукт] — ответ владельца продукта, полученный явно · [замер] · [расчёт] · [тариф] — цена измерения из счёта · [нет данных].
Пример условный. Числа выдуманы, форма настоящая.
| Ось | Что записывать | Доля успешных запросов | Окна времени | По сценарию целиком |
|---|---|---|---|---|
| Измеримость сегодня | Существует ли сигнал и что надо достроить | Есть: коды ответов на периметре [замер] |
Есть | Нет: нужна сквозная трассировка [замер] |
| Точка зрения | Чья: сервиса, периметра, клиента | Периметр — ближе к пользователю, чем сервис | Периметр | Клиент — единственная честная |
| Цена измерения | Что добавится к счёту | 0 — сигнал уже есть | 0 | +12 % к наблюдаемости [тариф] |
| Чувствительность к росту | Что произойдёт с ценой при ×10 | Не меняется | Не меняется | Растёт линейно, спасает сэмплирование |
| Следствие исчерпания | Что именно меняется и кто решает | Выкат новых функций останавливается [продукт] |
То же | То же |
| Связь с потерей | Что теряет пользователь при нарушении | Запрос не прошёл — повторит | Не видит разницы в пределах окна | Сценарий не завершился — ушёл |
Нулевой вариант — «не обещать». Он законен: сценарий, который никому не обещан, не требует ни цели, ни измерителя, ни их цены. Хуже всего — обещать, не измеряя: это нулевой вариант, которому приписали свойства первого.
4. Типовые формы цели#
Рынка здесь нет; формы не устаревают.
| Форма | Что измеряет | Когда верна | Чем оборачивается при ошибке | Статус у нас |
|---|---|---|---|---|
| Доля успешных запросов | Успешные против всех за период | Операция короткая, повтор дёшев | Пользователь, у которого не прошло десять подряд, для метрики неотличим от десяти разных | заполняется в проекте |
| Окна времени | Доля «хороших» минут | Важна непрерывность, а не отдельный запрос | Короткие частые сбои прячутся внутри хороших минут | |
| По сценарию целиком | Дошёл ли пользователь до конца | Ценность в завершении, а не в отдельном вызове | Дороже всех в измерении: нужна сквозная трассировка | |
| Задержка как перцентиль с порогом | Доля ответов быстрее порога | Медленно = сломано | Среднее вместо перцентиля прячет хвост (PERF-02) | |
| Свежесть данных | Отставание производной копии | Система асинхронная, отставание допустимо | Отставание измеряют на выходе, а не на входе, и не видят очередь | |
| Корректность | Доля расхождений при сверке | Есть копии данных (D-07) | Единственная форма, где нарушение не видно пользователю сразу | |
| Разные цели по классам важности | Своя цель на класс | Классы уже введены (D-06) | Классов больше трёх — их перестают различать |
У формы «корректность» цена измерения не фиксирована, а выбирается — и это единственная такая форма. У остальных сигнал либо есть, либо его надо построить один раз. Здесь частота и полнота сверки — параметр решения, и точность растёт как корень из объёма выборки, то есть цена растёт квадратично к точности. Если арбитром служит не вторая копия, а внешний источник — склад, контрагент, физический мир, — цена измеряется человеко-часами и вопрос звучит как «как часто мы имеем право спрашивать арбитра» (DATA-16). На прогоне E-03 продуктовая цель отменилась именно этим расчётом: суточное измерение стоило в тринадцать раз дороже квартального.
Формы складываются, и обычно нужны две. Типовая пара — доступность плюс задержка: система, отвечающая на все запросы за десять секунд, формально доступна.
Источники раздела: Google SRE Book — Service Level Objectives · DORA — метрики поставки · OPS-09 · реестр исследования, записи P-REQ-02 и P-OPS-01
5. Эвристики#
Обещать можно только то, что уже измеряется. Если сигнала нет, решение состоит из двух шагов: сначала измеритель, потом обещание. Сделать наоборот — значит узнать о нарушении от пользователя.
Цель выводится из того, что теряет пользователь, а не из числа девяток. Вопрос не «сколько девяток принято», а «что происходит с человеком, когда не работает, и как быстро он это замечает». Из ответа число выводится само и почти никогда не бывает круглым.
Бюджет ошибок — расходуемый ресурс. Он тратится и заканчивается, и его исчерпание обязано что-то менять — темп изменений или режим эксплуатации, см. два рода в разделе 2. Бюджет, исчерпание которого ничего не меняет, — способ сообщать плохие новости, а не управлять ими.
Одна цель на систему — признак того, что её не выбирали. У чтения и у записи, у основного сценария и у отчётности разная цена отказа. Это то же правило, что для ячеек в D-04 и для форм деградации в D-06.
Цена измерения растёт быстрее системы. Метрика с меткой неограниченной кардинальности умножает объём на миллионы (OPS-08). Прежде чем обещать цель, требующую нового сигнала, посчитайте, во что обойдётся сигнал при десятикратном росте.
Вопрос «что сломалось» проверяется до инцидента. Возьмите последний разбор и спросите, отвечала ли на его главный вопрос имеющаяся телеметрия. Отрицательный ответ — часть этого решения, а не задача на потом.
«Нет данных» здесь означает «не спросили продукт». Как и в D-06: пустая ячейка [продукт] закрывается разговором, а не выгрузкой, и означает, что решение ещё не принято тем, кто должен его принимать.
6. Запись в ADR#
| Поле ADR | Чем заполняется |
|---|---|
| Контекст | Сценарий, его ценность, точка зрения измерения, что считается успехом и неудачей |
| Дисквалификаторы | Что отсечено; отдельно — какой измеритель пришлось построить до обещания |
| Рассмотренные варианты | Матрица раздела 3 снимком, включая нулевой вариант «не обещать» |
| Решение | Цель числом, измеритель, период и бюджет ошибок |
| Обоснование | Откуда взялось число: что теряет пользователь; во что обходится цель и её измерение |
| Последствия | Что строится ради измерения; что происходит при исчерпании бюджета и кто это объявляет |
| Условия пересмотра | Раздел 7 |
| Метод | D-10 v<версия> · шаблон ADR v<версия> — рыночного снимка нет |
Три строки обязательны: измеритель (чем именно, с чьей точки зрения) · что следует из исчерпания бюджета — и какого это рода · цена измерения. Без первой цель непроверяема, без второй бесполезна, без третьей отменится при первом сокращении расходов.
7. Условия пересмотра#
- Бюджет ошибок не исчерпывался ни разу за несколько периодов — цель ниже фактического уровня, и обещание не стоит того, что за него платят.
- Бюджет исчерпывается каждый период — цель выше достижимого, и её исчерпание перестало что-либо значить.
- Появился сигнал, которого не было: измеритель можно сделать честнее, ближе к пользователю.
- Цена измерения выросла быстрее системы — пересчитать, что из собираемого отвечает хоть на один вопрос.
- Инцидент, главный вопрос которого не удалось закрыть имеющейся телеметрией.
- Изменился класс важности сценария относительно соседних (D-06).
Проверка перед тем, как считать решение принятым — пять пунктов в шаблоне. Шестой, местный: измеритель существует и показывает число сегодня. Не «будет настроен», а показывает. Цель, чей измеритель ещё не построен, — это план построить измеритель, и записывать её как цель значит обещать вслепую.
Источники: Google SRE Book — Service Level Objectives · Huang et al. — Gray Failure, HotOS '17 · Grafana Labs — Observability Survey 2025 · DORA — software delivery performance metrics · 00-workflow.md, шаг W0
История версий#
| Версия | Дата | Изменение |
|---|---|---|
| 1.2 | 2026-09-22 | MINOR, по итогам прогона U-02, правка Р7·A плана ревизии. У следствия исчерпания бюджета назван второй род: режим эксплуатации и внешняя эскалация — рядом с прежним единственным, темпом изменений. Дан признак, по которому второй род нужен: обычное следствие уже в силе до всякого исчерпания, и тогда «остановить выкаты» не следствие, а описание положения. Добавлено требование к следствию второго рода — оно обращено к тому, кем мы не распоряжаемся, и потому называет адресата и его обязательство, иначе третий дисквалификатор сработает снова уже на нём. Дисквалификатор, оси и формы цели не изменились — изменился запас ответов на его вопрос, поэтому MINOR. Старым ADR: перепроверять нечего, и оба проверены при внесении. U-02 · ADR-0008 второй род уже применил вручную — именно это и показало, что в документе его нет. E-03 · ADR-0005 выбрал следствие первого рода (разбор расхождений в приоритет над плановыми задачами) — второй род его не задевает |
| 1.1 | 2026-09-18 | MINOR, по итогам прогона E-03. Четвёртый вопрос раздела 1 говорит, что делать при отрицательном ответе: раздел 3 заполняется для измерителей, цели назначаются вторым шагом — иначе матрица заполняется впустую и отменяется местной проверкой в конце. У формы «корректность» названа особенность: цена измерения выбирается, растёт квадратично к точности, а при внешнем арбитре меряется человеко-часами |
| 1.0 | 2026-09-17 | Первая версия. Собрана из двух записей реестра исследования — P-REQ-02 и P-OPS-01, — слитых при написании: «состав телеметрии» не устоял как отдельный документ по правилу мастер-шаблона v5.0 о карточке, делающей работу решения, и его решающая часть оказалась обратной стороной цели. 7 вопросов, 6 осей, 5 дисквалификаторов, 7 типовых форм цели, шестой пункт проверки — измеритель показывает число сегодня |