
去过伦敦的人都听过地铁里的提醒:“Mind the gap”。在可观测性(Observability)领域,也正出现一条“裂缝”——系统复杂度火箭般上升,而我们的监控/可观测能力却在原地踏步。我就经历过这种痛苦:曾经,分布式系统一切顺畅,告警量可控,仪表盘一目了然,出故障也能在合理时间内定位问题。
但 3–5 年后,一切变了:我们上了 Kubernetes,拥抱了微服务,甚至还加了些 AI 驱动的功能。结果呢?遥测数据激增,告警疲劳加剧,跨服务排障压力山大——这就是 “observability gap”。本文将讨论这条裂缝为何出现、为何越拉越大,以及如何用现代可观测性手段把它补上。
先直视现实:基础设施的规模与复杂度并非线性增长,而是指数级。过去是单体应用跑在物理服务器上,如今是数百个微服务在 K8s 集群里自动伸缩,连 AI 算法都能自主做伸缩决策。
这股趋势短期内不会停止。AI 辅助编码让迭代更快,Kubernetes 也在向预测式伸缩迈进——我们的基础设施不仅复杂,而且是“动态复杂”。
而我们的可观测性工具?大多停留在“我知道自己有几台服务器,可以手动对时间戳做日志和指标关联”的时代。

规模变大后,最先感受到的往往是观测费用飙升。常见的“止血”方式是采样:降采样指标、头采样(head-sample)链路、去重日志……这些技术有其价值,但与未来的方向背道而驰。

要知道,ML 和 AI 系统最需要的就是丰富、上下文完整的数据。你采样掉的“噪声”往往恰是用来发现模式、预测故障的信号。与其问 “怎样收集更少的数据?”,不如问 “怎样以可承受的成本存储并处理全部数据?”
现代化存储架构(对象存储 + ZStandard 等高效压缩)让“既要全量留存,又要成本可控”成为可能。关键是:把相关数据尽快归档到便宜的存储层,同时保持可查询性。

当然,并非所有应用都需要全量保留。第一步是识别关键业务流,优先保证它们的遥测数据“最富态”。不要为了省钱一刀切采样;该用手术刀,就别抡大锤。
如果让我选职业生涯里最具变革性的可观测性技术,那一定是 OpenTelemetry。它并不“炫酷”,却从根本上解决了多年顽疾。
在 OTel 之前,埋点=绑定厂商。想从供应商 A 换到 B?重写全量埋点吧。想把同一份遥测发到多个后端?维护多套 Agent 配置吧。

OTel 彻底改变了局面,核心价值有三:
此外,手工埋点也变得“投入少、收益大”。只需一行:
# 在认证服务中
baggage.set_baggage("customer.id", "alice123")从此,customer.id 会沿着调用链自动流转:数据库查询、日志、链路……全系统都能按 customer.id 检索。
趋势很明确:数年内,OTel 会像今天的 Kubernetes 一样“无处不在”。运行时默认集成,云厂商托管 OTel Collector,框架开箱自带埋点。

收到高延迟告警 → 看指标仪表盘,95th 百分位飙升 → 切到 Trace,发现某些请求变慢 → 再去日志系统,看到同一时间段的报错……接下来,乐趣来了:哪个日志对应哪个 Trace?它们跟那条指标有没有关系?
这场“上下文切换梦魇”正是 Correlation 要消灭的。当遥测共享标识(如 Trace ID、统一 service.name、同步时间戳、customer.id 等),你就能无缝在不同信号间跳转而不丢上下文。
更进一步,按 customer.id 查日志、Trace、指标,可秒级定位用户旅程;按 deployment.version 过滤全栈数据,可瞬间评估一次发布影响。

连指标也能关联:用 OTel Exemplars。以 Python 为例:
# 开启基于 Trace 的 metrics exemplars
from opentelemetry.sdk.metrics import (
ExemplarFilter,
ExemplarReservoir,
)
exemplar_filter = ExemplarFilter(trace_based=True)
exemplar_reservoir = ExemplarReservoir(
exemplar_filter=exemplar_filter,
max_exemplars=5
)这样,指标样本就能“带上”对应 Trace,真正打通信号链。
听起来不错,但你可能想:既然要大费周章做 Correlation,干脆把数据合成一种结构,不就无需再“对应”了?业界近来热议的 wide-events 正是如此。
wide-events 本质上是“超结构化日志”:把指标、链路、日志数据塞进同一条宽表记录。好处显而易见:
LLM 最爱“上下文”,一次端上“全餐”,排障耗时大减。
过去几年,可观测性(Observability)工具在「告警疲劳」和「仪表盘泛滥」这两个痛点上已经有了长足进步。
• 通过告警关联(alert correlation)等技术,重复噪声被大量消除。
• SRE 团队更倾向于以 SLO 为中心,而不是单纯依赖底层技术指标。
因此,仅就「收到合适的告警并定位到问题」这一阶段而言,SRE 的工作体验已经好了很多。
然而,告警只是战争打响的一声枪响。真正耗时、且最容易让人焦虑的环节,是在事故期间进行的 Root Cause 调查。
当生产环境出现故障,SRE 的认知负荷往往达到峰值,时间压力也空前巨大。
好消息是:
LLM 的推理效果高度依赖上下文。如果能够一次性喂给它尽可能多、且结构化良好的上下文,它就能用更少的提示(prompt)完成更深入的分析,从而压缩调查时间。下面通过一个示例来说明。
假设我们只有下面这条非常简陋的日志。LLM 唯一能得出的结论是「数据库挂了」。

现在看看 Wide-Event 视角下的同一事件。注意以下几点改进:
这些都大幅降低了 LLM 的思考难度:它不必再自己去拼接多条日志、Trace 和 Metrics。

除 Wide-Event 本身外,如果还能把以下信息一并提供给 LLM,分析效率会更高:
字段 | LLM 的用法 |
|---|---|
trace_id / parent_span_id | 线程级关联,无需解析文本 |
status.code / error.* | 精准失败类型 |
db.* | 直接暴露数据库原因 |
user.id / cloud.region | 立刻算出爆炸半径 |
deployment.version | 快速关联新版本 |
结构化 ≠ 舍弃自由文本。原始 error message 仍是宝贵上下文;LLM 对非结构化文本解读能力强,正好双剑合璧。
及早拥抱 OTel、丰富可观测数据、试水 AI 调试的团队,将在未来竞争中占据主动。
复杂度火箭已起飞,唯有主动进化,才能睡个好觉。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。