InfraGuard

Tráfico (E/S de red)

Expone el rendimiento de bytes y paquetes de entrada/salida por servidor a partir de server_traffic en forma de gráficos de líneas de ECharts: datos que la consola heredada recogía pero nunca mostró.

Descripción general — qué hace

Infraestructura ▸ Conectividad y tráfico ▸ Tráfico (/infra/traffic/net) es una consola de solo lectura que representa el rendimiento de E/S de red de cada servidor (bytes y paquetes de entrada y de salida) como un gráfico de líneas de ECharts por cada tarjeta de servidor.

El origen es la tabla heredada server_traffic (≈1,6 M de filas, conexión legacy_glory), alimentada por el recolector heredado check_tx.js. Esa tabla acumula, por ventana, los bytes y paquetes delta de cada servidor × dirección (entrada/salida), pero la antigua interfaz de stats-design solo llegó a mostrar el traffic-out de server_status (un único delta de paquetes de salida). Esta pantalla es la primera en exponer el conjunto de datos completo de entrada/salida × bytes/paquetes.

Las tres pantallas hermanas (Conexiones de puerto, Conexiones IP, Tráfico) comparten el mismo TrafficController y SessionQueryService, pero solo la pestaña Tráfico lee la serie temporal de rendimiento de server_traffic en lugar de la instantánea de sesiones (traffic_session_ct). Por eso utiliza una ventana de rango (1h/6h/24h) en vez del temporizador (1/5/60 min) que usan las otras dos.

Cuándo usarla

Disposición

Cabecera (barra superior)

Elemento Descripción
Conmutador de métrica bytes | packets: recolorea los mismos datos en escala de bytes o de paquetes (sin ida y vuelta al servidor)
Conmutador de rango 1h (60) | 6h (360) | 24h (1440): ventana de visualización en minutos. La selección se conserva en localStorage
Marca de tiempo Hora de la última ventana (MAX de server_traffic + desplazamiento de la zona horaria de visualización)
Actualizar Nueva consulta inmediata (independiente del sondeo automático de 30 s)
Pantalla completa Oculta la navegación superior y amplía la rejilla de tarjetas (ESC para salir)

Franja de KPI (flujo: entrada · salida · paquetes · relación → punto caliente → frescura)

KPI Significado
Total de entrada Suma de los bytes de entrada del último punto de cada servidor
Total de salida Suma de los bytes de salida del último punto de cada servidor
Total de paquetes Suma de los últimos paquetes (entrada+salida) de cada servidor · unidad /window (no acumulado)
Ent.:Sal. out ÷ in (1 decimal) mostrado como 1 : x. — cuando la entrada es 0
Mayor consumo Servidor con más bytes de salida en el último punto (punto caliente)
Servidores activos Número de servidores cuyo último punto cae dentro de los 15 min previos al fin de la ventana / total. Avisa (amarillo) cuando es inferior al total

Leyenda de color de escala + escala del eje Y

El color de la línea y del área codifica la magnitud del valor (visualMap por tramos de ECharts). Cuando un valor cruza un umbral cambia el color, de modo que la escala se percibe a través del color.

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

Tarjetas de tráfico por servidor

Cada tarjeta = un servidor. La cabecera muestra el nombre de host más los bytes de entrada/salida actuales; el cuerpo es un gráfico de líneas <metric-chart> de 200 px (ECharts, importación dinámica).

Cómo usarla

  1. Elija un rango: 1h para perseguir picos, 24h para patrones diarios.
  2. Cambie de métrica: bytes para la carga de ancho de banda, packets para el carácter de las conexiones/PPS.
  3. Eje logarítmico: en servidores con gran disparidad entre entrada y salida (nodos web donde la salida ≫ la entrada), log mantiene visibles ambas curvas.
  4. Reordene las tarjetas: arrastre arriba los servidores que le interesen (se guarda en el navegador).
  5. Persiga un punto caliente: cuando detecte el servidor Top del KPI o una curva crit (roja), salte a Conexiones de puerto / Conexiones IP para investigar qué IP o puerto lo provocó.

La información emergente muestra una cabecera HH:MM más el valor de cada serie (entrada/salida). Incluso en tarjetas estrechas, las etiquetas del eje temporal se ocultan automáticamente para evitar solapamientos (hideOverlap).

Orígenes de datos

server_traffic (legacy_glory · solo lectura)

Columna Finalidad
server_name, server_index Identidad del servidor
time_window_start Inicio de la ventana de recolección (separadas ~300 s = 5 min)
direction inbound | outbound
delta_bytes_count Delta de bytes de esta ventana
delta_packet_count Delta de paquetes de esta ventana

La consulta de origen (TrafficRepository::serverTraffic) usa vinculación de parámetros para explorar solo una ventana estrecha (sin valores fijos en el código ni interpolación de cadenas):

SELECT server_name, server_index, time_window_start, direction,
       delta_packet_count, delta_bytes_count
FROM   server_traffic
WHERE  time_window_start >= :since   -- (última ventana) − rango
ORDER  BY time_window_start
LIMIT  6000;

Ancla = MAX(time_window_start) (MAX indexado → económico). since = anchor − range minutes.

Normalización por cubos de un minuto (corrección del diente de sierra)

El recolector check_tx.js marca la entrada y la salida con llamadas new Date() independientes dentro de su bucle, de modo que, dentro del mismo ciclo de 5 minutos, los valores de time_window_start difieren en 1–2 segundos (por ejemplo, :02 la entrada y :03 la salida). Agrupar por la marca de tiempo exacta captura solo una de las dos direcciones en cada instante y deja la otra a 0, lo que produce un gráfico en diente de sierra.

Corrección: SessionQueryService::reshapeNet redondea las marcas de tiempo a un cubo de un minuto (round(ts/60)*60), de forma que entrada y salida se fusionan en un único punto. El intervalo de la ventana (300 s) es mucho mayor que el cubo (60 s), por lo que ventanas contiguas nunca colisionan.

Desplazamiento de la zona horaria de visualización

Como la hora de almacenamiento de la base de datos heredada puede diferir de la hora de visualización (se ha observado un desfase de ~9 h), los valores se desplazan mediante OpsPolicy::trafficTzOffsetSec() solo para la visualización (marca de tiempo, eje temporal, marcas de tiempo de las series). Los límites SQL (min/max) NO se desplazan: la consulta usa la hora heredada en bruto.

Caché · sondeo

Acceso

Resolución de problemas y preguntas frecuentes

P. Solo veo «No hay muestras de tráfico». Significa que server_traffic no tiene ninguna ventana reciente. Compruebe que el recolector check_tx.js esté en ejecución y que la conexión legacy_glory sea válida. Cuando latestTrafficWindow() (MAX) es nulo, las tarjetas quedan vacías y los KPI marcan 0.

P. Un servidor solo dibuja un muñón corto a la izquierda. Es intencionado. El eje temporal está fijado a una ventana compartida, de modo que un servidor con recolección retrasada se dibuja con honestidad hasta su última observación como un muñón a la izquierda. También se cuenta como inactivo en el KPI Active servers (su último punto queda fuera de los 15 min previos al fin de la ventana).

P. La curva de una dirección parece un diente de sierra. La normalización por cubos de un minuto corrige la mayoría de los casos, pero si las propias ventanas de recolección son irregulares puede quedar algo de diente de sierra residual. Cambiar al eje log lo suaviza.

P. ¿Los valores son acumulados? No. delta_* = incremento por ventana (~5 min). Por eso el KPI Total packets está etiquetado como /window. No son contadores acumulados.

P. Las horas están desfasadas varias horas. La zona horaria de visualización se corrige mediante el ajuste traffic_tz_offset de OpsPolicy (véase Política de operaciones).

Relacionado

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