Дашборды эксплуатации в реальном времени и оповещения

Автор: Николай СапуновОбновлено: август 202619 мин чтения
Содержание статьи +

Кратко

Вести стриминговую платформу вживую – это две разные задачи, а не одна: дашборд, который даёт человеку общую картину происходящего на платформе прямо сейчас, и алерт, который прерывает человека, когда что-то пошло не так настолько, что нужно действовать. Главная дисциплина – слать алерт по симптомам, которые чувствует зритель (воспроизведение сбоит, старт медленный, регион «погас»), а не по каждой внутренней причине, потому что пейджер, звонящий по любому поводу, приучает людей его игнорировать. Эта статья переводит отраслевые «четыре золотых сигнала» мониторинга на язык стриминга, показывает картину, которую центр управления (NOC) смотрит во время живой премьеры, разбирает вслух математику бюджета ошибок и burn rate и описывает SLA, которые OTT-операторы подписывают, и те, что им подписывает CDN. Также мы разбираем модель on-call – ротации, уровни severity и безвиновный postmortem, – потому что дашборд хорош ровно настолько, насколько хорош человеческий процесс за пейджером.

Почему это важно

Если вы ведёте или планируете over-the-top (OTT) платформу – сервис, который доставляет видео через интернет, а не через кабельную приставку, – ночь вашего крупнейшего живого события и есть та ночь, когда платформа вероятнее всего сломается и когда сбой обойдётся дороже всего. Спортивный финал или премьера сериала вызывают резкий всплеск одновременных зрителей, и платформа, которая не видит, что происходит, или топит дежурного инженера в шуме, теряет зрителей в те самые минуты, что важнее всего. Эта статья – для нетехнического руководителя: основателя, продакт-лида или стриминг-директора, которому нужно понимать, что смотрит команда эксплуатации, утверждать уровни сервиса, под которыми подписывается бизнес, и знать, настроен ли алертинг ловить реальные проблемы или лишь генерировать шум. Это операционный спутник карты OTT-аналитики, которая разложила весь ландшафт измерений; здесь же – живой, поминутный его срез.

Одна идея: дашборд информирует, алерт прерывает

Начнём с различия, которое организует всё остальное, потому что путаница между этими двумя вещами – самая частая операционная ошибка. Дашборд – это экран, дающий человеку общую картину: сводный вид ключевых чисел платформы, на который кто-то решает посмотреть. Алерт – это уведомление, которое прерывает человека: письмо, сообщение в чат или сигнал пейджера, потому что что-то требует внимания сейчас. Книга Google Site Reliability Engineering, опорный текст этой дисциплины, определяет их именно так: дашборд – это «сводный вид ключевых метрик сервиса», а алерт – «уведомление, предназначенное для прочтения человеком».

Различие важно из-за цены. Посмотреть на дашборд дёшево: человек может на него взглянуть или проигнорировать без последствий. Прервать человека дорого – это ломает фокус днём и сон ночью. Поэтому правило просто сформулировать и трудно соблюдать: выносите на дашборд всё, но пусть пейджер звонит только по срочному, действенному, видимому зрителю. Платформа, которая шлёт пейдж по любому поводу, на практике не имеет алертинга вообще, потому что дежурный инженер учится пролистывать звон.

Представьте приборную панель машины против предупреждающего зуммера. Панель всё время показывает скорость, топливо и температуру, и вы смотрите на неё, когда хотите. Зуммер звучит, только когда дверь открыта на ходу или топливо почти кончилось – то, на что нужно реагировать немедленно. Никто не стал бы делать машину, чей зуммер пищит раз в секунду; динамик заклеили бы за день, а потом пропустили бы тот единственный сигнал, что имел значение. Эксплуатация стриминга в реальном времени – та же задача проектирования.

Четыре золотых сигнала в терминах стриминга

Следить за всем нельзя, поэтому отрасль остановилась на минимальном наборе из четырёх метрик для любого живого сервиса. Google SRE назвал их четырьмя золотыми сигналами – латентность, трафик, ошибки и насыщение, – и книга явно разбирает случай стриминга, отмечая, что для аудио- или видеосистемы сигнал трафика «может опираться на скорость сетевого I/O или число одновременных сессий». Вот каждый сигнал в переводе на то, что OTT-платформа реально измеряет.

Латентность (latency) – это сколько что-то занимает времени. Для стриминга она распадается на несколько мер, которые чувствует зритель: время старта видео (от нажатия play до первого кадра), время загрузки манифеста (маленького текстового файла со списком вариантов качества видео) и время доставки сегмента (сколько идёт каждый кусок видео в несколько секунд). Важное уточнение из книги SRE применимо прямо здесь: считайте латентность сбойных запросов отдельно от успешных. Ошибка, упавшая мгновенно, и ошибка, висевшая тридцать секунд, – очень разный опыт, а их смешение прячет худшую.

Трафик (traffic) – это сколько спроса на платформе. Для OTT заглавное число – одновременные зрители (сколько людей смотрят в один момент), наряду с запросами в секунду на origin и CDN и egress (объёмом байтов, которые сеть доставки рассылает зрителям). Конкурентность – это число, которое взлетает на живом событии, и именно вокруг него выстроена вся картина эксплуатации. Напомним: сеть доставки контента, или CDN, – это глобальная сеть кеширующих серверов, хранящих копии вашего видео ближе к зрителям, чтобы оно не ехало с одного origin каждый раз.

Ошибки (errors) – это доля запросов, которые сбоят. В стриминге они конкретны: сбои воспроизведения, о которых сообщает плеер, коды ошибок HTTP 4xx и 5xx от CDN (404 – сегмент не найден; 503 – сервер перегружен) и сбои получения лицензии от системы управления цифровыми правами, которая разблокирует защищённый контент. Ключевое слово – доля: ошибки как часть всех запросов, а не сырой счёт, потому что сырой счёт ошибок всегда растёт с ростом трафика и ничего не говорит о том, ухудшается ли платформа на самом деле.

Насыщение (saturation) – это насколько платформа «полна», насколько близок к пределу самый ограниченный ресурс. Для OTT это ёмкость origin-серверов, запас транскодеров (машин, сжимающих видео в разные качества) во время живого ингеста, cache-hit ratio CDN и пропускная способность лицензионного сервера. Насыщение – сигнал, смотрящий вперёд: книга SRE отмечает, что рост хвостовой латентности часто оказывается первым предупреждением о надвигающемся насыщении, поэтому платформа следит за 99-м перцентилем времени старта как ранним индикатором того, что что-то вот-вот переполнится.

Рисунок 1. Четыре золотых сигнала в переводе на OTT. Латентность, трафик, ошибки и насыщение отображаются в конкретные метрики стриминга – и в пример той метрики, что реально сообщает плеер или CDN.

Практическое замечание о том, откуда берутся эти числа. Плеер на каждом устройстве и серверы вдоль пути могут сообщать стандартизованную телеметрию, так что вы не гадаете. Стандарт Consumer Technology Association CTA-5004, Common Media Client Data (CMCD) (издан в 2020) задаёт единый способ для медиаплеера прикреплять данные – играемый битрейт, длину буфера, идентификатор сессии – к каждому запросу к CDN, что спецификация описывает как «полезное для ассоциации/анализа логов, мониторинга качества обслуживания/опыта и улучшения доставки». Его спутник, CTA-5006, Common Media Server Data (CMSD) (2022), задаёт ту же идею в обратную сторону: каждый сервер прикрепляет данные к своим ответам, чтобы нижестоящие системы читали их одинаково. Вместе они и есть причина, по которой современная картина эксплуатации может показывать качество по каждой сессии без того, чтобы каждый вендор изобретал свой формат.

NOC-вид живого события: что показывает стена во время премьеры

Самый напряжённый момент для любой стриминговой платформы – живое событие, когда конкурентность за минуты поднимается от ровного базового уровня до резкого пика. Картину, которую команда эксплуатации смотрит в это окно, часто называют видом центра управления сетью (NOC) – исторически буквальной стены экранов, теперь обычно одного облачного дашборда. Смысл не в том, чтобы человек таращился в него в надежде заметить беду; книга SRE прямо говорит, что командам стоит «тщательно избегать ситуаций, требующих от кого-то таращиться в экран в ожидании проблем». Смысл – в общей картине: когда срабатывает алерт, все реагирующие смотрят на одно и то же.

Хороший вид живого события выстроен вокруг четырёх сигналов, нарезанных так, чтобы быстро локализовать проблему. Кривая конкурентности сидит сверху, потому что это пульс события и контекст для всего остального – всплеск rebuffering при 2 млн одновременных зрителей значит не то же, что тот же всплеск при 50 000. Под ней – срезы, превращающие «что-то не так» в «что-то не так здесь»: метрики качества опыта в разбивке по региону, типу устройства и CDN, чтобы сбой, бьющий только по одному CDN или только по приложениям smart TV, был виден сразу, а не усреднялся в глобальное число.

Рисунок 2. NOC-вид живого события. Конкурентность – пульс; QoE, ошибки и насыщение нарезаны по региону, устройству и CDN, чтобы локальный сбой выделялся, а не усреднялся.

Это та же поминутная дисциплина, что и в более широкой истории доставки – механика выживания самого всплеска конкурентности живёт в статье доставка живых событий и всплеск премьеры, а инструментирование на стороне доставки – в наблюдаемости доставки. Определения метрик качества на этих панелях – времени старта, доли rebuffering – разобраны в квартете QoE, а инструменты их сбора – в стеке измерения QoE. Задача этой статьи – слой над ними всеми: превратить эти числа в картину, по которой человек может действовать, и в пейджер, звонящий только тогда, когда должен.

Алертинг, который работает: симптомы, а не причины

Вот правило, отделяющее полезный алертинг от вредного: шлите пейдж по симптомам, не по причинам. Симптом – это то, что переживает зритель: «воспроизведение сбоит у 8% зрителей в Германии». Причина – внутренняя подоплёка: «origin shield во Франкфурте возвращает 503». Книга SRE называет различие симптома и причины «одним из важнейших» в мониторинге, и вот почему: причин почти бесконечно много, а симптомов, которые зритель реально может почувствовать, – небольшое конечное число. Алертите по горстке симптомов – и ловите каждую важную проблему, включая те, что не предвидели. Алертите по причинам – и одновременно пропускаете новые сбои и закапываете себя в пейджи по внутренним состояниям, которых не заметил ни один зритель.

Дисциплина обостряется, когда вы решаете, на что алертить. Книга предлагает четыре теста для любого нового правила пейджа, и их стоит назвать прямо. Обнаруживает ли этот алерт состояние срочное, действенное и активно или вот-вот видимое зрителю? Всегда ли реагирующему нужно сделать что-то осмысленное, или ответ можно автоматизировать? Точно ли он означает, что зрителям больно, или может сработать во время безобидного тестового деплоя? И не пейджат ли уже кого-то по тому же поводу? Алерт, проваливший эти тесты, – шум, а шум не безобиден: это и есть механизм, через который игнорируется реальный пейдж.

Есть и точный способ ошибиться в представлении каждого сигнала, и это самая частая техническая ошибка алертинга. Алерт по среднему времени отклика вместо 99-го перцентиля прячет медленный хвост запросов, который реально страдает у части зрителей; рабочий пример из книги SRE показывает, что сервис со средним в 100 мс легко может отдавать 1% запросов за 5 секунд. Алерт по счёту ошибок вместо их доли срабатывает при каждом росте трафика независимо от здоровья. А алерт по текущему насыщению вместо скорости его изменения лишает вас раннего предупреждения. Сделайте представление верным – и горстка алертов покроет платформу; сделайте неверным – и никакое число алертов не поможет.

«Частая ошибка: спираль alert fatigue. Классический провал – пейджер, звонящий десятки раз за смену по состояниям, не видимым зрителю: перезапуск одного узла транскодера, краткий всплеск CPU, причинный сбой, который сам залечивается. Каждый ложный пейдж стоит реального прерывания, и книга SRE прямо говорит: «когда пейджи случаются слишком часто, сотрудники сомневаются, проглядывают или вовсе игнорируют входящие алерты, порой пропуская реальный пейдж, заглушённый шумом». Лекарство – не лучшее приложение для уведомлений. Это удалить каждый причинный пейдж, который не срочен и не действенен, перенести эту информацию на дашборд и оставить лишь алерты по симптомам, проходящие четыре теста. Команда, способная реагировать на каждый пейдж с настоящей срочностью, имеет алертинг; команда, научившаяся проглядывать, – нет.»

SLO, бюджеты ошибок и алертинг по burn rate

Чтобы решить, когда симптом плох настолько, чтобы слать пейдж, нужна цель для сравнения, и стриминговая отрасль заимствует три термина из инженерии надёжности. Индикатор уровня сервиса (SLI) – это точная мера одного аспекта качества: например, доля стартов видео, начавшихся в пределах двух секунд, или доля успешных запросов сегментов. Цель уровня сервиса (SLO) – внутренняя цель для этого индикатора: скажем, «99,9% запросов сегментов успешны за любое 30-дневное окно». Соглашение об уровне сервиса (SLA) – внешнее обещание клиенту или партнёру, обычно заданное слабее SLO, чтобы внутренняя цель сработала первой, с деньгами на кону при нарушении.

Мощная идея, вытекающая из SLO, – бюджет ошибок: объём сбоев, который вам разрешён до промаха по цели. Арифметику стоит проделать вслух один раз. Если ваш SLO – 99,9% успеха, бюджет – это остаток: 100% − 99,9% = 0,1% запросов могут сбоить. За месяц, скажем, в 10 млрд запросов сегментов это 10 000 000 000 × 0,001 = 10 000 000 запросов, которые можно потерять до нарушения SLO. Бюджет ошибок переформулирует надёжность из «никогда не падать», что невозможно, в «падать не больше, чем на это» – число, которым команда может управлять, а бизнес – рассуждать.

Бюджет и делает алертинг точным через меру под названием burn rate – насколько быстро вы тратите бюджет относительно темпа, который ровно исчерпал бы его за период. Burn rate 1× тратит весь месячный бюджет ровно за месяц; burn rate 10× – за три дня. SRE Workbook от Google рекомендует подход multiwindow, multi-burn-rate вместо одного фиксированного порога: слать срочный пейдж дежурному, когда часовой burn rate превышает около 14,4× (темп, сжигающий 2% месячного бюджета за час и исчерпывающий его примерно за два дня), открывать тикет пониже приоритетом, когда шестичасовой burn rate превышает около , и лишь смотреть тренды, когда трёхдневный burn rate переползает за 1×. Эффект в том, что быстрый тяжёлый сбой пейджит немедленно, а медленная вялотекущая деградация создаёт тикет, а не будит человека, – что и есть верная человеческая реакция на каждый случай.

Рисунок 3. От SLO к пейджеру. Цель задаёт бюджет ошибок; burn rate – как быстро бюджет тратится – решает, чем будет верный ответ: page, ticket или review.

SLA, которые подписывают OTT-операторы, – и те, что подписывает CDN

Соглашения об уровне сервиса работают для стримингового бизнеса в две стороны, и оператору нужно понимать обе. Наружу вы можете обещать доступность контент-партнёру, рекламодателю или корпоративному клиенту. Внутрь ваши инфраструктурные вендоры обещают доступность вам – и именно в этих обещаниях многие операторы обнаруживают, как мало на деле гарантирует заглавные «99,9%».

Возьмём самый частый пример. Amazon CloudFront, широко используемый CDN, обязуется к месячному аптайму не ниже 99,9% и, если промахивается, возвращает сервисный кредит – 10% счёта за аптайм между 99% и 99,9% и 25% за аптайм ниже 99%. Здесь стоит понять две вещи. Во-первых, что значит 99,9% в реальном простое: это около 43 минут отказа в месяц, а более слабые 99,5% – около 3,6 часа. Эти минуты могут целиком прийтись на вашу премьеру. Во-вторых, в чём средство: сервисный кредит возвращает долю вашего счёта, а не выручки или репутации, потерянных во время отказа. SLA – это инструмент биллингового риска, а не страховка от плохой ночи, и оценить разрыв между ними – решение бизнеса, а не инженера.

Таблица ниже переводит распространённые уровни доступности в простой, который они реально допускают, чтобы число в договоре перестало быть абстракцией.

Доступность (SLO/SLA)Простой в месяцПростой в годТипичное средство при нарушенииСоответствует «вещательной» планке?
99% («две девятки»)~7,3 часа~3,65 дняБольший сервисный кредитНет
99,9% («три девятки»)~43 минуты~8,77 часаСервисный кредит (часто 10%)Спорно
99,95%~22 минуты~4,38 часаСервисный кредитБлиже
99,99% («четыре девятки»)~4,4 минуты~52,6 минутыБольший кредит / по договоруВещательная цель
99,999% («пять девяток»)~26 секунд~5,26 минутыРедко; индивидуальные контрактыТелеком/критическая планка

Вывод не «требуйте пять девяток». Каждая лишняя девятка стоит непропорционально дороже в постройке и эксплуатации, и большинству OTT-сервисов телеком-уровень доступности и не нужен, и не по карману. Вывод – задать SLO на уровне, который бизнесу действительно нужен, задать клиентский SLA слабее этого внутреннего SLO, чтобы ваша тревога сработала первой, и читать каждый SLA вендора на то, что он реально выплачивает. 99,9% одного CDN – ещё и одна из причин, почему зрелые платформы держат больше одного CDN: история переключения живёт в multi-CDN архитектуре и оркестрации, а стоимостная сторона – в инженерии стоимости CDN.

Человеческая сторона: on-call, severity и безвиновный postmortem

Дашборд и пейджер хороши ровно настолько, насколько хороши люди и процесс за ними. Операционная модель, к которой пришла отрасль, имеет несколько частей, и ни одна из них не сложна.

Ротация on-call делит бремя быть тем, кого будит пейджер. Типичная схема – primary дежурный, отвечающий первым, и secondary, которому пейджат, если primary не подтвердил за несколько минут, при ротациях достаточно коротких – часто неделя, – чтобы никто не выгорал. Книга SRE считает нагрузку пейджера управляемой величиной, разбираемой «в квартальных отчётах с менеджментом» как число инцидентов на смену, именно потому, что ротация, будящая людей каждую ночь, растеряет своих людей.

Уровни severity сортируют инциденты так, чтобы ответ соответствовал ущербу. Распространённая схема идёт от Sev-1 (крупный отказ – воспроизведение в целом сломано, живое событие лежит) через Sev-2 (значимая деградация в регионе или на платформе) до Sev-3 (мелкое или косметическое). Severity решает, кого будят, как быстро и кому сообщают: Sev-1 во время флагманского события подключает командира инцидента и канал связи с руководством; Sev-3 ждёт рабочих часов. Две меры времени отслеживают, насколько это работает: среднее время обнаружения (MTTD) – сколько от начала проблемы до того, как кто-то узнал, что снижает хороший алертинг по симптомам, и среднее время решения (MTTR) – сколько от обнаружения до исправления, что снижают runbook и практика.

Рисунок 4. Таймлайн инцидента. Алертинг по симптомам сокращает время обнаружения (MTTD); runbook и практика сокращают время решения (MTTR); безвиновный postmortem превращает каждый инцидент в постоянное исправление.

Runbook – короткое заранее написанное руководство для известного алерта: что он значит, что проверить, что попробовать, – чтобы реагирующий в 3 ночи следовал проверенной процедуре, а не импровизировал. А после значимого инцидента безвиновный postmortem спрашивает, что в системе допустило сбой, а не кого винить, исходя из того, что инженеры прячут ошибки в культуре вины и выносят их на свет в культуре обучения. Глава о мониторинге в книге SRE добавляет связанную мысль: «пейдж с механическим, алгоритмическим ответом должен быть тревожным флагом» – если runbook чисто механический, работу стоит автоматизировать, а пейдж удалить, освободив человека для новых проблем, которым действительно нужно суждение.

Где здесь Фора Софт

Эксплуатация в реальном времени окупается на масштабе, где 43 допустимые минуты месячного простоя одного CDN могут прийтись на премьеру, которую смотрят миллионы, и где разница между поимкой регионального сбоя за минуту и за двадцать – тысячи потерянных зрителей. Фора Софт строит платформы видеостриминга, OTT/интернет-ТВ, живых событий, e-learning и телемедицины с 2005 года – 250+ выпущенных проектов для 400+ клиентов за 20+ лет, – поэтому мы относимся к слою эксплуатации как к ключевой платформенной инженерии: дашборды золотых сигналов, выстроенные под живые события, алертинг по симптомам и по burn rate, пейджащий по тому, что чувствует зритель, а не по внутреннему шуму, телеметрия по сессиям на базе CMCD/CMSD и структура SLO и on-call, удерживающая команду в строю. Мы вендор-нейтральны; мы подключаем наблюдаемость и алертинг к платформе, а не к одному продукту мониторинга. Цель – платформа, которая видит беду рано и будит нужного человека только тогда, когда должна.

Главное

  • Дашборд информирует, алерт прерывает. Пейджите только по срочным, действенным, видимым зрителю симптомам.
  • Следите за четырьмя золотыми сигналами: латентность, трафик (конкурентность), ошибки как доля, насыщение.
  • Алертите по симптомам, что чувствует зритель, а не по причинам – и берите перцентили, не средние.
  • SLO задаёт бюджет ошибок; алертинг по burn rate пейджит на быстрый расход, тикетит на медленный.
  • SLA «99,9%» допускает ~43 минуты простоя в месяц и возвращает кредит счёта, а не потерянную выручку.
  • Ротации on-call, уровни severity, runbook и безвиновные postmortem заставляют пейджер работать.

Что почитать дальше

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.