Java 可观测性
指标、日志、追踪三位一体:如何让服务在生产中可提问、可定位。
#type / concept
#status / growing
#tech / dev
#resource / java
[!info] 关联笔记
Java 可观测性
这个概念为什么出现
服务变慢或出错时,需要回答:哪条路径、哪个依赖、多少错误、哪个实例。可观测性把日志、指标、追踪连成可查询证据。
[!abstract] 一句话理解 指标描述整体健康,日志提供事件细节,追踪连接一次请求的跨服务因果;用 correlation id 把三者串起来。
最小可运行示例
场景:为请求生成 correlation id 并打日志
import java.util.UUID;
import java.util.logging.Logger;
public class CorrelationDemo {
private static final Logger log = Logger.getLogger(CorrelationDemo.class.getName());
static void handle() {
String cid = UUID.randomUUID().toString();
log.info(() -> "cid=" + cid + " event=start");
log.info(() -> "cid=" + cid + " event=done");
}
public static void main(String[] args) { handle(); }
}
javac CorrelationDemo.java && java CorrelationDemo
期望:两行日志含同一 cid。
结合场景再看三个关注点
- cid 沿 HTTP 头传播。
- RED/USE 指标思维。
- 采样追踪控成本。
核心概念与准确模型
1. 三大支柱
2. OpenTelemetry / Micrometer 生态
3. SLO 与告警
边界情况与反直觉行为
- 高基数标签炸掉时序库。
- 日志含 PII。
- 只加工具不加黄金指标。
常见误区
[!warning] 常见误区:有仪表盘=可观测 还要能按请求钻取因果。
工程实践
- 统一 cid/traceId。
- 错误率/延迟分位/饱和度。
- 依赖分类隔离。
- 演练“无日志也能定位吗”。
本节总结
- 日志+指标+追踪
- 关联是关键
- 服务可靠性底座
自测题
- 高基数标签为何危险?
- 追踪采样的权衡?
参考答案
- 时间序列爆炸、成本与查询变差。
- 成本 vs 罕见问题可见性。
延伸阅读与资料来源
| 资料 | 类型 | 支撑内容 |
|---|---|---|
| OpenTelemetry | 标准/项目 | 可观测 |
| Micrometer | 库 | Java 指标 |