Алертинг
Алертинг — це те, як стан системи перетворюється на рішення когось розбудити. Алерт — це прохання перервати людину, і саме так його варто читати щоразу, коли пишеш новий. Більшість систем алертингу провалюються не тому, що щось пропускають, а тому, що кричать «вовки», доки черговий інженер не перестане їм вірити, — і це збій проєктування, а не проблема дисципліни. На цій сторінці — які умови заслуговують переривання, чому алерт на симптом кращий за алерт на причину, як SLO й швидкість спалювання перетворюють «сайт наче гальмує» на число, заради якого варто прокинутися, і що має існувати ще до того, як виклик буде надіслано.
- Алерт — це
- Переривання
- Алертувати на
- Симптоми, не причини
- Кожен виклик потребує
- Дії, зараз
Алерт — це прохання перервати людину
Алертинг зазвичай подають як технічне питання: яка метрика, який поріг, яке вікно. Куди краще розуміти його як питання етичне й організаційне, бо алерт насправді забирає людину з її вечора, сну чи зосередженості й наводить на проблему. Ця рамка дає перевірку, якої не дасть жодна суперечка про пороги: якщо це спрацює о третій ночі, чи є щось, що людина мусить зробити негайно, і чи знає вона що саме? Якщо хоч одна половина — «ні», це не виклик.
Нижній лівий квадрант вартий довгого погляду, бо саме там більшість систем алертингу справді ламається. Умова виглядає терміновою, когось будять — і зробити немає чого: диск заповнюється на вузлі, який платформа однаково замінить; залежність деградувала, і її власники вже цим займаються; алерт спрацював на сплеску, що розсмоктався сам, поки ніхто не встиг відкрити ноутбук. Інстинкт — сказати інженерові бути терплячішим. Правильна реакція — змінити алерт, бо кожен виклик, на який не можна було зреагувати, є маленьким внеском у переконання, що виклики можна ігнорувати, — і це переконання знімають з рахунку під час справжнього.
Алертуйте на симптоми, а не на причини
Природний спосіб побудувати алертинг — перелічити те, що може зламатися, і повісити алерт на кожне: CPU понад 90%, памʼять понад 85%, диск понад 80%, реплік менше трьох, черга довша за тисячу. Кожне окремо виправдане, а набір є пасткою — з двох причин, що тягнуть у різні боки. Він постійно спрацьовує на умовах, які нікому не шкодять (пакетна задача законно тримає CPU десять хвилин), — і зовсім пропускає той збій, якого ніхто не перелічив, а саме він вас і кладе.
Алертинг на симптомах перевертає це. Замість питання, що може зламатися, спитайте, що відчуває користувач, коли вже зламалося, — і алертуйте на це: запити падають, запити повільні, черга не розбирається, замовлення не оформлюються. Таких умов на сервіс — жменя, вони покривають причини, яких ніхто не передбачив, і кожна з них за побудовою є тим, на що користувач поскаржився б, — і питання «чи варто когось будити» відповідає само собі.
| Алерт на причину | Алерт на симптом | Чому друге краще |
|---|---|---|
| CPU понад 90% пʼять хвилин | p99 затримки понад ціль | Високий CPU, що нікому не шкодить, — норма; повільні відповіді — ніколи. |
| Реплік менше трьох | Частка помилок понад ціль | Дві репліки, що чудово обслуговують, — не інцидент. Запити, що падають, — так, за будь-якої кількості реплік. |
| Зʼєднань до бази близько до ліміту | Запити падають або тайм-аутяться | Повний пул важить, лише якщо він відвертає користувачів, — а симптом міряє це прямо. |
| Конкретна задача впала | Результат застарів або відсутній | Задача може впасти й успішно повторитися; наслідки має саме те, що дані спізнюються. |
SLO і швидкість спалювання: алерт на число, що має сенс
Алертингу на симптомах потрібна ціль, а обрана на дотик вона дає або алерт, який не спрацьовує ніколи, або такий, що спрацьовує щовівторка. Три терміни роблять ціль явною, і їх варто означити точно — бо вживають їх усюди приблизно.
- SLI — це вимір: частка запитів, що завершилися успішно за 300 мс, числом від 0 до 1. Це відношення добрих подій до дійсних, а не середнє.
- SLO — це ціль для цього виміру у вікні: 99,9% запитів за останні 28 днів. Це обіцянка, яку ви обираєте, а не та, яку дає система.
- Бюджет помилок — це те, що SLO дозволяє: 0,1% від 28 днів — це близько 40 хвилин збоїв, які ви маєте право витратити, і витрачати їх нормально, а не є проявом браку дисципліни.
Саме бюджет робить алертинг притомним, бо перетворює питання без відповіді («чи 0,3% помилок — це погано?») на арифметичне («з такою швидкістю скільки лишилося до кінця місячного бюджету?»). Це відношення і є швидкістю спалювання: горіння на 1× витрачає бюджет рівно за вікно, а на 14,4× місячний бюджет зникає за два дні. Алертуйте на швидкість спалювання, а не на сиру частку помилок, — і той самий алерт покриє і раптову аварію, і повільну кровотечу, яку фіксований поріг завжди пропускає.
Швидке горіння — це виклик
- Приблизно 14× від темпу бюджету, обчислено на короткому вікні — скажімо, за годину.
- З таким темпом бюджет на 28 днів зникає приблизно за два дні: само не розсмокчеться.
- Підтверджуйте другим, коротшим вікном, щоб сплеск, який уже спинився, нікого не будив.
- Це той алерт, що йде на телефон уночі, і таких має бути дуже мало.
Повільне горіння — це тікет
- Приблизно 3× від темпу бюджету на довгому вікні — шість годин або доба.
- Справжня деградація, що дає дні, а не хвилини, — тобто час полагодити її завидна.
- Ловить повільну кровотечу, якої фіксований поріг не бачить: 0,5% помилок окремо виглядають нормально.
- Іде в чергу, яку переглядають у робочі години, і ніколи на телефон.
Втома від алертів — це збій проєктування
Коли черговий інженер перестає реагувати швидко, звичний діагноз — що людина ставиться несерйозно. Чесний діагноз — що система її цього навчила. Людина, яку двадцять разів на тиждень переривають умови, що виявилися нічим, засвоює — правильно й неминуче, — що наступне переривання теж, мабуть, ніщо. Це не витренувати; можна лише прибрати ті переривання, що це спричинили.
Механіки, що тримають обсяг стерпним, невидовищні — і вони працюють:
- Групуйте повʼязані алерти в одне сповіщення. Залежність, що впала, має дати один виклик, а не по одному на кожен сервіс, що від неї залежить.
- Придушуйте нижні, поки горить верхній, — щоб до людини дійшла причина, а не сорок наслідків.
- Вимагайте тривалості, а не миті. Умова, що має протриматися пʼять хвилин, відсіює сплески, які минають самі.
- Давайте кожному викликові посилання на ранбук із першими трьома речами для перевірки. Алерт без нього — це загадка для людини, що напівспить.
- Щотижня переглядайте алерти, що спрацювали, і видаляйте або знижуйте ті, на які ніхто не зреагував. Ця зустріч і є всією дисципліною.
- Стежте за кількістю викликів на зміну як за числом, яке має власника. Якщо його не міряти, воно лише зростає.
Що має існувати ще до того, як виклик надіслано
Алерт — це лише перша секунда процесу, і те, що йде після нього, вирішує, чи вартувало переривання хоч чогось. Чотири складові мають існувати до того, як алерт увімкнуть, — а не після першого інциденту, що доведе їхню відсутність.
Названий власник
Чергування, а не список розсилки. Алерт, скерований у групу, де кожен припускає, що взяв хтось інший, — це алерт, якого не взяв ніхто.
Ранбук
Із посиланням із самого алерту: що це означає, перші три перевірки, як помʼякшити і до кого ескалювати. Пишеться до алерту, завидна.
Ескалація з таймером
Якщо ніхто не квітує за кілька хвилин, воно автоматично йде до наступного. Телефони бувають без звуку, і люди пропускають; система має це припускати.
Розбір після
Безобвинувальний, зосереджений на тому, що уможливило збій і що зробило його важковидимим. Його результат — зміни, зокрема й до алерту, що його знайшов.
Один організаційний пункт варто сказати прямо, бо саме він вирішує, чи переживе все це зіткнення з завантаженим кварталом. Чергування має бути оплаченим і обмеженим: ротація достатньо велика, щоб ніхто не ніс її постійно; години, визнані роботою; і дозвіл лагодити причини викликів у звичайний час. Де цього немає, система алертингу деградує в передбачуваному напрямку: пороги послаблюють, алерти замовчують, і моніторинг тихо перестає описувати систему. Цей результат — не провал інженерів у ротації, і його не полагодити ще одним алертом.
Антипатерни, які варто назвати
- Алерт на кожну метрику ресурсу на кожному хості: стіна викликів під час будь-якого звичайного сплеску навантаження.
- Пороги, обрані один раз і ніколи не переглянуті: вони описують систему, у якої відтоді втричі зріс трафік.
- Алерти в чат-канал, який усі замовчали, — це видалення з додатковими кроками.
- Виклик без ранбука, вручений найновішому в ротації о другій ночі.
- Моніторинг, що працює всередині того, що моніторить: аварія забирає з собою й алертинг.
- Дашборд, який вважають моніторингом: він працює, лише поки хтось випадково на нього дивиться.
Коли це застосовувати
Застосовуйте, коли
- Сервіс, де збій має наслідки протягом хвилин і людина справді може ці хвилини скоротити.
- Умови, виражені як видимі користувачеві симптоми: запити падають, відповіді повільні, робота не завершується.
- Дедлайни, які справді передбачувані: сертифікат, що спливає, диск, що заповниться до ранку.
- Будь-яка система з ротацією чергувань, ранбуком на алерт і щотижневим розбором того, що справді спрацювало.
Уникайте, коли
- Умови, на які сьогодні вночі ніхто не може вплинути: їм місце в тікеті, хай яким тривожним є число.
- Метрики ресурсів як виклики, коли зайнятість ресурсу сама по собі нікому не шкодить.
- Ціль, обрана тому, що вражає, а не з того, що потрібно користувачам і що профінансує бізнес.
- Будь-який алерт без власника, ранбука й шляху ескалації: саме через їхню відсутність виклики лишаються без відповіді.
Було корисно?
Поділіться з тим, хто працює над тією ж задачею.