从混乱到清晰:我们如何构建支撑千亿级请求的可观测性平台

loong
2026-01-13 / 0 评论 / 18 阅读 / 正在检测是否收录...

从混乱到清晰:我们如何构建支撑千亿级请求的可观测性平台

凌晨三点,告警电话再次响起。屏幕上堆叠着几十条来自不同系统的警报:数据库连接池告急、某个微服务响应时间飙升、前端错误日志激增。团队花了两个小时,像侦探一样在日志、监控图表和代码之间来回切换,才勉强定位到一个第三方API的隐性故障。

这种场景熟悉吗?

当系统从单体架构演变成数十个、甚至上百个微服务时,传统的监控方式就彻底失灵了。你看得见每个零件的转速,却不知道整台机器为什么卡顿。这就是我们当初决定从头构建企业级可观测性平台的起点——不是为了追求技术时髦,而是为了能在问题发生时,快速回答那个最根本的问题:到底发生了什么?

可观测性不是监控的豪华版

很多人把可观测性理解为监控的升级版,加几个分布式追踪的链路图就完事了。坦白讲,这个误解让我们走了不少弯路。

监控告诉你系统是否在按照预期运行(已知的未知)。
可观测性帮你探索系统为什么没有按预期运行(未知的未知)。

关键在于后者。当用户投诉“页面加载慢”时,监控仪表盘可能一切正常(CPU、内存、网络IO都在阈值内)。但可观测性平台能让你沿着一次用户请求,穿透前端、网关、认证服务、订单服务、库存服务、支付网关,最终发现是某个地理区域的数据库副本同步延迟了500毫秒。

这种深度洞察,需要三类数据的深度融合:

  • 指标(Metrics):系统的脉搏。CPU使用率、请求QPS、错误率、队列长度。它们高效、可聚合,告诉你“哪里不对劲”。
  • 日志(Logs):系统的日记。带时间戳的离散事件,包含丰富的上下文信息。告诉你“当时发生了什么”。
  • 分布式追踪(Traces):请求的足迹。一个请求在分布式系统中流经的所有服务节点和耗时。告诉你“为什么慢”。

三者孤立时,价值有限。真正产生魔力的是它们的关联

我们的整合实践:不是堆砌工具,而是统一数据

早期我们尝试过“全家桶”方案,也试过把ELK、Prometheus、Jaeger分别部署然后简单对接。结果呢?数据孤岛依旧,切换成本高昂。

真正的转折点来自于思路的转变:构建平台的核心不是选型工具,而是设计一个统一的数据模型和查询层。

第一步:确立“黄金信号”与数据标准

我们不再收集所有能收集的数据,而是聚焦于四个黄金信号:延迟、流量、错误、饱和度。每个微服务团队都必须以标准格式暴露这些核心指标。

日志方面,我们强制推行结构化日志(JSON格式),并规定必须包含几个关键字段:trace_idservice_nameuser_idrequest_path。这为后续的关联打下了基础。

第二步:构建基于Trace的数据枢纽

我们将分布式追踪的trace_id作为所有可观测性数据的“主键”。

具体做法是:

  1. 在所有服务的入口处注入trace_id,并确保它在整个调用链中透传。
  2. 在输出日志时,自动将trace_id写入日志上下文。
  3. 在暴露指标时,为关键指标(如请求耗时)打上包含trace_id的标签(注意:这只针对需要深度下钻的样本,全量打标存储吃不消)。

这样,当我们在追踪视图中看到一个慢请求时,可以直接点击跳转到这个trace_id对应的所有日志和当时的系统指标快照。从“链路图”到“具体错误日志”再到“当时该容器的资源状态”,一气呵成。

第三步:自研轻量级关联查询层

现有的开源工具在关联查询上往往不够灵活。我们基于OpenTelemetry的标准,开发了一个轻量的查询网关。它不存储数据,只提供统一的查询接口。你可以这样查询:

显示所有延迟大于2秒的请求,并关联出这些请求在‘订单服务’中产生的错误级别日志,同时查看这些请求发生时间段内,‘支付服务’数据库的连接池使用率趋势。

这种跨数据源的关联,将故障排查从小时级降到了分钟级。

踩过的坑与真心建议

  • 采样是双刃剑:全量追踪数据成本极高。我们采用动态采样:对错误请求和高延迟请求提高采样率,对健康请求降低采样率。保证能用有限的资源捕捉到最有价值的问题线索。
  • 不要忽视客户端数据:服务端一切正常,但用户依然觉得卡?问题可能出在前端加载、网络抖动或CDN上。我们将前端性能指标(FP、FCP、LCP)也纳入了平台,形成了端到端的真正全链路观测。
  • 文化比工具更重要:如果开发团队不按规范打日志、不暴露指标,再好的平台也是空中楼阁。我们通过将可观测性数据质量纳入发布准入门槛,并展示它如何快速解决他们自己的线上问题,才逐步赢得了团队的认同。
  • 从“告警”转向“洞察”:减少“CPU使用率>80%”这类浅层告警。增加诸如“服务错误率在5分钟内上升2%,且同期依赖服务延迟中位数也上升了50%”的复合洞察规则。这能极大降低告警疲劳,并直接指向问题根因。

写在最后

构建可观测性平台是一个旅程,而不是一个项目。它没有彻底的终点,因为系统永远在变化。

今天,当告警再次响起,我们不再慌张。平台能直接告诉我们:“是欧洲区域的用户,在调用‘推荐引擎’服务时,因为缓存集群B节点异常,导致尾部延迟飙升。” 修复和影响评估在几分钟内就能完成。

这种从混沌到清晰的掌控感,或许就是技术人最大的成就感之一。

你的可观测性之旅,现在走到哪一步了?是仍在工具选型的十字路口,还是已经开始品尝数据关联带来的甜头?无论在哪,记住核心永远是:更快、更准地理解你的系统。

0