spring boot 2.0访问actuator endpoints 404问题

解决SpringBoot 2.0后/metrics等端点访问返回404问题,需在配置文件中设置management.endpoints.web.exposure.include属性,正确管理各端点的启用与暴露状态。

在spring boot 2.0 之后访问/metrics,/routes等端点,一直返回404。访问/actuator端点查看,发现只有health和info的信息。

{
    "_links": {
        "self": {
            "href": "http://localhost:8081/actuator",
            "templated": false
        },
        "health": {
            "href": "http://localhost:8081/actuator/health",
            "templated": false
        },
        "info": {
            "href": "http://localhost:8081/actuator/info",
            "templated": false
        }
    }
}

在网上查解决方案,写的五花八门。最后查看官方文档,发现了问题:

每个actuator端点(endpoint)都有enable和exposed两个属性:如果想要通过HTTP访问他们,就需要两个属性均为true。

默认情况下:

  1. 只有/health和/info的exposed是true
  2. 除了/shutdown其他所有的端点都是enable。

我们可以通过在spring boot 配置文件中配置management.endpoints.web.exposure.include的属性来管理各个端点:

  • 选择若干个要开启的端点。
    management.endpoints.web.exposure.include=["auditevents","health","info"]

  • 开启全部端点:
    management.endpoints.web.exposure.include=*

    在yaml中,需要加上""
    management.endpoints.web.exposure.include="*"

  • 如果想要enable /shutdown端点:
    management.endpoint.shutdown.enabled=true

  • 如果想要暴露所有enable的web端点除了env:
    management.endpoints.web.exposure.include=*
    management.endpoints.web.exposure.exclude=env

参考spring boot github wiki

### 解决 Spring Boot Actuator 访问时出现的 404 错误 当遇到 Spring Boot Actuator 的端点返回 404 错误时,通常是因为应用程序配置不正确或某些必要的设置被遗漏。以下是几种可能的原因及其解决方案: #### 配置文件中的管理端口和路径检查 默认情况下,Spring Boot 应用程序会暴露一些基本的健康检查和其他监控信息到 `/actuator` 路径下。如果更改了 `management.server.port` 或者设置了自定义的基础 URL,则需要确保请求发送到了正确的地址。 对于大多数应用来说,默认行为已经足够;但如果确实修改过这些属性,在尝试访问任何 actuator endpoint 前应该先确认它们是否指向预期的位置[^1]。 ```yaml # application.yml example server: port: 8080 management: server: port: 8081 # 如果指定了不同的管理服务器端口号,请确保使用该端口来访问 endpoints endpoints: web: exposure: include: "*" # 允许公开所有内置endpoint, 生产环境中应谨慎考虑安全因素并仅开放必要项 ``` #### 添加所需依赖关系 为了使 Actuator 功能正常工作,必须在项目的构建描述符 (pom.xml 对于 Maven 构建工具而言) 中引入 spring-boot-starter-actuator 和其他相关组件作为依赖项。这一步骤已经在给定的信息中提到过了。 #### 启用特定 Endpoint 并验证安全性策略 有时即使添加了上述依赖并且没有改变默认配置,仍然无法看到想要查看的数据。这是因为并非所有的 endpoint 默认都是可访问的——特别是那些涉及敏感操作或数据泄露风险较高的部分。因此还需要进一步调整哪些 endpoint 可以对外提供服务以及谁有权限对其进行调用。 可以通过编辑 application.properties 或 .yml 文件来进行这项设定: ```properties # application.properties example management.endpoints.web.exposure.include=health,prometheus # 明确指定要启用的具体endpoints名称列表 spring.security.user.name=admin # 设置用于保护endpoint的安全认证用户名 spring.security.user.password=secret # 密码也需相应地给出 ``` 另外值得注意的是关于安全性的考量:虽然可以简单地将所有 endpoint 设为 public (`*`) 来快速解决问题,但这并不是一个好的实践方法。相反应当仔细评估每一个 endpoint 是否真的有必要对外开放,并采取适当措施防止潜在威胁的发生,比如通过 HTTPS 加密传输、限制 IP 地址范围等方式加强防护力度[^2]。 最后提醒一点就是版本兼容性问题也可能引起类似的错误提示。确保所使用的 Spring Boot 版本与 Actuator 组件之间不存在冲突是非常重要的。如果有条件的话建议升级至最新稳定版以获得更好的支持和服务质量保障。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值