InfraGuard

Трафик (сетевой ввод-вывод)

Показывает по каждому серверу пропускную способность входящих и исходящих байтов и пакетов из server_traffic в виде линейных графиков ECharts — данные, которые устаревшая консоль собирала, но никогда не отображала.

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

Инфраструктура ▸ Подключения и трафик ▸ Трафик (/infra/traffic/net) — это консоль только для чтения, которая строит пропускную способность сетевого ввода-вывода каждого сервера (входящие и исходящие байты и пакеты) в виде одного линейного графика ECharts на карточку сервера.

Источник — устаревшая таблица server_traffic (≈1,6 млн строк, соединение legacy_glory), которую заполняет устаревший коллектор check_tx.js. Эта таблица накапливает за каждое окно дельты байтов и пакетов для каждой пары «сервер × направление» (входящее/исходящее), однако прежний интерфейс stats-design показывал лишь traffic-out из server_status (единственную дельту исходящих пакетов). Этот экран первым выводит на поверхность полный набор данных вход/выход × байты/пакеты.

Три родственных экрана (Соединения по портам, IP-соединения, Трафик) используют один и тот же TrafficController и SessionQueryService, но только вкладка «Трафик» читает временной ряд пропускной способности из server_traffic, а не моментальный снимок сессий (traffic_session_ct). Именно поэтому она использует окно диапазона (1h/6h/24h), а не таймер (1/5/60 мин), которым пользуются два других экрана.

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

Компоновка

Шапка (верхняя панель)

Элемент Описание
Переключатель метрики bytes | packets — перекрашивает те же данные в шкале байтов или пакетов (без обращения к серверу)
Переключатель диапазона 1h (60) | 6h (360) | 24h (1440) — окно отображения в минутах. Выбор сохраняется в localStorage
Отметка времени Время последнего окна (MAX по server_traffic + сдвиг часового пояса отображения)
Обновить Немедленный повторный запрос (независимо от автоматического опроса раз в 30 с)
Во весь экран Скрывает верхнюю навигацию и увеличивает сетку карточек (выход по ESC)

Полоса KPI (порядок: вход · выход · пакеты · соотношение → горячая точка → свежесть)

KPI Значение
Всего входящего Сумма входящих байтов в последней точке каждого сервера
Всего исходящего Сумма исходящих байтов в последней точке каждого сервера
Всего пакетов Сумма последних пакетов (вход+выход) каждого сервера · единица /window (не накопительно)
Вх.:Исх. out ÷ in (один знак после запятой) в виде 1 : x. —, если вход равен 0
Наибольший объём Сервер с наибольшим числом исходящих байтов в последней точке (горячая точка)
Активные серверы Число серверов, последняя точка которых попадает в 15 мин до конца окна / total. Предупреждает (жёлтым), если значение меньше общего числа

Цветовая легенда шкалы + шкала оси Y

Цвет линии и заливки кодирует порядок величины значения (visualMap ECharts, кусочный режим). Когда значение пересекает порог, цвет меняется, поэтому масштаб ощущается через цвет.

tone bytes packets
info < 1MB < 1K
good 1–10MB 1–10K
warn 10–100MB 10–100K
crit > 100MB > 100K

Карточки трафика серверов

Каждая карточка — один сервер. В заголовке указано имя хоста и текущие входящие/исходящие байты; тело — линейный график <metric-chart> высотой 200 px (ECharts, динамический импорт).

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

  1. Выберите диапазон — 1h, чтобы гоняться за всплесками, 24h — для суточных закономерностей.
  2. Переключите метрику — bytes для нагрузки на полосу пропускания, packets для характера соединений и PPS.
  3. Логарифмическая ось — для серверов с большим перекосом между входом и выходом (веб-узлы, где выход ≫ входа) режим log оставляет обе кривые видимыми.
  4. Переупорядочьте карточки — перетащите интересующие серверы наверх (сохраняется в браузере).
  5. Отследите горячую точку — заметив сервер Top в KPI или кривую crit (красную), перейдите к Соединениям по портам / IP-соединениям, чтобы выяснить, какой IP или порт это вызвал.

Всплывающая подсказка показывает заголовок HH:MM и значение каждого ряда (вход/выход). Даже на узких карточках подписи оси времени автоматически скрываются, чтобы не накладываться друг на друга (hideOverlap).

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

server_traffic (legacy_glory · только чтение)

Столбец Назначение
server_name, server_index Идентификация сервера
time_window_start Начало окна сбора (интервал ~300 с = 5 мин)
direction inbound | outbound
delta_bytes_count Дельта байтов за это окно
delta_packet_count Дельта пакетов за это окно

Исходный запрос (TrafficRepository::serverTraffic) использует привязку параметров и сканирует только узкое окно (без жёстко зашитых значений и без подстановки строк):

SELECT server_name, server_index, time_window_start, direction,
       delta_packet_count, delta_bytes_count
FROM   server_traffic
WHERE  time_window_start >= :since   -- (последнее окно) − диапазон
ORDER  BY time_window_start
LIMIT  6000;

Опорная точка = MAX(time_window_start) (MAX по индексу → дёшево). since = anchor − range minutes.

Нормализация по минутным корзинам (устранение «пилы»)

Коллектор check_tx.js проставляет отметки времени для входящего и исходящего направлений отдельными вызовами new Date() внутри своего цикла, поэтому в пределах одного и того же пятиминутного цикла значения time_window_start расходятся на 1–2 секунды (например, :02 у входящего и :03 у исходящего). Группировка по точной отметке времени захватывает в каждый момент лишь одно из двух направлений, оставляя другое на нуле, — и получается график в виде пилы.

Исправление: SessionQueryService::reshapeNet округляет отметки времени до минутной корзины (round(ts/60)*60), благодаря чему вход и выход сливаются в одну точку. Интервал окна (300 с) намного больше корзины (60 с), поэтому соседние окна никогда не пересекаются.

Сдвиг часового пояса отображения

Поскольку время хранения в устаревшей БД может отличаться от времени отображения (наблюдался перекос около 9 ч), значения сдвигаются функцией OpsPolicy::trafficTzOffsetSec() только для отображения (отметка времени, ось времени, отметки времени рядов). Границы SQL (min/max) НЕ сдвигаются — запрос использует исходное устаревшее время.

Кэш · опрос

Доступ

Устранение неполадок и частые вопросы

В. Я вижу только «Нет выборок трафика». Это значит, что в server_traffic нет свежих окон. Проверьте, работает ли коллектор check_tx.js и действительно ли доступно соединение legacy_glory. Если latestTrafficWindow() (MAX) возвращает null, карточки пусты, а KPI показывают 0.

В. Сервер рисует лишь короткий отрезок слева. Так и задумано. Ось времени закреплена за общим окном, поэтому сервер с отстающим сбором честно отрисовывается до последнего наблюдения в виде короткого отрезка слева. Кроме того, он считается неактивным в KPI Active servers (его последняя точка выходит за пределы 15 мин до конца окна).

В. Кривая одного из направлений похожа на пилу. Нормализация по минутным корзинам устраняет большинство случаев, но если сами окна сбора нерегулярны, остаточная «пила» может сохраниться. Переключение на ось log сглаживает её.

В. Значения накопительные? Нет. delta_* = приращение за окно (~5 мин). Именно поэтому KPI Total packets подписан как /window. Это не накопительные счётчики.

В. Время расходится на несколько часов. Часовой пояс отображения корректируется настройкой traffic_tz_offset в OpsPolicy (см. Операционную политику).

Связанные разделы

네트워크 I/O 추이
네트워크 I/O 추이