📈 可观测性:监控、日志与追踪
构建生产级系统,必须要有一套完整的监控运维体系(Observability)。
👁️ Spring Boot Actuator
Actuator 是 Spring Boot 提供的生产级特性,暴露应用内部运行指标。
开启端点
注意安全:生产环境尽量避免暴露所有端点,且必须配合 Spring Security 进行权限控制。
yaml
management:
endpoints:
web:
exposure:
include: "health,info,metrics,prometheus" # 仅暴露必要端点
endpoint:
health:
show-details: always # 显示详细健康信息 (磁盘、DB链接)
metrics:
tags:
application: ${spring.application.name} # 为所有指标打上应用名标签📊 Prometheus + Grafana
对接 prometheus
MycroMeter 会自动将指标适配为 Prometheus 格式。
- 引入依赖:xml
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> - 访问
/actuator/prometheus查看抓取数据。 - 配置 Prometheus
scraper定时拉取此接口。
监控大盘 (Dashboard)
推荐 Grafana 面板 ID:
- JVM (Micrometer): ID
4701 - Spring Boot 2.1 System Monitor: ID
11378
📝 日志管理 (ELK/EFK)
推荐使用 Logback 异步记录日志,并输出 JSON 格式以便 Logstash/Filebeat 收集。
Logback 异步配置
xml
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>512</queueSize>
<appender-ref ref="FILE"/>
</appender>MDC 链路追踪
在日志中加入 TraceId,便于串联请求链路。
java
MDC.put("traceId", UUID.randomUUID().toString());
try {
// 业务逻辑
} finally {
MDC.clear();
}提示:Spring Cloud Sleuth / Micrometer Tracing 可以自动完成此工作。
🔗 分布式链路追踪
对于微服务架构,集成 Zipkin 或 SkyWalking。
- Trace: 一次完整的用户请求链路。
- Span: 链路中的基本工作单元(如一次 RPC 调用)。