第五部分:运维与监控篇

可观测性模式

在微服务架构中,可观测性(Observability) 是保障系统稳定性的重要能力。
可观测性主要包括三个维度:

  1. Tracing(分布式追踪)
  2. Logging(日志聚合)
  3. 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. 验证
  1. 启动 Spring Boot 应用:

    mvn spring-boot:run
    
  2. 访问接口:

    curl http://localhost:8080/hello
    
  3. 打开 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(指标 & 告警):监控运行状态,及时发现潜在风险。

三者结合,构建起完善的 可观测性体系,是微服务运维的基石。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐