Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → USE-метод: метрики ресурсов

USE-метод на практике: utilization, saturation, errors для ресурсов

Как применять USE-метод Брендана Грегга: утилизация, насыщенность и ошибки для CPU, памяти, диска и сети, отличие от золотых сигналов и поиск узких мест.

Прямой ответ

USE-метод (Utilization, Saturation, Errors) — методика Брендана Грегга для диагностики ресурсов (USE method — «для каждого ресурса проверить три вещи» — USE method — метрики — «систематический поиск узких мест» — USE method), зачем: найти узкое место в ресурсах (USE method — «какой ресурс saturated» — USE method — метрики — «CPU/память/диск/сеть — что тормозит» — USE method — ёмкость); три метрики (USE method): (1) Utilization (утилизация) (USE method — «сколько времени ресурс занят» — USE method — метрики — «CPU 80% — 80% времени занят» — USE method — метрики — «высокая утилизация — ресурс близок к пределу» — USE method); (2) Saturation (насыщенность) (USE method — «очередь/перегрузка сверх ёмкости» — USE method — метрики — «run queue/swap/IO wait» — USE method — метрики — «saturation — ресурс не справляется» — USE method — «CPU 100% + run queue растёт» — USE method); (3) Errors (ошибки) (USE method — «ошибки ресурса» — USE method — метрики — «IO errors/network errors/OOM» — USE method — метрики — «ошибки ресурса — деградация» — USE method); ресурсы (USE method — «для каждого ресурса — три метрики» — USE method): (1) CPU (USE method — utilization (USE method — «% времени CPU занят» — USE method — метрики — saturation (USE method — «run queue/load average» — USE method — метрики — errors (USE method — «редко, но бывают» — USE method); (2) Память (USE method — utilization (USE method — «% памяти занято» — USE method — метрики — saturation (USE method — «swap/OOM» — USE method — метрики — errors (USE method — «OOM kills/ECC errors» — USE method — метрики); (3) Диск (USE method — utilization (USE method — «% времени диск занят» — USE method — метрики — saturation (USE method — «IO queue/await» — USE method — метрики — errors (USE method — «IO errors» — USE method — метрики); (4) Сеть (USE method — utilization (USE method — «% пропускной способности» — USE method — метрики — saturation (USE method — «drops/backlog» — USE method — метрики — errors (USE method — «network errors/drops» — USE method — сети); USE vs golden signals (golden signals): USE — для ресурсов (USE method — «CPU/память/диск/сеть» — USE method — метрики — «внутренний взгляд» — USE method), golden signals — для сервисов (golden signals — «латентность/трафик/ошибки/насыщенность сервиса» — golden signals — «внешний взгляд» — golden signals — «USE — почему, golden signals — что» — USE method — golden signals — дополняют (USE method — «оба нужны» — golden signals); когда USE: поиск узкого места (USE method — «сервис тормозит — какой ресурс» — USE method — метрики — «saturation ресурса» — USE method), диагностика (USE method — «систематический обход ресурсов» — USE method — linux — «не гадать, а проверить» — USE method), capacity planning (USE method — «утилизация ресурсов» — USE method — ёмкость — «какой ресурс кончится первым» — USE method); антипаттерны: только utilization (USE method — «CPU 50% — но run queue растёт» — USE method — метрики — saturation обязателен — USE method), без saturation (USE method — «утилизация ок, но очередь растёт» — USE method — метрики — saturation — ключевой — USE method), USE без golden signals (USE method — «ресурсы ок, но сервис тормозит» — USE method — golden signals — оба нужны — golden signals).

Практика: USE-метод в Prometheus

CPU (метрики: utilization (метрики — 1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) (метрики — USE method — saturation (метрики — node_load1 (метрики — «load average / число ядер» — метрики — USE method); Память (метрики: utilization (метрики — 1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) (метрики — USE method — saturation (метрики — rate(node_vmstat_pswapd_out[5m]) (метрики — «swap out» — метрики — USE method); Диск (метрики: utilization (метрики — rate(node_disk_io_time_seconds_total[5m]) (метрики — USE method — saturation (метрики — rate(node_disk_io_time_weighted_seconds_total[5m]) (метрики — «IO queue» — метрики — USE method); Сеть (метрики: utilization (метрики — rate(node_network_receive_bytes_total[5m]) (метрики — USE method — saturation (метрики — rate(node_network_receive_drop_total[5m]) (метрики — «drops» — метрики — сети); Дашборд (Grafana: USE-панели (Grafana — «по каждому ресурсу — utilization/saturation/errors» — Grafana — USE method — «систематический обход» — Grafana).

Практический сценарий: поиск узкого места через USE

Контекст: сервис тормозит (метрики — p99 вырос (метрики — golden signals — «латентность выросла» — golden signals — incident), боль: непонятно, какой ресурс (USE method — «CPU? память? диск?» — USE method — метрики — «гадание» — USE method); решение — USE-метод: (1) CPU (метрики — utilization (метрики — 1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) (метрики — «CPU 60%» — метрики — saturation (метрики — node_load1 (метрики — «load 2 на 4 ядра — ок» — метрики — USE method — CPU не узкое место (USE method); (2) Память (метрики — utilization (метрики — «70%» — метрики — saturation (метрики — «swap 0» — метрики — USE method — память ок (USE method); (3) Диск (метрики — utilization (метрики — rate(node_disk_io_time_seconds_total[5m]) (метрики — «95%» — метрики — saturation (метрики — rate(node_disk_io_time_weighted_seconds_total[5m]) (метрики — «IO queue растёт» — метрики — USE method — диск — узкое место (USE method — «диск saturated» — USE method); (4) Сеть (метрики — utilization (метрики — «30%» — метрики — saturation (метрики — «drops 0» — метрики — сети — сеть ок (USE method); (5) Вывод (USE method — диск saturated (USE method — «IO — узкое место» — USE method — метрики — профилирование (pprof — «что грузит диск» — pprof — flamegraph — «IO в коде» — flamegraph); (6) Фикс (USE method — кэш (redis — «кэш — меньше IO» — redis — индексы (postgres — «индексы — меньше seq scan» — postgres — USE method); результат: узкое место найдено (USE method — диск saturated (USE method — «систематический обход» — USE method — метрики — не гадание (USE method — «проверили все ресурсы» — USE method — фикс (USE method — кэш/индексы (redis — postgres — USE method); вывод: USE-метод решили задачу (узкое место найдено систематически — USE method — ADR — «только utilization» — антипаттерн — метрики — saturation обязателен — USE method — техдолг).

FAQ

Что такое USE-метод и зачем он нужен? USE-метод (USE method — Utilization (USE method — «утилизация» — USE method), Saturation (USE method — «насыщенность» — USE method), Errors (USE method — «ошибки» — USE method) — методика Брендана Грегга (USE method — «для каждого ресурса — три метрики» — USE method — метрики); зачем: систематический поиск узких мест (USE method — «не гадать, а проверить» — USE method — метрики — «какой ресурс saturated» — USE method — linux — «обход всех ресурсов» — USE method); ресурсы: CPU/память/диск/сеть (USE method — «для каждого — utilization/saturation/errors» — USE method — метрики); «гадание вместо USE» — антипаттерн (несистематично — USE method — USE — чеклист — USE method — ADR — техдолг).

Чем USE-метод отличается от золотых сигналов и как их сочетать? USE (USE method — для ресурсов (USE method — «CPU/память/диск/сеть» — USE method — метрики — «внутренний взгляд» — USE method — «почему тормозит» — USE method); Golden signals (golden signals — для сервисов (golden signals — «латентность/трафик/ошибки/насыщенность сервиса» — golden signals — «внешний взгляд» — golden signals — «что тормозит» — golden signals); отличие: USE — ресурсы (USE method — «железо» — USE method), golden signals — сервисы (golden signals — «приложение» — golden signals); как сочетать: golden signals — «сервис тормозит» (golden signals — «p99 вырос» — golden signals), USE — «почему» (USE method — «диск saturated» — USE method — «saturation в golden signals — мост к USE» — golden signals — USE method); «USE вместо golden signals» — нет (разные уровни — USE method — golden signals — оба нужны — ADR — техдолг).

Почему saturation важнее utilization и как его измерять? Saturation (USE method — «очередь/перегрузка сверх ёмкости» — USE method — метрики — «ресурс не справляется» — USE method — «run queue/swap/IO wait» — USE method); почему важнее: utilization может быть ок, но saturation расти (USE method — «CPU 50%, но run queue растёт» — USE method — метрики — «saturation — опережающий сигнал» — USE method — «утилизация ок, но очередь» — USE method); как измерять: CPU (метрики — node_load1 (метрики — «load average» — метрики — USE method), память (метрики — swap (метрики — «swap out» — метрики — USE method), диск (метрики — IO queue (метрики — «await/queue» — метрики — USE method), сеть (метрики — drops (метрики — «drops/backlog» — метрики — сети); «только utilization» — антипаттерн (saturation скрыт — USE method — saturation обязателен — метрики — ADR — техдолг).

Как применять USE-метод на практике для диагностики? Практика (USE method — систематический обход (USE method — «для каждого ресурса — три метрики» — USE method — метрики — «CPU → память → диск → сеть» — USE method); шаги: (1) список ресурсов (USE method — «CPU/память/диск/сеть» — USE method — метрики), (2) для каждого — utilization/saturation/errors (USE method — «три метрики» — USE method — метрики), (3) найти saturated (USE method — «какой ресурс saturated» — USE method — метрики), (4) профилирование (pprof — «что грузит ресурс» — pprof — flamegraph — «узкое место в коде» — flamegraph), (5) фикс (USE method — «кэш/индексы/масштабирование» — USE method — ёмкость); инструменты: Prometheus (метрики — node_exporter (метрики — «метрики ресурсов» — метрики — USE method), Grafana (Grafana — «USE-дашборд» — Grafana — linux); «гадание вместо USE» — антипаттерн (несистематично — USE method — чеклист — USE method — ADR — техдолг).

Источники: Brendan Gregg (USE method), Prometheus node_exporter, Grafana docs — ссылки в шапке.