6Building Microservices(第2版)

可观测性

监控与调试

日志指标链路追踪健康检查告警

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第6章:可观测性(Observability)

一、导读

1.1 本章学习目标

第6章讲解微服务的可观测性。在分布式系统中,能够理解系统的内部状态至关重要。

1.2 为什么第六章如此重要

微服务的分布式特性使得调试和排错变得困难。可观测性是理解和运维微服务系统的关键。

1.3 核心问题引导

可观测性的三大支柱是什么?

分布式追踪如何工作?

健康检查如何设计?

告警策略如何制定?


二、核心概念详解

6.1 可观测性三支柱

日志(Logs):
- 离散事件的记录
- 结构化日志(JSON)
- 集中式日志(ELK/Loki)

指标(Metrics):
- 可聚合的数值数据
- 时间序列数据
- Prometheus + Grafana

链路追踪(Traces):
- 请求在系统中的完整路径
- 每个 span 记录耗时
- Jaeger/Zipkin

6.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 查看链路

四、本章小结

可观测性是微服务运维的基础。日志、指标和链路追踪是三大支柱。健康检查让系统自我诊断,告警让问题及时发现。


五、思考与练习

可观测性和监控有什么区别?

分布式追踪如何传播上下文?

健康检查应该检查什么?

如何设计有效的告警?

可观测性的成本如何控制?


6/8可观测性
0%