可观测性(Observability)是现代分布式系统的"眼睛"。没有它,你就像在黑暗中开飞机——只有当坠毁时才知道出了问题。本文将构建一个从网关到数据库的完整可观测性体系。
可观测性的三大支柱
| 支柱 | 核心问题 | 工具 |
|---|---|---|
| Metrics | 系统是否健康?QPS 是多少? | Prometheus + Grafana |
| Tracing | 一个请求经过了哪些服务?哪里慢了? | Micrometer Tracing + Zipkin/ARMS |
| Logging | 具体发生了什么错误? | SLS / ELK |
Spring Boot 3 Micrometer 集成
management:
endpoints:
web:
exposure:
include: health,info,prometheus,metrics
metrics:
tags:
application: ${spring.application.name}
export:
prometheus:
enabled: true
tracing:
sampling:
probability: 1.0 # 开发 100%,生产 0.1
propagation:
type: w3c自定义业务指标
@RestController
public class OrderController {
private final Counter orderCounter;
private final Timer orderTimer;
public OrderController(MeterRegistry meterRegistry) {
this.orderCounter = Counter.builder("orders.created.total")
.description("Total orders created")
.register(meterRegistry);
this.orderTimer = Timer.builder("orders.create.duration")
.description("Order creation duration")
.register(meterRegistry);
}
@PostMapping("/orders")
public Result createOrder(@RequestBody OrderDTO dto) {
return orderTimer.record(() -> {
Order order = orderService.create(dto);
orderCounter.increment();
return Result.success(order);
});
}
}Prometheus 配置
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'spring-boot'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['backend:8080']
- job_name: 'mysql'
static_configs:
- targets: ['mysql-exporter:9104']
- job_name: 'redis'
static_configs:
- targets: ['redis-exporter:9121']Grafana 告警规则
# alerts.yml
groups:
- name: spring-boot-alerts
rules:
- alert: HighErrorRate
expr: rate(http_server_requests_seconds_count{status=~"5.."}[5m]) > 0.05
for: 2m
labels:
severity: critical
annotations:
summary: "错误率超过 5%"
- alert: JvmHeapUsage
expr: sum(jvm_memory_used_bytes{area="heap"}) / sum(jvm_memory_max_bytes{area="heap"}) > 0.85
for: 5m
labels:
severity: warning
annotations:
summary: "JVM 堆内存使用超过 85%"JVM 诊断大盘关键指标
需要重点监控:堆内存使用率(超过 85% 需排查内存泄漏)、GC 暂停时间(P99 应 < 100ms)、线程数(突增可能是线程泄漏)、类加载数(持续增长提示动态代理滥用)。
GC 调优决策树
低延迟(< 10ms):ZGC。吞吐量优先:Parallel GC。内存受限:Serial GC。通用场景:G1 GC(JDK 9+ 默认)。
# 生产 JVM 参数推荐
-XX:+UseZGC
-Xms4g -Xmx4g
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof阿里云 ARMS 集成
ARMS 优势:开箱即用的应用拓扑图、基于历史基线的智能告警、代码级诊断直接定位到慢调用行。Spring Boot 只需添加一个 starter,ARMS Agent 自动完成探针注入。
总结
可观测性不是一套工具,而是一种能力。构建这个能力的关键是"三个一":一个 Metrics 仪表盘看到全局健康、一个 Tracing ID 串联整个调用链、一个日志平台搜索所有上下文。
评论 (0)