1. 可观测性工程导论

在传统运维里,我们常把“监控”理解为对已知故障模式的盯防:CPU 超过 80% 报警、磁盘剩余空间低于 10% 报警、服务进程消失报警。这套思路的前提是——我们事先知道哪些指标会出问题。但 Azure 数据平台(Data Factory、Synapse、Databricks、Event Hubs、ADLS Gen2、Stream Analytics 等)的故障往往不是“某个指标越界”,而是“一条数据没有按时到达”“一个管道静默地少处理了 3% 的行”“某个分区在凌晨 2 点后延迟持续爬升”。这类问题无法靠预设阈值回答,只能靠对系统内部状态的推断能力来回答。

可观测性工程(Observability Engineering)正是为这种“未知的未知”而生的学科。它的定义可以概括为:通过系统对外输出的遥测数据,在不预先假设故障模式的前提下,推断系统内部状态、定位异常根因并验证修复效果的能力。注意三个关键词:不预设故障模式、推断内部状态、验证修复。监控回答“是否正常”,可观测性回答“为什么不正常、哪里不正常、影响谁”。

三大支柱:日志、指标、追踪各自回答什么

可观测性的三大支柱并非三个可以互相替代的工具,而是三种互补的“提问方式”。理解它们的差异,比记住它们的名字更重要。

  • 日志(Logs):离散的、带时间戳的事件记录,回答“发生了什么具体事件”。在 Azure 数据平台中,典型来源是 Data Factory 活动运行日志、Databricks 集群驱动日志、Synapse 专用 SQL 池的 DMV 输出、ADLS Gen2 的诊断日志。日志信息密度高但体量大,适合事后取证与精确排查。
  • 指标(Metrics):按固定时间间隔聚合的数值序列,回答“整体趋势如何、是否越界”。例如 Event Hubs 的 IncomingMessages、Synapse 的 DWU 使用率、Databricks 的集群 CPU 与 shuffle 字节数。指标成本低、适合长期留存与告警,但丢失了个体事件的细节。
  • 追踪(Traces):一次请求或一次数据流经多个组件时形成的因果链路,回答“这次处理经过了哪些环节、哪一段慢或失败”。在数据平台中,追踪常以“管道运行 ID + 活动 ID + 子作业 ID”的关联形式出现,把 ADF 的 Copy 活动、Databricks 的 notebook 任务、Synapse 的存储过程串成一条链。

三者的关系可以用一个判断路径来理解:指标告诉你“有事发生”,追踪告诉你“事发生在哪一段”,日志告诉你“那一段里到底出了什么错”。缺少任何一根支柱,排查都会退化为猜测。

Azure 数据平台可观测性:三支柱协同定位 从“有事发生”到“事在哪一段”再到“那一段出了什么错” 被观测对象(Azure 数据平台组件) Data Factory Synapse Databricks Event Hubs ADLS Gen2 指标 Metrics 回答:是否越界 / 趋势如何 • IncomingMessages • DWU 使用率 • 集群 CPU / shuffle 字节 • 管道运行时长 P95 追踪 Traces 回答:经过哪些环节 / 哪段慢 • 管道运行 ID • 活动 ID → 子作业 ID • 跨组件因果链 • 各段耗时与状态 日志 Logs 回答:具体出了什么错 • 活动运行日志 • 驱动 / executor 日志 • DMV 输出 • 诊断日志 协同判断路径 ① 指标告警 “有事发生” ② 追踪定位 “事在哪一段” ③ 日志取证 “那一段出了什么错” ④ 修复并验证 回看指标是否恢复

在 Azure 数据平台中的价值与边界

把三支柱落到 Azure 数据平台,价值体现在三个具体场景。第一,数据新鲜度保障:Event Hubs 的 IncomingMessages 指标下降、Stream Analytics 的 Watermark Delay 上升、下游 Synapse 表长时间无新分区,三者结合可以判断是“上游没数据”还是“处理链路卡住”。第二,管道性能回归:Data Factory 管道运行时长 P95 从 12 分钟涨到 25 分钟,追踪显示 Copy 活动耗时正常而 Databricks notebook 活动翻倍,日志显示 shuffle spill 激增,根因指向数据倾斜而非网络。第三,成本异常归因:Synapse DWU 使用率持续高位,追踪到某个存储过程被高频调用,日志确认其扫描了未分区的大表。

但可观测性有明确边界,必须诚实对待。其一,它不能替代正确的架构设计:如果管道没有幂等性、没有分区裁剪,再多的遥测也只能告诉你“它很慢”,无法让它变快。其二,它受采样与成本约束:全量日志在 PB 级数据平台中不可承受,通常需要对日志采样、对指标降精度、对追踪设置采样率,这必然带来“可能漏掉低频异常”的风险。其三,它依赖关联标识的完整性:如果 ADF 的 runId 没有传递到 Databricks 作业,追踪链就会断裂,此时只能退回到时间窗口对齐的粗略推断。其四,它不自动给出因果:相关性不等于因果,可观测性提供的是证据链,最终判断仍需工程师结合业务语义完成。

一个实用的判断准则:当你能用“指标 → 追踪 → 日志”这条路径在 15 分钟内把一次数据延迟定位到具体组件和具体错误,说明可观测性建设基本到位;如果每次都要靠翻聊天记录和猜,说明还停留在监控阶段。

一个可落地的最小起步示例

假设你要为一个 ADF + Databricks + Synapse 的每日批处理链路建立可观测性基线。可以按以下方式组织遥测,参数为示例假设值,用于说明结构而非实测结果:

指标层(Azure Monitor,1 分钟粒度,保留 30 天)
  ADF: PipelineRunDuration / ActivityRunDuration / FailedRuns
  Databricks: ClusterCPU / ShuffleBytesWritten / JobRunDuration
  Synapse: DWUUsedPercent / ActiveQueries

追踪层(关联标识贯穿)
  ADF runId  →  传入 Databricks job 参数 correlation_id
  Databricks job run_id  →  写入 Synapse 审计表 etl_audit

日志层(Log Analytics,按需查询)
  ADF 活动输出 → 失败时保留完整 errorCode 与 message
  Databricks 驱动日志 → 仅保留 WARN/ERROR 级别
  Synapse DMV → 每 5 分钟快照一次等待类型

建立基线后,先观察一周的正常波动范围,再设置告警。例如管道时长 P95 基线为 12 分钟,告警阈值可设为 18 分钟(1.5 倍),而不是拍脑袋的 30 分钟。这样告警才有信噪比,可观测性才不会退化成“告警疲劳”。

最后要强调:可观测性工程不是买一套工具,而是一种工程习惯——在设计和实现数据管道时,就同步考虑“如果它出问题,我需要哪些遥测才能解释它”。这种习惯,才是 Azure 数据平台从“能跑”走向“可信”的分水岭。