3. 可观测性三大支柱

在银行微服务交易链路中,可观测性不是“多装几个监控工具”,而是围绕同一笔交易建立可度量、可追溯、可定位的证据体系。Metrics、Logging、Tracing 被称为可观测性三大支柱,它们分别回答不同层次的问题:系统整体是否健康、某个时刻发生了什么、一笔交易经过了哪些服务并慢在哪里。理解三者的边界与协同,是后续链路治理、故障定位和容量评估的基础。

一、核心原理:三种信号的本质差异

Metrics(指标)是数值型的时间序列数据,通常由客户端或服务端周期性聚合上报,例如交易成功率、TPS、P99 延迟、线程池活跃数、数据库连接数。它的优势是低存储成本、高查询效率,适合做告警、趋势分析和容量水位判断;缺点是维度有限,难以还原单笔交易的完整上下文。

Logging(日志)是离散事件的文本或结构化记录,记录“在什么时间、哪个服务、哪个实例、发生了什么”。银行场景中常见的有交易流水日志、异常堆栈、风控决策日志、审计日志。日志信息丰富、可读性强,适合排查具体错误和合规审计;但海量日志的采集、存储和检索成本高,且缺乏跨服务的天然关联。

Tracing(链路追踪)以 TraceId 和 SpanId 为核心,把一次请求在多个服务、线程、中间件之间的调用关系串成有向图。每个 Span 记录服务名、操作名、开始时间、耗时、状态和标签。它天然适合回答“这笔转账为什么慢了 800ms”“调用链在哪一跳失败”。缺点是采样策略和埋点质量直接影响效果,且对异步、消息队列、批处理场景需要额外适配。

银行交易链路可观测性三支柱协同视图 Metrics 指标 TPS / 成功率 / P99 / 水位 聚合数值 · 低成本 · 告警 回答:系统整体是否健康 Logging 日志 事件 · 异常 · 审计 · 决策 文本/结构化 · 上下文丰富 回答:此刻发生了什么 Tracing 链路 TraceId · Span · 调用关系 有向图 · 跨服务 · 耗时分解 回答:一笔交易慢在哪一跳 统一关联键:TraceId + 交易流水号 + 客户号 + 渠道号 指标异常 → 日志定位错误 → 链路还原路径 → 回到指标验证修复效果 告警触发 根因定位 修复验证

二、方法流程:从告警到根因的协同排查

在银行生产环境中,三支柱通常按以下流程协同工作,形成闭环:

  1. 指标告警先行:监控平台基于 Metrics 发现“转账交易成功率 5 分钟内从 99.9% 跌至 97.2%”,触发 P2 告警。
  2. 日志缩小范围:按服务名、时间窗口和错误码检索日志,发现某分行渠道的“账户余额查询”接口大量返回超时异常。
  3. 链路还原路径:用日志中的 TraceId 打开 Tracing 系统,看到调用链在“账户服务 → 数据库连接池”这一跳耗时从 20ms 突增至 1.8s。
  4. 指标交叉验证:回到 Metrics 查看该实例的数据库连接池活跃数和等待队列,确认连接池被打满。
  5. 修复与回归:扩容连接池或限流后,观察三项信号是否同步恢复,并记录复盘结论。

关键原则:Metrics 负责“发现异常”,Logging 负责“解释异常”,Tracing 负责“定位异常”。三者不是替代关系,而是证据链的不同环节。缺少 TraceId 贯通,日志和链路就会变成孤岛。

三、银行场景中的定位与对比

银行交易链路对一致性、合规性和可审计性要求极高,三支柱的定位也有明显差异。下表从多个维度进行对比:

维度 Metrics 指标 Logging 日志 Tracing 链路
数据形态 数值时间序列 离散事件文本/JSON Trace + Span 有向图
主要用途 告警、趋势、容量 排错、审计、合规 耗时分解、依赖分析
银行典型对象 交易成功率、TPS、P99 交易流水、风控决策、异常堆栈 转账、支付、清算调用链
存储成本 低 高 中(受采样率影响)
关联键 服务名 + 实例 + 时间 TraceId + 流水号 TraceId + SpanId
典型工具 Prometheus、Micrometer ELK、Loki、SLS Jaeger、Zipkin、SkyWalking

四、误区与复盘:银行落地中的常见问题

在实际项目中,三支柱建设容易走入以下误区:

  • 只建指标不建链路:告警能发现成功率下降,但无法回答“哪一笔、哪一跳、哪个客户受影响”,排障仍靠人工登录机器查日志。
  • 日志没有 TraceId:微服务日志分散在几十个实例中,无法按一笔交易聚合,排查时间被拉长数倍。
  • 采样率设置不当:为节省成本把链路采样率降到 0.1%,导致故障期间关键交易没有被采集,反而失去定位能力。银行核心交易建议对异常和慢请求强制采样。
  • 指标维度爆炸:把客户号、流水号作为指标标签,导致时间序列数量失控,监控系统自身成为瓶颈。高基数信息应放在日志和链路中。
  • 三套系统各自为政:指标、日志、链路使用不同的服务命名和时间标准,无法交叉跳转,协同效率低下。

落地建议:先统一 TraceId 生成与透传规范,再统一服务名、实例名和交易码字典,最后在监控面板中实现“指标 → 日志 → 链路”的一键跳转。技术选型可以分阶段,但关联键必须先行。

合规提醒:银行日志和链路数据可能包含客户敏感信息。采集时应对卡号、身份证号、手机号等字段做脱敏或哈希处理,并严格控制访问权限与留存周期,避免可观测性建设引入新的数据安全风险。