USE-метод для capacity planning
Мониторинг · Capacity
Проблема
«У нас всё тормозит, нужно больше серверов» — классика без диагностики. Команда масштабирует по CPU, а упирается на самом деле в IOPS диска или в блокировки БД. Деньги ушли в vCPU, проблема осталась.
Решение
USE-метод Брендана Грегга: для каждого ресурса (CPU, память, диск, сеть, БД-соединения) проверить три метрики:
| Что спрашивать | Пример для CPU | |
|---|---|---|
| Utilization | Сколько % времени ресурс занят | rate(node_cpu_seconds_total{mode!="idle"}[5m]) |
| Saturation | Есть ли очередь к ресурсу | node_load1 vs количество ядер |
| Errors | Ошибки этого ресурса | CPU throttling, OOM-kills, retries |
Если все три в норме — ресурс не виноват, ищи дальше. Если один «горит» — вот он, bottleneck.
Пример
Чек-лист для узла Kubernetes. Все три сигнала по 5 ресурсам = 15 запросов, покрывают 95% случаев «сервис тупит».
CPU
# Utilization
1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
# Saturation
node_load1 / count by (instance) (node_cpu_seconds_total{mode="idle"})
# Errors
rate(node_vmstat_oom_kill[5m])
Память
# Utilization
1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes
# Saturation
rate(node_vmstat_pgmajfault[5m])
# Errors
rate(node_vmstat_oom_kill[5m])
Диск
# Utilization (busy time)
rate(node_disk_io_time_seconds_total[5m])
# Saturation (queue)
node_disk_io_time_weighted_seconds_total
# Errors
rate(node_disk_io_errors_total[5m])
Вывод на одной Grafana-странице — «USE-панель»: 5 строк × 3 колонки. При инциденте смотришь туда первой, до всех бизнес-дашбордов.
Когда применять
- Перед тем как масштабировать: сначала USE, потом
+2 ноды. - При расследовании инцидента «медленно работает» — как первый экран.
- Как part of post-incident review: какой ресурс был перегружен.
Источник
- Brendan Gregg — The USE Method
- binhnguyennus/awesome-scalability — раздел Performance
- dastergon/awesome-sre
Как применить у себя
- Для одного сервиса выписать 5 ключевых ресурсов (CPU, mem, disk, net, app-specific как DB-conns).
- Для каждого — три PromQL-запроса (U/S/E).
- Собрать в одну Grafana-дашборд-страницу «USE —
». - После того как первая перегрузка локализуется по USE-панели за минуту — статус Изучено.