Spring Boot Actuator监控运维详解

Spring Boot Actuator监控运维详解

定位:第 06 篇,讲透 Actuator 端点体系、健康检查与探针、指标(Micrometer)、日志管理与端点安全纪律

适用版本:Spring Boot 3.x(JDK 17+)


目录


一、端点体系

1.1 定位

Actuator 提供生产级监控与运维能力 :查看应用健康、指标、配置、容器状态,并执行部分操作(调日志、停机)。引入 spring-boot-starter-actuator 即开启。

1.2 传输与路径

复制代码
HTTP:/actuator/{endpointId}      ← 主流
JMX:管理 Bean 形式

1.3 常用端点

端点 用途
health 应用与依赖健康状态
info 应用元信息(版本/构建)
metrics 指标(配合 Prometheus)
env / configprops 环境/配置属性快照
beans / conditions 容器 Bean / 自动配置条件快照
loggers 查看/修改日志级别
threaddump / heapdump 线程/堆转储(诊断)
shutdown 优雅停机(默认关闭,危险)

1.4 暴露控制

复制代码
默认:Web 只暴露 health
management.endpoints.web.exposure.include=health,info,metrics,prometheus
management.endpoints.web.exposure.exclude=...
单个端点开关:management.endpoint.{id}.enabled

纪律:最小暴露原则------默认关、按需开,敏感端点严格保护(见第四节)。


二、健康检查

2.1 HealthIndicator

/actuator/health 聚合各 HealthIndicator 的结果:

复制代码
内置:数据库、Redis、磁盘、ping、Mail 等(按依赖自动装配)
自定义:
@Component
public class DownstreamHealth implements HealthIndicator {
    public Health health() {
        boolean ok = checkDownstream();
        return ok ? Health.up().build() : Health.down().withDetail("reason", "...").build();
    }
}

状态:UP / DOWN / OUT_OF_SERVICE;聚合取最差状态。

2.2 探针(K8s 集成)

复制代码
management.endpoint.health.probes.enabled=true
/actuator/health/liveness    ← 存活:进程是否健康,失败则重启
/actuator/health/readiness   ← 就绪:能否接流量,失败则摘流

区分意义:启动慢的应用"活着但未就绪"------liveness 通过避免被误杀,readiness 未通过则不接流量(无损上线,呼应 06 篇无损上下线)。

2.3 细节展示控制

复制代码
management.endpoint.health.show-details=never/when-authorized/always

生产建议 when-authorized(鉴权后可见)或 never,不向公网暴露依赖细节。


三、指标

3.1 Micrometer

Boot 用 Micrometer 作指标门面,内置大量自动指标:

复制代码
JVM:内存、GC、线程
HTTP:server.http.server.requests(含 uri/method/status 标签)
数据源、线程池、任务调度等

3.2 自定义指标

java 复制代码
@Component
class OrderMetrics {
    private final Counter orderCounter;
    OrderMetrics(MeterRegistry registry) {
        orderCounter = registry.counter("orders.created");
    }
    void onCreate() { orderCounter.increment(); }
}

类型:Counter(计数)、Gauge(瞬时值)、Timer(耗时)。

3.3 对接监控系统

复制代码
引入 micrometer-registry-prometheus
→ /actuator/prometheus 输出 Prometheus 格式
→ Prometheus 抓取 + Grafana 展示

核心告警三件套(呼应可观测篇):成功率下跌、P99 延迟突增、线程池/连接池积压------都可由内置指标推导。


四、日志与安全

4.1 loggers 端点(排障利器)

复制代码
GET  /actuator/loggers/com.demo      查看级别
POST /actuator/loggers/com.demo  {"configuredLevel":"DEBUG"}
→ 运行期临时开 DEBUG 排障,排完改回,无需重启

4.2 端点安全纪律

风险 措施
敏感信息泄露(env 含配置、heapdump 含内存) 最小暴露 + 鉴权(Spring Security 保护)或仅内网
危险操作(shutdown) 默认不启用;确需则强鉴权
与业务端口混用 独立管理端口 management.server.port=8081,防火墙隔离
复制代码
management.server.port=8081      ← 管理端口与业务分离

生产基线:独立端口 + 最小暴露 + 敏感端点鉴权/内网 + 探针只开 health。


五、总结

  1. 端点体系 :HTTP /actuator/{id} 提供健康/指标/配置/容器快照/运维操作;默认只暴露 health,按需 include,最小暴露。
  2. 健康检查:HealthIndicator 聚合(内置 + 自定义);K8s 探针分 liveness/readiness,支撑无损上下线;细节按需展示。
  3. 指标:Micrometer 门面 + 内置自动指标 + 自定义 Counter/Timer;Prometheus 对接,成功率/延迟/积压三件套告警。
  4. 运维与安全:loggers 运行期调级排障;敏感/危险端点鉴权或内网;管理端口与业务端口分离。

六、常见高频面试题

1. Actuator 是什么?有哪些常用端点?

要点:Spring Boot 提供的生产级监控与运维模块,通过 HTTP(/actuator/)或 JMX 暴露端点。常用:health(健康)、info(元信息)、metrics(指标)、env/configprops(配置)、beans/conditions(容器快照)、loggers(日志级别管理)、threaddump/heapdump(诊断)、shutdown(停机,默认关)。引入 actuator starter 后按需暴露,默认只开 health。

2. /actuator/health 是怎么工作的?如何自定义?

要点:聚合各 HealthIndicator 的结果,状态取最差(UP/DOWN/OUT_OF_SERVICE)。Boot 按依赖自动装配内置检查(数据库、Redis、磁盘等);实现 HealthIndicator 接口注册自定义检查(如探下游服务),返回 Health.up()/down() 及详情。可分组、可控制详情展示(show-details)。它是容器编排健康探针与告警的基础。

3. liveness 和 readiness 探针的区别?为什么都要有?

要点:liveness 表示进程是否存活------失败则重启容器;readiness 表示是否准备好接流量------失败则暂时摘流但不重启。启动慢或临时繁忙的应用"活着但未就绪",只有 liveness 会被误杀或接到流量被打垮。区分二者实现:启动期不接流量(无损上线)、临时过载摘流自愈而不重启。Boot 通过 health.probes.enabled 提供 /health/liveness 与 /health/readiness。

4. Boot 怎么对接 Prometheus 监控?

要点:引入 micrometer-registry-prometheus,Actuator 自动暴露 /actuator/prometheus 端点输出 Prometheus 文本格式;Prometheus 定时抓取该端点,存入时序库,Grafana 展示。内置指标覆盖 JVM、HTTP 请求、数据源等;业务指标用 Micrometer 的 Counter/Timer/Gauge 自定义。告警关注成功率、延迟分位数、资源积压。

5. 如何在运行期临时调整日志级别排查问题?

要点:用 loggers 端点:POST /actuator/loggers/{logger名},body 传 {"configuredLevel":"DEBUG"},即时生效无需重启;排障完改回原级别(或设 null 恢复继承)。这是线上排障利器------动态打开特定包的 DEBUG 看细节。注意该端点敏感,应鉴权/内网保护,且临时提级后及时恢复,避免日志风暴。

6. Actuator 端点有哪些安全风险?如何防护?

要点:风险:env/heapdump 泄露配置与内存敏感数据,shutdown 可远程停机,threaddump 暴露内部。防护:最小暴露(默认只 health,按需 include);敏感端点用 Spring Security 鉴权或限制内网访问;管理端口独立(management.server.port)并用防火墙隔离;show-details 不对外。生产基线是"独立端口 + 最小暴露 + 强鉴权"。

7. 如何自定义业务指标?

要点:注入 Micrometer 的 MeterRegistry,创建合适类型:Counter 计数(如订单创建数)、Timer 耗时(如接口延迟)、Gauge 瞬时值(如队列长度)。业务关键路径埋点(如下单成功/失败、外部调用耗时),配合标签维度(业务类型)便于聚合。这些业务指标 + 内置指标构成完整的可观测面,接入 Prometheus 后可告警。

8. management.server.port 有什么作用?

要点:把 Actuator 管理端点与业务端口分离到独立端口。好处:防火墙可只对内网/运维网开放管理端口,业务端口对外,敏感端点天然隔离;监控抓取、探针、运维操作走管理端口,不影响业务流量与安全策略。是生产部署的推荐做法。

9. @Endpoint 如何自定义一个新端点?

要点:用 @Endpoint(id="xxx") 标注类,方法上用 @ReadOperation(GET)、@WriteOperation(POST)、@DeleteOperation 声明操作,参数可绑定路径/请求体。注册为 Bean 后即可通过 /actuator/xxx 访问。适合暴露自定义运维能力(如手动触发缓存刷新、查看内部状态)。自定义端点同样要遵守暴露与鉴权纪律。

10. 生产环境推荐的 Actuator 配置基线?

要点:① 独立管理端口(management.server.port)防火墙隔离;② 最小暴露:health、info、prometheus 为主,敏感端点(env/heapdump/shutdown)不开或强鉴权;③ 开启探针(health.probes)支撑 K8s 无损上下线;④ health 详情 when-authorized;⑤ 接入 Prometheus+Grafana,围绕成功率/延迟/积压设告警。原则:监控能力全开,暴露面最小。

相关推荐
vipxieliang5 小时前
ValidX 财务系统发票验证:发票号、税号、金额校验
java·spring boot
天空鸟_时光不老5 小时前
06-给AI流程加一道人工闸门
java·人工智能·spring boot·后端·spring·spring cloud·架构
阿俊-全栈开发5 小时前
LikeShop单商户Java商城如何从容承接高并发流量?
java·开发语言·spring boot·spring·系统架构
天空鸟_时光不老5 小时前
01-我不转Python把AI塞进Java里
java·人工智能·spring boot·后端·spring·spring cloud·架构
SL_staff5 小时前
3分钟零代码配置带审批流的报销单:JVS三引擎可视化串联实战
spring boot·开源·全栈
vx_Biye_Design5 小时前
flask学生课程笔记共享系统29026-计算机课程设计、毕业设计
java·javascript·spring boot·后端·elasticsearch·flask·课程设计
骑着蜗牛撵大象3276 小时前
SpringBoot+Vue3 企业智能体侧挂架构:独立服务、独立数据库与主线零侵入落地
数据库·spring boot·架构·vue·springboot·事件驱动·服务拆分
2501_933923256 小时前
SpringCloud:通过订单服务认识什么是微服务
spring boot·后端·spring cloud
天空鸟_时光不老6 小时前
07-检查点与状态持久化
java·人工智能·spring boot·spring·spring cloud·kafka·maven