第6章:可观测性(Observability)
一、导读
1.1 本章学习目标
第6章讲解微服务的可观测性。在分布式系统中,能够理解系统的内部状态至关重要。
1.2 为什么第六章如此重要
微服务的分布式特性使得调试和排错变得困难。可观测性是理解和运维微服务系统的关键。
1.3 核心问题引导
可观测性的三大支柱是什么?
分布式追踪如何工作?
健康检查如何设计?
告警策略如何制定?
二、核心概念详解
6.1 可观测性三支柱
日志(Logs):
- 离散事件的记录
- 结构化日志(JSON)
- 集中式日志(ELK/Loki)
指标(Metrics):
- 可聚合的数值数据
- 时间序列数据
- Prometheus + Grafana
链路追踪(Traces):
- 请求在系统中的完整路径
- 每个 span 记录耗时
- Jaeger/Zipkin6.2 分布式追踪
java
// 使用 OpenTelemetry
Tracer tracer = GlobalOpenTelemetry.getTracer("order-service");
Span span = tracer.spanBuilder("createOrder").startSpan();
try (Scope scope = span.makeCurrent()) {
// 创建订单
// trace context 自动传播到下游服务
} finally {
span.end();
}6.3 健康检查
java
// Spring Boot Actuator
@GetMapping("/health")
public Health health() {
return Health.up()
.withDetail("database", checkDatabase())
.withDetail("cache", checkCache())
.withDetail("downstream", checkDownstream())
.build();
}6.4 告警策略
告警原则:
- 可操作:每个告警都有处理方案
- 分级:P0-P3
- 不滥报:避免告警疲劳
- 包含上下文:帮助快速定位三、实战案例
6.1 完整的可观测性方案
日志:ELK Stack
- Filebeat → Logstash → Elasticsearch → Kibana
指标:Prometheus + Grafana
- 应用暴露 /metrics 端点
- Prometheus 定期拉取
- Grafana 可视化
追踪:Jaeger
- OpenTelemetry SDK 集成
- 自动传播 trace context
- Jaeger UI 查看链路四、本章小结
可观测性是微服务运维的基础。日志、指标和链路追踪是三大支柱。健康检查让系统自我诊断,告警让问题及时发现。
五、思考与练习
可观测性和监控有什么区别?
分布式追踪如何传播上下文?
健康检查应该检查什么?
如何设计有效的告警?
可观测性的成本如何控制?