BLOGE
0.9.8-RC1在线版 · 事实校验 2026-09-15 · English
第 19 章 —— 生产环境中的可观测性
承诺: 读完本章后,你将知道如何在生产环境中看见一张 BLOGE graph 正在做什么 —— 通过 listener、interceptor、metrics、tracing、结构化日志、上下文传播与审计日志 —— 而不需要把这些逻辑写进 workflow 本身。
学习目标
- 解释两条主要的可观测性扩展点:负责生命周期事件的
ExecutionListener,以及负责包裹调用过程的OperatorInterceptor。 - 使用自定义 listener 捕获 graph / node 生命周期信号,并知道什么时候应该实现更细粒度的子接口。
- 正确地把
MetricsExecutionListener、TracingOperatorInterceptor和LoggingExecutionListener接到GraphEngine上。 - 使用
CallerContextCarrier把 MDC 或 OpenTelemetry 上下文传播到引擎的虚拟线程中。 - 知道什么时候聚合指标就足够,什么时候必须使用
AuditJournalListener提供的结构化逐事件视角。
前置条件
- 第 6 章——韧性设计 —— 只有先理解 retry、timeout 和 fallback,这些事件信号才有意义。
- 第 7 章 —— 设计良好的 Operator —— interceptor 包裹的是 operator 执行,所以你需要先理解 operator 契约。
- 第 18 章 —— 测试你的 Graph —— 本章直接建立在你在测试中已经接触过的断言面和 listener 机制之上。
源示例
| 文件 | 展示内容 |
|---|---|
GraphEngineListenerTest.java | 生命周期回调与 listener 异常隔离 |
ResilientOperatorWrapperObservabilityTest.java | retry、timeout 与 fallback 事件 |
MetricsExecutionListenerTest.java | Micrometer 定时器与计数器 |
TracingOperatorInterceptorTest.java | graph span 与 node span |
AuditJournalListenerTest.java | 结构化审计条目与事件覆盖 |
BlogeObservabilityAutoConfiguration.java | Spring Boot 可观测性自动配置 |
为什么这很重要
一张 graph 今天在你的机器上跑得正确,仍然可能在生产环境里悄悄出问题:
- 某个 node 在依赖升级后开始抛错。没有 metrics,你要等到用户投诉才知道。
- 某个 retry 回路每次请求都烧掉 30 秒。没有逐节点耗时数据,你根本定位不到瓶颈。
- 某条 分支改动让过去会执行的节点被跳过了。没有生命周期信号,系统看起来像是空闲,实际上却在做错误的选择。
BLOGE 将关注点明确分离:引擎 负责运行节点,扩展钩子 负责观察结果。正是这种分离,才让你能够在不把指标、trace 或日志代码塞进每个 operator 的前提下,获得生产可见性。