InfraGuard

服务概览 —— 精选实时看板

一个精选的实时服务看板:运维人员挑选服务(Web、数据库、会话、代理、Docker)放入优先级卡片,并通过可用性仪表盘与实时时间序列进行观察。

概览 —— 这个页面做什么

服务概览 是「服务」顶级菜单的第一个页面(/service),是一块 面向在运行服务(守护进程)的精选实时运维看板。运维人员亲自挑选关注的服务,并把它们排列成 优先级卡片。每张卡片按种类展示一组不同的实时指标,优先级最靠前的 web/db/session 卡片驱动 可用性仪表盘,底部条带则绘制所选卡片的 实时时间序列。

主要特点:

该看板不是演示用的虚构环境 —— 全部为真实数据。指标来源是采集器已经写入的表:infr_web_metric、infr_db_metric、infr_redis_metric 以及 infr_service(目录)。

何时使用

页面布局

顶部 KPI 条

由 realKpi() 计算的全公司汇总(随 30 秒轮询刷新):

KPI 含义 来源
Web 流量 全部已注册 Web 服务的总 RPS + 带宽 WebMetricService::kpi(dashboard())
DB 负载 全部 access=database 采集器最新存储 QPS 之和 + 总连接数 DbCollectorService::latest()
Web 可用率 24 小时可用性 WebProbeService::availabilityOrPassive()(优先主动探测)
延迟 探测响应平均值(ms) 同上
事件 最近 7 天内新建的事件 InfrIncident created_at ≥ now-7d

Web 可用率与延迟优先采用 主动合成探测。仅凭被动的 vts 流量计数器,会把无流量的中断、藏在 3xx 之后的 5xx 以及计数器重置误判,因此看板使用 WebProbeService 的真实 HTTP 探测结果。如果探测器尚未运行(没有覆盖),则回退到被动方式(web24h)。

服务可用性仪表盘

按优先级取 第一张 web/db/session 卡片 绘制(若这三种卡片一张都不在看板上,则显示占位提示)。

卡片种类 仪表形状 中心数值 配色规则
web 4 段响应码环形图 REQ(当前 RPS) 2xx=good · 3xx=info · 4xx=warn · 5xx=crit
database 连接饱和度(conn_pct)弧形 QPS ≥90 crit · ≥70 warn · 其余为 good
session 命中率弧形 OPS ≥90 good · ≥70 warn · 其余为 crit

服务看板(卡片网格)

所选服务按 优先级顺序 排布为卡片。每张卡片按种类展示不同的 KPI 组合:

种类 默认守护进程 表头(别名) 主要 KPI
web nginx 代表域名 延迟 · RPS · 打开的会话(活动连接数) · 24 小时累计请求 · 错误率
database mysql/mariadb/postgres/mongo 采集器别名 QPS · 席位(已用/上限) · 饱和度 · 运行中 · 锁(平均行锁 ms) · slow 累计 · 等待
session redis 节点别名 OPS · 命中率 · 客户端(当前会话数) · 键数 · 饱和度(内存使用率 %)
proxy software_key/proxy 实例别名 依赖(+N) · 延迟 · 监听端口
docker software_key/docker 实例别名 依赖(+N) · 延迟 · 监听端口

实时服务(底部时间序列)

具有序列的所选卡片(web/db/session)会在 2 列网格 中绘制为 SVG 面积+折线迷你图。每张图都带有 标尺(纵向网格线以及起始/中间/结束的 HH:MM 标签)以辨识时间轴。顶部的 范围切换(1h · 6h · 1d) 用于切换观察窗口(默认 1h)。

表头控件

使用方法

1) 挑选服务

  1. 点击看板表头的 [选择服务] / [添加服务] 打开挑选模态框。
  2. 模态框会把所有可用服务 按种类 分组(web → database → session → proxy → docker)。
  3. 逐项开启(✓)/关闭服务。选择会立刻反映到看板上,并保存到 localStorage。

首次访问的默认值 = 自动选中 web、database、session 各自的第一项,使可用性仪表盘开箱即用。如果不需要,可在模态框中取消选择。

2) 调整优先级

3) 更改时间窗口

// POST /service/series 请求示例
{ "keys": ["web:12", "db:db@blue", "session:blue"], "range": "6h" }

卡片 key 规约:

web:{infr_web_service.id}
db:{infr_collector.key}      例: db@blue
session:{node_alias}         例: blue
proxy:{infr_service.id}
docker:{infr_service.id}

4) 全屏态势看板

数据来源

卡片种类 构建器 实际的表
web WebMetricService::dashboard() + WebProbeService::overlayStatus() infr_web_metric(vts 计数器) · infr_web_check(主动探测) · infr_web_service
database InfrCollector(access=database) + DbCollectorService::latest()/series() infr_db_metric · infr_collector
session RedisMetricService::dashboard() infr_redis_metric · infr_instance
proxy/docker InfrService(kind IN proxy,container) infr_service · infr_instance
KPI 事件 —— infr_incident(最近 7 天)

时间序列来源:

状态标记

标记 含义
up 健康
degraded 降级
down 中断(真实的连接/探测失败)
pending 等待(判定暂缓,例如数据延迟)

避免 DB 卡片误报红色 —— 在 economy 采集模式下,如果采集短暂滞后、最后一个样本已超过 5 分钟,statusOf 会因 stale 而返回 down。数据库其实一切正常,你却会看到红色告警 —— 因此看板会 把 stale 导致的 down 降级为 pending,只有真实的连接失败(ok=false)才保留 down。此外,仅当有用户正在查看看板时,若最后一个样本已超过 45 秒,会通过 ensureFresh(45) 即时采样一次(若调度器已在采集,则为不建连接的 no-op);该采样器会在 finally 块中清理连接以防泄漏。

访问权限

localStorage 键:

infr:svcboard:sel:v1        所选服务 key 的数组(顺序=优先级)
infr:svcboard:h:v1          看板/实时高度滑块的值
infr:range:service-overview 底部时间序列的 range(1h/6h/1d)

故障排查与 FAQ

看板是空的。 请用表头的 [添加服务] 放置你关注的服务。如果根本没有可用服务(采集器尚未写入数据),挑选模态框中的分组看起来可能是空的 —— 请先确认 采集器 的注册情况与采集链路。

可用性仪表盘不出现。 仪表盘需要按优先级排在第一位的 web/db/session 卡片。如果你只挑选了 proxy/docker,就只会看到占位提示。请至少把一张 web/db/session 卡片放到靠前的位置。

底部时间序列是空的。 只有 web/db/session 卡片有序列,proxy/docker 不在其列。此外,若所选窗口(1h/6h/1d)内源表没有数据,图表同样为空。

DB 卡片是红色,但数据库一切正常。 数据延迟会被降级为 pending(灰色/等待)。若仍然是 down,那就是真实的连接失败 —— 请检查 数据库 页面,以及 采集器 下 access=database 采集器的状态。

刷新后卡片仍在/在另一台 PC 上显示不同。 选择与顺序由浏览器 localStorage 拥有,而非服务端的账号设置。它们在每个浏览器与设备上彼此独立。

我想要 5 分钟的窗口。 当前实现提供 1h · 6h · 1d 三种窗口(默认 1h)。若需更短的观察粒度,请使用 服务器 或 数据库 等专用页面。

相关内容

서비스 개요 — 큐레이션 라이브 보드
서비스 개요 — 큐레이션 라이브 보드