监控分层架构:从硬件到用户的全链路观测

做高并发系统监控,最怕什么?

我最怕的是「监控孤岛」。服务器CPU飙到99%,你以为是硬件问题,结果发现是应用层死锁;业务指标暴跌,你怀疑是代码bug,最后查出来是CDN节点挂了。你看,单点监控就像盲人摸象,永远看不到全貌。

所以,我习惯把监控拆成四层:基础设施层、应用层、业务层、用户端。每一层解决不同的问题,合在一起才能拼出完整画像。

核心观点:监控不是堆工具,而是分层治理。每一层都有明确的关注点和指标,缺一不可。

监控分层架构全景图 用户端监控 真实用户体验 · 页面加载 · 接口响应 · 错误率 业务层监控 核心业务指标 · 转化率 · 订单量 · 收入曲线 应用层监控 服务调用链 · 接口耗时 · 错误日志 · JVM/GC 基础设施层监控 CPU · 内存 · 磁盘 · 网络 · 中间件 数据流向 →

1. 基础设施层监控:地基不能塌

这一层是最底层的保障。说白了,就是看服务器、网络、中间件这些「硬件」是否健康。

我见过太多团队,一上来就搞APM、搞调用链,结果服务器磁盘满了都不知道。嗯,这是本末倒置。

核心指标

  • CPU使用率:别只看平均值,要看P99峰值。我曾经遇到过CPU每10秒飙到95%又回落,平均只有40%,但系统已经卡得不行了。
  • 内存使用:注意OOM killer的触发。我习惯设置内存使用率超过85%就告警,留出缓冲。
  • 磁盘I/O:iowait是个关键指标。如果iowait持续超过30%,你的数据库大概率在受罪。
  • 网络带宽:入站/出站流量、丢包率、重传率。重传率超过1%就要警惕了。
  • 中间件状态:Redis、Kafka、Nginx的连接数、队列积压、延迟。

我的习惯:基础设施层告警要「快」。CPU飙高、磁盘满这类问题,必须在1分钟内通知到人。别等业务挂了才反应过来。

2. 应用层监控:代码跑得怎么样?

基础设施没问题,那就要看应用本身了。这一层关注的是你的服务、接口、JVM、调用链。

我记得有一次线上事故,用户反馈页面打不开。基础设施层一切正常,CPU、内存都低。最后查出来是某个接口因为参数校验bug,导致线程池耗尽。这就是应用层监控的价值。

核心指标

  • 接口响应时间:P50、P95、P99都要看。P99超过1秒,用户体验就会明显下降。
  • 错误率:5xx、4xx的比例。我习惯把错误率告警阈值设在0.5%以上。
  • 调用链追踪:哪个服务慢了?哪个数据库查询拖后腿?用Trace ID串联起来。
  • JVM指标:GC频率、GC耗时、堆内存使用、线程数。Full GC超过1秒就要排查。
  • 连接池:数据库连接池、HTTP连接池的活跃数、等待数。

避坑指南:我曾经遇到过应用层监控把日志打爆了磁盘。每个请求都打印全量参数,一天产生200GB日志。记住:监控本身不能成为故障源。采样率、日志级别要控制好。

3. 业务层监控:公司赚不赚钱?

这一层,技术人容易忽略。但老板最关心的是这个。

业务层监控,说白了就是把技术指标翻译成业务语言。比如:订单量、支付成功率、用户注册数、DAU、转化率。

我习惯在业务层做「同比」和「环比」对比。比如今天上午10点的订单量,比昨天同一时段下降了20%,那一定有问题。可能是推荐系统挂了,也可能是支付通道出故障了。

核心指标

  • 核心业务流程:注册→登录→浏览→下单→支付→完成。每一步的转化率。
  • 收入相关:GMV、客单价、付费用户数。
  • 用户行为:活跃用户数、留存率、会话时长。
  • 业务异常:下单失败率、支付超时率、退款率。

关键点:业务层告警要「准」。别因为一次小波动就半夜叫醒所有人。我一般设置:连续3个数据点偏离基线超过20%才触发告警。

4. 用户端监控:真实体验才是王道

这一层,是离用户最近的监控。服务器再好,代码再优,用户手机上卡顿、白屏,一切都是白搭。

我记得有一次,后端所有指标都正常,但用户投诉说页面加载慢。最后发现是某个第三方JS脚本阻塞了渲染。这种问题,只有用户端监控才能发现。

核心指标

  • 页面加载时间:FCP(首次内容绘制)、LCP(最大内容绘制)、TTFB(首字节时间)。
  • JS错误率:前端报错的数量和分布。我习惯按浏览器版本、操作系统维度聚合。
  • API请求耗时:从用户端发起到收到响应的完整时间。
  • 用户体验评分:比如Google的Core Web Vitals指标。
  • 地域/运营商分布:不同地区、不同运营商的访问质量。

我的做法:用户端监控一定要做「采样」。全量采集会消耗用户带宽和电量。我一般设置1%的采样率,对于错误日志则全量采集。

四层联动:一个真实案例

讲个我亲身经历的事故吧。

某天下午,业务层监控显示「支付成功率」从98%骤降到60%。业务同学慌了,以为是支付通道出问题。

我打开应用层监控,发现支付接口的P99耗时从200ms飙升到5秒。再往下看基础设施层,支付服务的CPU使用率只有30%,但数据库的活跃连接数爆了。

最后查出来,是某个促销活动导致一个慢SQL把数据库连接池占满。用户端监控也印证了:用户点击支付按钮后,页面卡住超过10秒。

你看,四层监控缺一不可。如果只看业务层,你会误判为支付通道故障;如果只看基础设施层,你会觉得一切正常。

总结一张表

监控层 关注点 典型指标 常用工具
基础设施层 硬件、网络、中间件 CPU、内存、磁盘、网络 Prometheus + Node Exporter
应用层 服务、接口、JVM 响应时间、错误率、GC SkyWalking、Pinpoint
业务层 核心业务指标 订单量、转化率、收入 Grafana + 自定义埋点
用户端 真实用户体验 页面加载、JS错误 Sentry、自建RUM

最后说一句:监控分层不是死板的。你可以根据自己系统的复杂度,适当合并或拆分。但核心思想不变——从底层到顶层,每一层都要有「眼睛」盯着。

专注资料整理