微服务排错难?可观测性三大支柱:追踪定位链路、日志聚合查问题、指标预警风险
第五部分:运维与监控篇
可观测性模式
在微服务架构中,可观测性(Observability) 是保障系统稳定性的重要能力。
可观测性主要包括三个维度:
- Tracing(分布式追踪)
- Logging(日志聚合)
- Metrics(指标与告警)
这三者常被称为 可观测性的三大支柱(Three Pillars of Observability)。
1 分布式追踪(Tracing)
背景
在微服务架构下,一个请求往往会经过多个服务(如 API 网关 → 用户服务 → 订单服务 → 支付服务)。
一旦出现性能瓶颈或错误,仅依赖单一服务日志很难排查。
解决方案
- 使用 分布式追踪系统(如 Spring Cloud Sleuth + Zipkin/Jaeger)。
- 给每个请求打上全局唯一的 TraceId,并在调用链路中传递。
🚀 Spring Boot 3.2 + Micrometer Tracing + OpenTelemetry 示例
1. pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>observability-demo</artifactId>
<version>1.0.0</version>
<properties>
<java.version>17</java.version>
<spring.boot.version>3.2.2</spring.boot.version>
</properties>
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Actuator 用于指标、健康检查 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micrometer Tracing (代替 Sleuth) -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<!-- OpenTelemetry 导出到 Zipkin -->
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>
<!-- Prometheus 指标导出 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. application.yml
server:
port: 8080
management:
endpoints:
web:
exposure:
include: health, prometheus
endpoint:
health:
show-details: always
# OpenTelemetry 配置
management.tracing.sampling.probability: 1.0 # 采样率 100%
# Zipkin 配置
otel:
exporter:
zipkin:
endpoint: http://localhost:9411/api/v2/spans
3. 示例代码
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/hello")
public String hello() throws InterruptedException {
Thread.sleep(200); // 模拟耗时
return "Hello, Tracing!";
}
}
4. 启动 Zipkin
用 Docker 启动 Zipkin:
docker run -d -p 9411:9411 openzipkin/zipkin
访问:http://localhost:9411 可以看到追踪信息。
5. 验证
-
启动 Spring Boot 应用:
mvn spring-boot:run -
访问接口:
curl http://localhost:8080/hello -
打开 http://localhost:9411,就能看到分布式追踪链路。
2 日志聚合(Logging)
背景
在微服务架构中,日志分散在不同服务实例,直接 SSH 到容器或服务器看日志已经不现实。
解决方案
- 将所有服务的日志集中收集到 日志平台(如 ELK(Elasticsearch + Logstash + Kibana),或 EFK(Elasticsearch + Fluentd + Kibana))。
- 提供 检索、聚合、可视化 功能,方便排错与分析。
示例:Spring Boot 输出 JSON 日志
在 application.yml 配置:
logging:
pattern:
console: "{\"timestamp\":\"%d{yyyy-MM-dd HH:mm:ss}\", \"level\":\"%p\", \"service\":\"order-service\", \"trace\":\"%X{traceId}\", \"span\":\"%X{spanId}\", \"msg\":\"%m\"}%n"
这样日志就带有 traceId,可与分布式追踪联动。
Logstash/Fluentd 可采集日志并发送到 Elasticsearch,最后在 Kibana 中集中查询。
3 指标与告警(Metrics & Alerting)
背景
除了日志和追踪,我们还需要监控:
- JVM 内存、GC、线程数
- 请求吞吐量、响应时间、错误率
- 数据库连接数、队列积压情况
解决方案
- 使用 Micrometer + Prometheus + Grafana 搭建指标监控与可视化系统。
- 配置 告警规则(如错误率超过 5% 或响应时间 > 2s 时,触发告警)。
示例:Spring Boot Actuator + Micrometer
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
application.yml
management:
endpoints:
web:
exposure:
include: health,info,prometheus
运行后,访问:
http://localhost:8080/actuator/prometheus
可看到 Prometheus 格式的监控数据。
Grafana 可以用这些数据绘制可视化图表,并配置告警规则(如钉钉/Slack/邮件通知)。
4 小结
- Tracing(追踪):快速定位跨服务调用链路问题。
- Logging(日志聚合):集中管理日志,提升排错效率。
- Metrics(指标 & 告警):监控运行状态,及时发现潜在风险。
三者结合,构建起完善的 可观测性体系,是微服务运维的基石。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)