Налаштування SLO-based Alerting (алерти на основі SLO)

Черговий тоне в однотипних повідомленнях і пропускає реальну деградацію. Ми налаштовуємо SLO-based alerting під ключ: прив’язуємо оповіщення до бюджету помилок сервісу, прибираємо хибний шум і даємо команді зрозумілі регламенти реагування. Час до виявлення збою скорочується в рази, а чергування перестають виснажувати людей.
Часті запитання

SLO-based alerting: чому черговий глушить сповіщення

Алерти на порогах спрацьовують, коли окрема метрика перетнула задану межу — завантаження вузла, довжина черги, частка помилок за хвилину.

Сам по собі такий сигнал не говорить, чи страждають користувачі: сплеск повторів у черзі гаситься повторними спробами, а коротке зростання частки помилок сервіс переживає непомітно.

За добу черговий отримує сотні сповіщень, з яких дій потребують одиниці. Він перестає читати канал — важливе губиться в потоці, а справжня деградація сервісу розвивається повільно й не перетинає жоден поріг різко.

Виявляють її за скаргами користувачів, а не за моніторингом: пропущений інцидент розтягує час реакції з хвилин до годин.

SLO-based alerting змінює точку відліку: тригером стає не поріг метрики, а витрата бюджету помилок. Сервіс піднімає чергового лише тоді, коли поточна деградація загрожує вичерпати допустиму частку неуспішних запитів за вікно спостереження.

Працює це через швидкість вигорання бюджету на кількох вікнах одразу. Коротке вікно ловить різкий сплеск і піднімає чергового негайно, довге — стійке повільне сповзання, яке порогові алерти пропускають.

Обидва сигнали вказують на один інцидент замість десятків сповіщень за суміжними метриками, і алерт приходить із контекстом: який SLO під загрозою, за яке вікно і як швидко витрачається бюджет.

Шум чергувань падає в рази, але головне — змінюється клас відмов, які команда ловить до користувачів. Нижче розбираємо, як такий контур налаштовується і що для нього потрібно з боку сервісу.

Що дає бюджет помилок: менше шуму, швидша реакція

Бюджет помилок переводить надійність сервісу зі спору про смаки у вимірювану величину.

На вікно спостереження задано допустимий обсяг відмов, і правило спрацьовує не на будь-яке відхилення метрики, а на швидкість вигорання цього запасу: черговий отримує сторінку тоді, коли за поточного темпу бюджет буде вичерпано до кінця вікна.

Багатовіконні правила зі швидким і повільним вікном розводять два різні сценарії. Коротке вікно ловить різке падіння за хвилини, довге — повільний дрейф, який за поодинокими вимірами не видно.

Поріг прив'язаний до питання «чи встигнемо вичерпати бюджет», тому статичні межі, які роками давали хибні спрацювання, відходять.

Що змінюється вимірювано:

  • частка сповіщень, за якими інженер починає роботу, замість «подивився і закрив як відомий шум»;
  • час до виявлення деградації — від перших аномальних відповідей до сторінки черговому;
  • класи відмов, які перестають доходити до користувача: часткова деградація стає видною раніше за повну відмову.

Правила будуються на симптомах — частці успішних запитів, затримці, доступності ключових сценаріїв, — а не на причинах на кшталт завантаження окремого вузла.

Цей розворот описано в Google SRE: сторінка приходить на те, що помітив користувач, а не на те, що просто підозріло виглядає на графіку.

Порівняння підходів до оповіщення про деградацію

Вибір механізму оповіщення визначає не кількість сповіщень, а те, чи помітить команда деградацію раніше за користувачів.

Статичні пороги дешеві й передбачувані, але нічого не знають про сезонність і поступове зростання навантаження; аномальні моделі ловлять незнайоме, натомість шумлять на кожному релізі та сплеску попиту; цілі з надійності з бюджетом помилок прив'язують сигнал до користувацького досвіду, але потребують порахованого бюджету й повного покриття телеметрією.

Підхід Коли доречний Де ламається
Статичні пороги Ресурси з рівним профілем: вільне місце, довжина черги, абсолютне число помилок Поріг доводиться переглядати за кожного зростання трафіку, а повільна деградація межі не перетинає взагалі
Аномальні оповіщення за історичними даними Сезонне навантаження та збої, які заздалегідь не описати правилом Період навчання з деградацією закріплює збій як норму, а релізи дають потік хибних спрацювань
Багатовіконні політики на бюджеті помилок Користувацькі сервіси з явною ціллю з надійності Потрібні порахований бюджет, розмітка швидкого й повільного вікна та покриття метриками — інакше сповіщення втрачають сенс
Комбінація шарів Зріла система, де критичні шляхи відокремлені від допоміжних Потребує ревізії наявних правил і ролі відповідального за перегляд цілей

На практиці підходи не конкурують, а розходяться за шарами: багатовіконні політики закривають критичні користувацькі шляхи, статичні пороги — ресурси та фонові черги, аномалії залишаються допоміжним шаром для того, що ще не описано ціллю. Поєднання дає менше сповіщень за більшої чутливості.

Впровадження: від інвентаризації сервісів до графіка чергувань

Порядок етапів невипадковий: якщо почати з порогів, не розібравшись, які сервіси критичні та як вони пов'язані між собою, алерти почнуть спрацьовувати на все підряд — і черговий швидко перестане на них дивитися. Ідемо від інвентаризації до передачі черговій команді, на кожному кроці є перевірюваний результат.

  1. Інвентаризація сервісів. Список сервісів із власниками, критичністю та тим, що вважаємо помилкою з погляду користувача, а не за внутрішньою метрикою.
  2. Карта залежностей. Позначаємо спільні вузли: деградація одного з них дає лавину алертів, і п'ять команд прокидаються через одну причину.
  3. Узгодження цілей. З власником сервісу фіксуємо цільовий рівень доступності, правило розрахунку та бюджет помилок на ковзному вікні.
  4. Налаштування політик. Короткий спалах помилок і стійка деградація — різні сигнали, тому швидкий і повільний поріг рахуються окремо, з різною швидкістю сповіщення.
  5. Маршрути ескалації. Визначаємо, хто отримує сповіщення першим, за скільки підключається друга лінія і де ведеться історія інциденту.
  6. Навчальний інцидент. Навмисно деградуємо сервіс і перевіряємо ланцюжок: алерт дійшов, черговий знайшов причину за інструкцією, ескалація спрацювала. Заміряємо час до реакції.
  7. Передача черговій команді. Регламент чергувань, інструкції з розбору, розбір хибних спрацювань і підстроювання порогів у перші тижні.

Що передаємо на руки: конфігурації, дашборди, регламенти

Передаємо не набір правил у чужій панелі, а конфігурацію під версійним контролем: опис сервісів, політики та маршрути лежать поруч із кодом, зміна проходить рев'ю і відкочується однією правкою.

Такий набір залишається робочим без нас — новий сервіс підключається за інструкцією, пороги правляться усвідомлено, а не «хтось колись налаштував».

  • Опис сервісів — перелік критичних сервісів із власниками, залежностями та цільовими рівнями доступності й затримки, з яких рахуються бюджети помилок.
  • Політики оповіщення — які правила спрацьовують, за якої швидкості витрати бюджету, вікна очікування та глушіння, щоб чергового не піднімав одиничний збій.
  • Маршрути ескалації — хто перший у черзі, за скільки хвилин підключається друга лінія і в який момент автоматика поступається ручному рішенню.
  • Дашборди чергування — залишок бюджету, поточна витрата, активні алерти та останні зміни; відкриваються одним посиланням з будь-якого пристрою.
  • Регламент розбору інцидентів — порядок фіксації, критерії заморозки релізів за вигорілого бюджету та формат запису причин, щоб висновки не губилися.
  • Документація та передача знань — де зберігаються конфігурації, як підключити новий сервіс, як узгодити зміну порогу і хто відповідає за ревізію.

Окремим пунктом іде процедура періодичної ревізії: раз на квартал звіряємо, які правила жодного разу не спрацьовували, а які шумлять, і прибираємо зайве. Без цього будь-який набір алертів заростає і втрачає довіру чергових.

Кейс: як SLO-політики знизили шум чергувань

Чергування трималося на статичних порогах: окреме правило під кожну метрику, значення виставлені під час запуску сервісу і не переглядалися за зростання навантаження. За зміну приходило 60–80 сповіщень, і більшість описувала короткі сплески, яких користувачі не помічали. Черговий учився фільтрувати потік на око і разом із шумом відкидав сигнали про справжню деградацію.

Що змінили

Пороги за окремими метриками замінили бюджетом помилок: сповіщення піднімається не за разового відхилення, а коли швидкість його вигорання стійко вища за норму — і підтверджується одразу в двох вікнах, короткому й довгому.

Коротке ловить різкий збій, довге — повільне накопичення помилок, яке одиничний поріг пропускав. Метрики надійності збирали в Prometheus, правила описувалися як код і проходили перевірку разом зі змінами сервісу.

Перемикання політик ішло поетапно. Кілька тижнів система працювала в тіньовому режимі: нові сповіщення йшли в окремий канал і звірялися з ручними розборами інцидентів.

Потім сервіси переводили по одному, залишаючи попередні пороги страховкою, доки точність нових правил не підтверджувалася на живих збоях.

Показник До Після
Сповіщень за зміну чергування 60–80 8–12
Частка хибних спрацювань близько 70 % менше 10 %
Виявлення деградації 15–40 хвилин 2–5 хвилин
Розбір одного сповіщення 20–30 хвилин 5–7 хвилин

Потік сповіщень скоротився без зростання часу реакції: строгість тепер задає цільовий рівень надійності, а не суб'єктивно вибраний поріг.

Чим бюджет помилок відрізняється від порогового алерту?

Пороговий алерт стежить за миттєвим значенням метрики: частка невдалих запитів перевалила за заданий відсоток протягом хвилини — спрацювало. Бюджет помилок рахує інакше: він накопичує частку невдалих запитів за вікно спостереження і порівнює її з допустимим залишком.

Різниця принципова — поріг ловить будь-який сплеск, навіть якщо користувачі його не помітили, а бюджет відображає реальну втрату надійності за період.

Механіка проста. За цілі доступності 99,9% бюджет помилок — це 0,1% від усіх запитів за вікно спостереження, зазвичай ковзне вікно в кілька тижнів. Поки частка невдалих запитів усередині цієї квоти, сервіс у нормі й будити чергового нема за чим. Щойно квоту вибрано, алерт означає, що подальша робота йде за рахунок надійності, яку ми обіцяли.

Далі вмикається вигорання бюджету — швидкість, з якою витрачається залишок. Її рахують у двох вікнах одночасно: коротке показує швидкий сплеск і піднімає чергового, довге показує повільну деградацію, якої не видно на миттєвому графіку.

Так збій, що з'їв помітну частину квоти за годину, не проходить повз, а плавне погіршення за два тижні фіксується окремо.

Практичний ефект: алертів стає в рази менше, а кожен, що залишився, справді потребує втручання.

Логіку описано в Site Reliability Engineering і обкатано на сервісах із високим навантаженням — ми переносимо її на інфраструктуру замовника, добираючи вікна спостереження й пороги вигорання під його трафік і режим чергувань.

Технічні сумніви: вікна, агрегація, хибний шум

Вікно агрегації, рідкісні сервіси та розмита відповідальність ламають SLO-based alerting частіше, ніж сама математика розрахунку. Нижче — короткі відповіді на питання, які інженери ставлять до старту впровадження.

Як вибирати вікно агрегації?

Одним вікном не обійтися: коротке ловить швидку деградацію, але шумить на сплесках, довге стійке до випадкових збоїв, але запізнюється.

Тому беремо пару вікон різної довжини та різного порогу витрати бюджету помилок — швидкий сигнал іде черговому, повільний заводить задачу на розбір. Пороги добираємо за історичними даними сервісу, а не «на око».

Що робити з рідкісними сервісами?

На низькому трафіку частка помилок стрибає від одиничного збою, і оповіщення за відсотком дає хибні спрацювання. Для таких сервісів рахуємо абсолютне число неуспішних операцій або фіксуємо повну відсутність успішних подій — це стійкий сигнал. Ціль з надійності для них формулюємо окремо, з ширшим вікном спостереження.

Хто володіє ціллю з надійності?

Власник цілі — команда сервісу, а не інфраструктурна група: вона змінює код і відповідає за поведінку системи. Сам опис цілі та правила оповіщень зберігаємо поруч із кодом у репозиторії, зміни проходять рев'ю. Так поріг не «їде» мовчки, а історія правок пояснює, чому він саме такий.

Як відділити реальний збій від шуму?

Оповіщення піднімаємо на вичерпання бюджету помилок, а не на кожну окрему відмову: одиничні збої та перезапуски не будять чергового. Спрацювання групуємо за сервісом і клієнтським шляхом, дублі згортаємо.

Якщо сигнал приходить частіше, ніж команда встигає реагувати, — поріг переглядаємо, інакше черговий звикає ігнорувати оповіщення.

Обговоримо задачу: з чого почнемо і що знадобиться

Почати розмову варто з обговорення задачі в конкретних термінах: які сервіси тримають виручку, що для них вважається нормою і де зараз проходить межа між «працює» і «горить».

Нам достатньо вихідних даних по сервісах і поточного стану моніторингу, щоб повернутися з оцінкою та планом робіт, а не із загальними обіцянками.

Що чекаємо від вас у першому повідомленні:

  • Перелік сервісів із роллю кожного в продукті та зазначенням власника на боці замовника — за ним ми зрозуміємо, які шляхи обробки запитів узагалі має сенс покривати цільовими рівнями.
  • Поточні цілі з доступності та часу відгуку, якщо вони вже сформульовані, або скарги на якість: «сторінка відкривається повільно», «вночі зникає канал» — цього вистачить для першого контуру.
  • Де зараз збираються метрики та логи, чи є історичний ряд за кілька місяців. Без історії не можна порахувати, як часто ціль порушувалася до впровадження, і потім не буде з чим порівняти.
  • Наявні дашборди, правила алертів і канали сповіщень: месенджер, пошта, черговий телефон, система обліку інцидентів.
  • Доступи для читання до систем моніторингу та до опису інфраструктури — зазвичай їх видають на час розбору і можна відкликати будь-якої миті.
  • Порядок чергувань і ескалації: хто приймає алерт уночі і за якою ознакою розуміє, що час будити другого інженера.
  • Розбір останніх інцидентів: що спрацьовувало хибно, що пропустили зовсім і скільки часу йшло на підтвердження проблеми вручну.

Після цього повернемося зі строком впровадження за етапами, складом робіт і тим, кого потрібно залучити з вашого боку на кожному кроці. Опишіть задачу — і ми дамо оцінку та план.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139