第二章:监控体系架构设计

好,咱们直接进入正题。监控体系怎么搭?我个人的习惯是——先画分层,再定数据流,最后串告警链路。这三件事搞定了,整个架子就立起来了。

2.1 分层监控架构

为什么要分层?说白了,AI系统太复杂了。你想想看,底层是GPU集群,中间是模型推理,上层是业务API。任何一个环节出问题,表现可能都一样——用户说“系统卡了”。但根因在哪?不分层你根本查不到。

我一般把监控分成三层:

基础设施层

这一层管的是“硬家伙”。GPU利用率、显存占用、网络延迟、磁盘IO。嗯,这里要注意——GPU监控和传统CPU监控完全是两码事。GPU有显存带宽、SM利用率、温度墙这些指标,传统监控工具根本看不懂。

核心指标清单(基础设施层):

  • GPU利用率(不是100%就好,要看是否稳定)
  • 显存使用率(超过90%要警惕OOM)
  • GPU温度(超过85°C会降频)
  • NVLink带宽(多卡通信的关键)
  • 网络延迟(模型分布式推理时尤其重要)

我的经验:曾经有个项目,GPU利用率一直上不去,排查了三天才发现是PCIe带宽被其他进程抢了。从那以后,我强制要求基础设施层必须监控PCIe链路状态。

模型层

这一层是AI监控的核心。模型在跑什么?推理延迟多少?精度有没有掉?这些才是业务方真正关心的。

我个人习惯把模型层监控分成两个维度:

  • 性能维度:P50/P95/P99延迟、吞吐量(QPS)、批处理大小
  • 质量维度:输出分布漂移、置信度变化、异常输入比例

举个例子,你部署了一个文本分类模型。某天突然发现所有输出都偏向“正面”类别。这时候模型层的监控应该能立刻告诉你——输入分布变了,还是模型参数出了问题?

避坑指南:我曾经遇到过模型层监控把“推理延迟”和“网络传输延迟”混在一起统计。结果告警天天响,排查下来发现是网络抖动,跟模型半毛钱关系没有。所以,模型层的延迟监控一定要在模型调用前后打点,别把网络开销算进去。

应用层

这一层面向最终用户。API响应时间、错误率、调用量。说白了,用户不关心你的模型有多牛,他只关心“点一下按钮,结果多久出来”。

应用层监控要回答三个问题:

  1. 用户请求是否成功?(HTTP状态码、业务错误码)
  2. 响应时间是否可接受?(SLA达标率)
  3. 用户体验是否一致?(同一条请求,不同时间结果是否稳定)

2.2 数据流设计

数据怎么从底层流到上层?这是架构设计里最容易翻车的地方。我见过太多团队,每层各搞各的监控,数据孤岛严重。出了问题,要从应用层一路查到基础设施层,中间还得手动对时间戳。

我的做法是——统一打点,统一采集,统一存储。

具体来说:

  • 打点:每层都用相同的trace ID。应用层收到请求时生成一个ID,传到模型层,再传到基础设施层。这样出了问题,一条链路查到底。
  • 采集:用统一的Agent采集。别搞什么“GPU用nvidia-smi,模型用自定义脚本,应用用Prometheus”。统一用OpenTelemetry或者自研Agent,减少维护成本。
  • 存储:时序数据进InfluxDB/TimescaleDB,日志进Elasticsearch,链路追踪进Jaeger。各司其职,别混着用。

数据流设计原则:

层级 数据类型 存储方案 采集频率
基础设施层 指标(Metrics) 时序数据库 10s-60s
模型层 指标+日志 时序DB+ES 1s-10s
应用层 指标+日志+链路 时序DB+ES+Jaeger 实时

一个小技巧:数据流设计时,一定要考虑“采样率”。全量采集成本太高,尤其是模型层的推理日志。我一般对正常请求按1%采样,异常请求全量采集。这样既省钱,又不丢关键信息。

2.3 告警链路设计

告警链路,说白了就是“出了问题,谁该知道,怎么知道”。很多团队的告警链路设计得一团糟——要么告警太多,没人看;要么告警太少,出事了才发现。

我总结了一个“三级告警”模型:

  • P0(致命):服务不可用、模型完全失效。直接电话+短信+钉钉/,5分钟内必须有人响应。
  • P1(严重):延迟飙升、错误率上升。邮件+即时消息,15分钟内响应。
  • P2(警告):资源使用率偏高、模型精度轻微下降。邮件通知,日清日结。

告警链路设计里,最容易忽略的是“告警抑制”。你想想看,GPU温度告警了,紧接着显存告警、推理延迟告警、API超时告警……一堆告警同时涌过来。这时候如果没有抑制机制,值班人员根本不知道先处理哪个。

我曾经踩过的坑:有一次集群网络故障,触发了2000多条告警。值班同学直接懵了,一条条看过去,等找到根因时已经过了半小时。后来我强制要求:所有告警必须带上“根因推荐”,并且同一链路的告警只发一条。

告警链路的另一个关键点是“升级机制”。如果P0告警发出后10分钟没人认领,自动升级到技术负责人;20分钟没人处理,升级到部门负责人。别觉得不好意思,出事了没人扛才是最大的问题。

告警链路设计检查清单:

  1. 每层是否有独立的告警规则?
  2. 跨层告警是否有关联分析?
  3. 告警是否带上了trace ID和根因推荐?
  4. 是否有告警抑制和去重机制?
  5. 升级链路是否配置完整?

好了,监控体系架构设计就聊这么多。记住一句话:分层是为了隔离复杂度,数据流是为了串联信息,告警链路是为了快速响应。这三件事做好了,你的AI系统就有了“眼睛”和“耳朵”。

最后补充一句:架构设计没有银弹。我给你的这套方案,适合中大型AI系统。如果你只是跑个小模型,别照搬,精简一下,够用就行。