InfraGuard

Серверы (временные ряды нагрузки)

Нагрузка, ЦП и память по каждому серверу в виде кольцевых индикаторов, а также графики временных рядов на экране Инфраструктура ▸ Серверы.

Обзор — что делает этот экран

Инфраструктура ▸ Серверы (/infra/servers) показывает среднюю нагрузку · ЦП · память для каждого зарегистрированного узла-сервера во временном разрезе. Если экран Состояние фиксирует «состояние каждого узла прямо сейчас» с помощью живых проверок, то экран «Серверы» сосредоточен на том, «как нагрузка менялась за последние часы или дни». Это переработанная реализация monitoring/part из stats-design (load_average · cpu_usage · memory_usage).

По одной карточке на узел:

Метрики берутся из унаследованной таблицы server_status (только чтение). Построитель ServerMetricService сужает запрос до недавнего окна seq (избегая медленного полного сканирования) и применяет 20-секундный кэш. Сетка карточек поддерживает перетаскивание для изменения порядка + masonry и обновляется автоматически по опросу каждые 30 секунд.

Таблицу server_status наполняет Node-коллектор run_report.js, работающий вне Laravel с циклом примерно в 5 минут. Поэтому разрешение временной оси составляет около 5 минут, а экран обновляется опросом (а не push-уведомлениями в реальном времени / Reverb).


Когда использовать

Живой мониторинг сессий (с индикаторами служб nginx/php/mysql) находится на экране Состояние, графики байтов/пакетов сетевого ввода-вывода — в разделе Трафик, а состояние дисков и RAID — в разделе Хранилище и RAID.


Компоновка

Верхняя панель KPI

Рассчитывается методом ServerMetricService::kpi().

KPI Значение
Серверы Общее число узлов, присутствующих в окне
В сети Узлы, сообщившие loadavg в течение последних 2 циклов сбора
Не в сети Всего − в сети
Макс. нагрузка Узел с наибольшей текущей 1-минутной нагрузкой + алиас
Макс. ЦП Узел с наибольшим текущим CPU% + алиас
Макс. память Узел с наибольшим текущим процентом памяти + алиас

Переключатель range

Выбирает окно отображения (число точек окна seq). Выбор сохраняется в localStorage (infr:range:infra-servers) и сохраняется между визитами.

range точек seq ≈ фактическое окно (цикл 5 мин)
1h 12 ~1 час
6h 72 ~6 часов
24h 288 ~24 часа (по умолчанию)
3d 864 ~3 дня

range преобразуется в «последние N циклов сбора» (а не в абсолютный интервал времени). При цикле в 5 минут 24h ≈ 288 точкам. Узел, который сообщает данные нечасто, при том же range может показать более короткое фактическое окно — подпись окна внизу сообщает реальный интервал в виде 24h/6h/45m/2d.

Карточка узла

┌──────────────────────────────────────────────┐
│ label · alias · IP           online / last Nm │   ← шапка (подпись обогащена из infr_instance)
│  ( Load )   ( CPU )   ( MEM )                    │   ← 3 кольцевых индикатора (текущее значение)
│  ▁▂▅▇▅▃  спарклайн (SVG polyline)               │
│  peak · disk 42% · net out 1,234   [Подробнее] │   ← подвал
└──────────────────────────────────────────────┘

Рамка карточки и индикаторы окрашиваются тоном порога; общая серьёзность карточки определяется худшей из трёх метрик.

Метрика good warn crit
Load (1 мин) < 8 ≥ 8 ≥ 16
CPU % < 70 ≥ 70 ≥ 90
MEM % < 85 ≥ 85 ≥ 95

Кольцо Load нормировано так, что оно заполняется при нагрузке 8 (LOAD_FULL=8) — в соответствии с порогом warn. На машине с большим числом ядер нагрузка 8 не обязательно опасна, поэтому всегда считывайте также абсолютное значение из числа в центре кольца.

Развёрнутые подробности (ECharts + статистика)

Нажатие [Подробнее] увеличивает карточку по вертикали; masonry автоматически перестраивает раскладку под изменившуюся высоту.


Как пользоваться

  1. Откройте /infra/servers → карточки узлов выстраиваются по возрастанию алиаса.
  2. Выберите окно наблюдения переключателем range (1h/6h/24h/3d). Запрос выполняется заново немедленно, независимо от опроса.
  3. Откройте график временного ряда и таблицу статистики для узла кнопкой [Подробнее].
  4. Наведите курсор на график, чтобы по перекрестью считать значения CPU/MEM/Load в конкретный момент времени.
  5. Перетащите карточки, чтобы поднять наверх узлы, за которыми следите чаще всего, — порядок сохраняется в localStorage (infr:order:infra-servers).
  6. Используйте кнопку полноэкранного режима в шапке, чтобы скрыть верхнюю навигацию и работать в режиме дашборда.

Экран автоматически обновляется каждые 30 секунд опросом /infra/servers/live (никаких действий не требуется). На этом экране нет действий записи или управления — он исключительно наблюдательный.

Опрашивающий фронтенд решает, нужно ли обновление, по дешёвому токену изменений rev (= последний seq в server_status). Пока не придёт новый цикл сбора, экран остаётся неизменным — это не «зависание», просто новых снимков ещё нет.


Источники данных

Источник — унаследованная таблица server_status (БД MAIN, схема «ключ-значение» через part, только чтение). Она напрямую интерпретирует соглашение о хранении, принятое в run_report.js.

part Формат значения Значение Использование в рядах
loadavg "1m 5m 15m" через пробел (например, "0.50 0.42 0.38") Средние значения нагрузки Ряд и кольцо используют только 1-минутную нагрузку; в подвале показаны также 5/15-минутные
top "NN%" (например, "3.6%") Пользовательская загрузка ЦП Ряд/кольцо ЦП
free "NN%" Использование памяти = round(used/total×100) Ряд/кольцо MEM
df-data / df- / df-home JSON {p,u,a} Процент диска (p) · занято (u) · размер (a) Последний значок диска (приоритет df-data → df- → df-home)
traffic-out число Дельта исходящих сетевых пакетов Ряд/подвал net

Дисциплина запросов и формирования данных:

Регистрация и учётные данные коллектора run_report.js, наполняющего server_status, управляются в разделе Администрирование ▸ Коллекторы.


Доступ

Схема уровней: demo=1 · staff=5 · admin=10 (см. Уровни RBAC).


Диагностика и частые вопросы

Я вижу только «Нет метрик серверов.» В server_status нет свежего снимка. Проверьте, что коллектор run_report.js запущен и зарегистрирован в разделе Коллекторы. Также проверьте подключение к унаследованной БД (MAIN).

Узел отображается как не в сети. Это означает, что за последние 2 цикла сбора не было сообщено ни одного loadavg. Проверьте состояние выполнения run_report на этом узле, его часы (расхождение) и сеть. Относительная подпись last_seen подскажет, когда он сообщал данные в последний раз.

На карточке показан алиас (например, sol), а не понятное имя. Этот алиас не зарегистрирован в разделе Инстансы (infr_instance). Зарегистрируйте инстанс, и его name станет подписью, а в качестве IP будут показаны ip_public/ip_private.

Значок диска пуст. Этот узел не сообщил ни одного из df-data/df-/df-home в формате JSON {p,u,a}. Для подробного использования дисков и состояния RAID воспользуйтесь разделом Хранилище и RAID.

Кольцо Load всегда выглядит заполненным. Кольцо Load нормировано с потолком в нагрузку 8. На серверах с большим числом ядер нагрузка 8 может быть нормой, поэтому судите по абсолютному значению в центре кольца. Не делайте вывод об опасности только по порогам цветового тона (warn 8 / crit 16).

Опрос идёт каждые 30 с, но ничего не меняется. Либо (1) новый цикл сбора (~5 мин) ещё не наступил, либо (2) вы находитесь внутри окна 20-секундного кэша. Подтвердите реальные обновления через stamp, подпись окна и rev (последний seq).

Я задал range = 3d, но окно выглядит коротким. range означает «последние N циклов», поэтому у узла, который собирает данные редко, реальный интервал времени короткий. Нижняя подпись окна показывает фактический интервал (45m/6h/2d). Верхний предел числа точек — 1000.


Смежные материалы

서버 — 부하·CPU·메모리 시계열
서버 — 부하·CPU·메모리 시계열
카드를 펼친 결합 선그래프
카드를 펼친 결합 선그래프