Флапающие алерты
Представьте, что у вас есть алерт на кол-во ошибок — если 5хх ответов больше 1%, то алерт "загорается"
Обычно это выглядит так:
1. Берется окошко, скажем 3 мин
2. Считается доля 5хх: sum(requests[status = 5xx]) / sum(requests)
3. Алармим, если доля > 0.01
Так мы по сути считаем усредненную долю ошибок за последние 3 минуты
---
Что может поломать такую схему? Короткие всплески, когда процент 5хх пару секунд очень высокий. Это может происходить по разным причинам: случайные/локальные сбои, переключения мастера, накатка миграции etc
Поскольку мы считаем avg по окошку, такие короткие всплески скорее всего будут триггерить алерт, пока наблюдаемое окошко "не перескачет" этот всплеск
Пример: 100 rps; окошко 3 минуты; пятисотили 2 секунды
доля 5хх = (100rps * 2 сек) / (100rps * 180сек) = 1/90 > 0.01 — алерт загорелся
Хотите ли вы, чтобы алерт загорался в такой ситуации? depends
Далее рассмотрим случай, когда не хотим
---
Из банальных советов:
1. Увеличить окошко (3min -> 5min)
Шире окно, выше шанс, что пик размажется. Но тут идет трейдофф с риском появлений false-negative, когда пропустим реальную проблему
2. Увеличить трешхолд (0.01 -> 0.03)
Примерно та же история, что с окошком
Из менее банальных:
3. Пересмотреть алерт (avg -> percentile)
Например, так
1) Берем такую метрику requests[status = 5xx] / requests — это график доли пятисоток
2) Берем p75 от нее — получаем число. Это число означает, что 25% времени окошка доля пятисоток была выше, чем это число
3) Поджигаем если p75 > threshold
То есть мы ушли от "среднее кол-во пятисоток в окне нарушает трешхолд" до ">25% времени нарушался трешхолд пятисоток"
Частные случаи:
p0 (минимум) — трешхолд нарушался 100% времени (в каждой точке окна)
p50 (медиана) — трешхолд нарушался половину времени
p100 (максимум) — трешхолд нарушился буквально в одной точке
4. Добавить сглаживание
Вместо того, чтобы смотреть на исходную метрику requests[status = 5xx] / sum(requests), можно добавить сглаживание: например, каждая точка будет показывать не текущее значение, а усредненное за предыдущую минуту (moving avg). Либо какой-то перцентиль за предыдущую минуту
Де-факто этот способ часто взаимозаменяем с предыдущим
---
Зачастую эмпирический тюнинг алерта приводит к использованию комбинации этих способов
Post #177
9.59K
- 👍 55
- 🔥 9
- 💅 1