第 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/prometheus | Prometheus 格式 |
/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/prometheus2.2 Grafana
bash
docker run -d --name grafana -p 3000:3000 grafana/grafana- 访问 http://localhost:3000(默认 admin/admin)
- 添加 Prometheus 数据源:http://host.docker.internal:9090
- 导入 Spring Boot 看板 ID:11378
三、关键指标
| 指标 | 含义 |
|---|---|
jvm_memory_used_bytes | JVM 内存 |
jvm_threads_states_threads | 线程数 |
http_server_requests_seconds_count | HTTP 请求数 |
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: truejdbc_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 |
动手练习
- 部署 Prometheus + Grafana
- 导入 Spring Boot 看板,看 P99 延迟
下一章:第 63 章:单元测试与集成测试 →