InfraGuard

流量(网络 I/O)

把 server_traffic 中各服务器的入站/出站字节与数据包吞吐以 ECharts 折线图呈现 —— 这些数据旧版控制台一直在采集,却从未展示过。

概述 — 这个页面做什么

基础设施 ▸ 连接与流量 ▸ 流量(/infra/traffic/net)是一个只读控制台,它把每台服务器的 网络 I/O 吞吐(入站/出站的字节数与数据包数)绘制成折线图,每张服务器卡片一张 ECharts 图表。

数据来源是旧版的 server_traffic 表(约 160 万行,legacy_glory 连接),由旧版采集器 check_tx.js 写入。该表按服务器 × 方向(入站/出站)累积每个窗口的 增量字节数与数据包数,但旧的 stats-design 界面始终只展示 server_status 的 traffic-out(单一的出站数据包增量)。本页面是第一个把 入/出 × 字节/数据包 完整数据集呈现出来的界面。

三个姊妹页面(端口连接、IP 连接、流量)共用同一个 TrafficController 与 SessionQueryService,但只有流量标签页读取的是 server_traffic 的吞吐时间序列,而不是会话快照(traffic_session_ct)。这也是它使用 区间(1h/6h/24h)窗口,而不是另外两个页面所用计时器(1/5/60 分钟)的原因。

何时使用

页面布局

页首(顶部栏)

元素 说明
指标切换 bytes | packets —— 同一份数据按字节/数据包刻度重新着色(无需请求服务器)
区间切换 1h(60)| 6h(360)| 24h(1440)—— 显示窗口,单位为分钟。所选值保存到 localStorage
时间戳 最新窗口时间(server_traffic 的 MAX + 显示时区偏移)
刷新 立即重新取数(独立于 30 秒自动轮询)
全屏 隐藏顶部导航并放大卡片网格(按 ESC 退出)

KPI 条(流程:入 · 出 · 数据包 · 比率 → 热点 → 新鲜度)

KPI 含义
入站合计 各服务器 最新数据点 入站字节数之和
出站合计 各服务器最新数据点出站字节数之和
数据包合计 各服务器最后一个(入+出)数据包数之和 · 单位 /window(不是累计值)
入:出 out ÷ in(保留 1 位小数),以 1 : x 的形式显示。入站为 0 时显示 —
流量最高者 最新出站字节数最大的服务器(热点)
活跃服务器 最后一个数据点落在窗口末端 15 分钟以内的服务器数量 / total。低于总数时给出警告(黄色)

刻度配色图例 + Y 轴刻度

线条/面积的颜色编码的是数值的 量级(ECharts visualMap piecewise)。数值跨过阈值时颜色随之改变,因此可以凭颜色感知量级。

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

服务器流量卡片

每张卡片对应一台服务器。表头显示主机名以及当前的入站/出站字节数;主体是一张 200px 的 <metric-chart>(ECharts,动态导入)折线图。

使用方法

  1. 选择区间 —— 追查尖峰用 1h,观察日常规律用 24h。
  2. 切换指标 —— 看带宽负载用 bytes,看连接/PPS 特征用 packets。
  3. 对数轴 —— 对于入出差距很大的服务器(出站 ≫ 入站的 Web 节点),log 能让两条曲线都保持可见。
  4. 重排卡片 —— 把关注的服务器拖到最前(保存在浏览器中)。
  5. 追查热点 —— 当发现 KPI Top 服务器或 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() 打时间戳,因此在同一个 5 分钟周期内 time_window_start 的取值会相差 1–2 秒(例如入站 :02、出站 :03)。按精确时间戳分组时,每个时刻只能捕获入/出中的一个,另一个则保持为 0 —— 于是产生 锯齿状图表。

修正:SessionQueryService::reshapeNet 会把时间戳取整到 分钟桶(round(ts/60)*60),使入站与出站合并为同一个数据点。窗口间隔(300 秒)远大于分桶粒度(60 秒),因此相邻窗口绝不会撞在一起。

显示时区偏移

由于旧版数据库的存储时间可能与显示时间不一致(实测约有 9 小时偏差),数值会经由 OpsPolicy::trafficTzOffsetSec() 做 仅用于显示 的偏移(时间戳、时间轴、系列时间戳)。SQL 边界(min/max)不做偏移 —— 查询使用旧版的原始时间。

缓存 · 轮询

访问权限

疑难排查与常见问题

Q. 我只看到“暂无流量采样”。 这说明 server_traffic 中没有近期窗口。请检查采集器 check_tx.js 是否在运行,以及 legacy_glory 连接是否有效。当 latestTrafficWindow()(MAX)为 null 时,卡片为空且 KPI 显示 0。

Q. 某台服务器只在左侧画出很短的一段。 这是设计使然。时间轴被固定到共享窗口,因此采集滞后的服务器会如实地绘制到它最后一次观测为止,呈现为 左侧的一小段。它同时会在 Active servers KPI 中被计为不活跃(最后一个数据点落在窗口末端 15 分钟之外)。

Q. 某一个方向的曲线看起来像锯齿。 分钟分桶归一化能修正大多数情况,但如果采集窗口本身就不规则,仍可能残留一些锯齿。切换到 log 轴可以使其平滑。

Q. 这些数值是累计值吗? 不是。delta_* = 每个窗口(约 5 分钟)的增量。这也是 Total packets KPI 标注 /window 的原因。它们不是累计计数器。

Q. 时间差了好几个小时。 显示时区通过 OpsPolicy 的 traffic_tz_offset 设置进行校正(参见 运维策略)。

相关内容

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