Skip to content
第 62 章 后端 ⏱ 8 分钟阅读

第 62 章:监控与健康检查 ​

学习目标 ​

  • 集成 Spring Boot Actuator
  • 暴露 Prometheus 指标
  • 接入 Grafana 看板

一、Actuator ​

xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
yaml
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus,loggers
  endpoint:
    health:
      show-details: when-authorized     # 只展示健康状态,不展示细节
  metrics:
    tags:
      application: my-app               # 指标加应用标签

端点:

端点用途
/actuator/health健康检查
/actuator/metrics指标
/actuator/prometheusPrometheus 格式
/actuator/loggers动态调整日志级别

自定义健康检查:

java
@Component
public class MyHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        boolean ok = check();
        return ok ? Health.up().build() : Health.down().withDetail("error", "远程服务挂了").build();
    }
}

二、Prometheus + Grafana ​

2.1 Prometheus ​

yaml
<!-- prometheus.yml -->
scrape_configs:
  - job_name: 'spring-boot'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s
    static_configs:
      - targets: ['host.docker.internal:8080']

Docker 启动:

bash
docker run -d --name prometheus -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

2.2 Grafana ​

bash
docker run -d --name grafana -p 3000:3000 grafana/grafana
  1. 访问 http://localhost:3000(默认 admin/admin)
  2. 添加 Prometheus 数据源:http://host.docker.internal:9090
  3. 导入 Spring Boot 看板 ID:11378

三、关键指标 ​

指标含义
jvm_memory_used_bytesJVM 内存
jvm_threads_states_threads线程数
http_server_requests_seconds_countHTTP 请求数
http_server_requests_seconds{quantile="0.99"}P99 延迟
jdbc_connections_active活跃 JDBC 连接
hikaricp_connections_usage_seconds_max连接池等待时间
promql
# P99 延迟
histogram_quantile(0.99, rate(http_server_requests_seconds_bucket[5m]))

# 错误率
sum(rate(http_server_requests_seconds_count{status=~"5.."}[5m]))
  / sum(rate(http_server_requests_seconds_count[5m]))

四、慢 SQL 监控 ​

yaml
spring:
  datasource:
    hikari:
      register-mbeans: true

jdbc_connections_active / hikaricp_connections 看连接池。

Druid(更详细的 SQL 监控):

xml
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
</dependency>
yaml
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 1000

访问 /druid 看监控页面(生产关掉)。

五、链路追踪(Sleuth + Zipkin) ​

xml
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
yaml
spring:
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1.0

自动效果:

  • 日志自动加 traceId / spanId
  • HTTP 头自动传 traceId
  • 可以串起一个请求的全链路

六、告警 ​

yaml
# alertmanager.yml
groups:
  - name: my-app
    rules:
      - alert: HighErrorRate
        expr: |
          sum(rate(http_server_requests_seconds_count{status=~"5..",application="my-app"}[5m]))
            / sum(rate(http_server_requests_seconds_count{application="my-app"}[5m])) > 0.05
        for: 5m
        annotations:
          summary: "错误率超过 5%"

七、本章小结 ​

要点关键
Actuator健康检查 + 指标
Prometheus时序数据库
Grafana看板
关键指标P99 延迟、错误率、连接池
链路追踪Sleuth + Zipkin

动手练习 ​

  1. 部署 Prometheus + Grafana
  2. 导入 Spring Boot 看板,看 P99 延迟

下一章:第 63 章:单元测试与集成测试 →

本站基于 VitePress 构建 · 由 StackHub 团队维护