Spring Boot /actuator 返回 404 未找到

Posted

技术标签:

【中文标题】Spring Boot /actuator 返回 404 未找到【英文标题】:Spring Boot /actuator returns 404 not found 【发布时间】:2019-09-16 12:47:47 【问题描述】:

我正在使用 spring boot 2.1.4.RELEASE,目前正在尝试访问 http://localhost:8080/actuator,但我发现 404 未找到。我不确定我在这里做错了什么。下面是我的 pom 依赖项-

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dir</groupId>
    <artifactId>api</artifactId>
    <version>2.4.0</version>
    <packaging>jar</packaging>

    <name>Search</name>
    <description>Search</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <distributionManagement>
        <repository>
            <id>Releases</id>
            <name>repo1.releases</name>
            <url>http://www.something.com</url>
        </repository>
        <snapshotRepository>
            <id>Snapshots</id>
            <name>repo1.com</name>
            <url>http://repo1.com/artifactory/Snapshots</url>
        </snapshotRepository>
    </distributionManagement>


    <properties>
        <!--These two should be in all ParentPOMs -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- Keep this version in sync with the pom's version ignoring "-SNAPSHOT" -->
        <applicationVersion>1.0.0</applicationVersion>
        <elasticsearch.version>5.2.0</elasticsearch.version>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.4.0</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.4.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.7</version>
        </dependency>



        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>x-pack-transport</artifactId>
            <version>5.2.1</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.2.0</version>
        </dependency>

        <dependency>
            <groupId>apache-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.1</version>
        </dependency>



        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- Spring boot actuator to expose metrics endpoint -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- Micormeter core dependecy  -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-core</artifactId>
        </dependency>
        <!-- Micrometer Prometheus registry  -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>




    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <environmentVariables>
                        <version>9.9.9</version>
                        <basePath>http://sample-basepath.com</basePath>

                    </environmentVariables>
                </configuration>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>

    </build>


</project>

属性文件配置

management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
management.endpoint.health.show-details=always
management.endpoint.beans.enabled=true

当我运行应用程序时,我确实在控制台中看到了这个

2019-04-27 00:04:25.406  INFO 32522 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 16 endpoint(s) beneath base path '/actuator'
2019-04-27 00:04:25.534  INFO 32522 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '/myendpoint'

【问题讨论】:

你试过http://localhost:8080/myendpoint/actuator吗? 【参考方案1】:

请检查您是否配置了server.servlet.contextPath=/myendpoint

如果你这样做了,请尝试 localhost:8080/server.servlet.contextPath/actuator

【讨论】:

是的,我已经配置了 server.servlet.context-path=/myendpoint,但是当我尝试通过浏览器或邮递员访问 - localhost:8080/myendpoint/actuator 时,我得到的是 401 未授权而不是 404 未找到。 我的应用使用 application.yml 而不是 application.properties,我发现上下文路径设置为 server: context-path: /some/path【参考方案2】:

Spring Boot Actuator URL 通过 SpringBoot Releases 改变, 最初我们可以使用https://localhost:8080/actuator访问Actuator URL

在 springboot 2.0.0 的早期里程碑版本中,URL 是 https://localhost:8080/application

现在的springboot版本可以通过https://localhost:8080/actuator访问

【讨论】:

我尝试访问 localhost:8080/actuator 而不是 localhost:8080/actuator,现在我看到 java.lang.IllegalArgumentException: Invalid character found in method name。 HTTP 方法名称必须是标记。我相信这是因为我的客户端端点没有配置 https。 亲爱的@JonAbraham 您提到两者都为 localhost:8080/actuator 有什么区别?【参考方案3】:

按照上面的答案试试

 http://localhost:8080/<server.servlet.context-path>/actuator/

但是如果它显示错误,那么可能的原因是你没有在 pom.xml 中包含依赖项

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

【讨论】:

【参考方案4】:

某些执行器端点已禁用,必须先启用才能使用它们。我试图访问/actuator/beans,结果证明它就是这样一个端点。根据the docs,您只需在application.properties 文件中启用它们:

management.endpoints.web.exposure.include=health,info,beans

【讨论】:

【参考方案5】:

我认为您的应用程序中有一个上下文路径 /myendpoint

请尝试使用此端点 http://localhost:8080/myendpoint/actuator

【讨论】:

我试过这个,现在我得到 401 未经授权。 你能分享完整的 pem.xml 文件吗@JonAbraham @RAJKUMAR 我已经发布了完整的 POM.xml 文件供您查看 我在添加执行器依赖项后看到问题出在控制台中,我看不到这些类型的日志 -sbaewsWebMvcEndpointHandlerMapping : Mapped "[/actuator/auditevents],methods=[GET] ,produces=[application/vnd.spring-boot.actuator.v2+json || application/json]" 到公共 java.lang.Object 只是一个更新,我可以看到回复 - localhost:8080/actuator。我只是删除了执行器 jar 并进行了 Maven 全新安装。之后我能够看到响应【参考方案6】:

即使在完全遵循 Spring 文档之后,我也遇到了相同的 404 错误。最终对我有用的是删除执行器依赖项和 jar,然后使用 mvn clean install 再次添加它。成功了:)

【讨论】:

【参考方案7】:

这是我在谷歌上搜索遇到的类似问题时的第一个结果。不幸的是,上述解决方案都不适合我,但另一个消息来源提到我需要设置管理端口:

management.server.port=8080

这让我可以打

 http://localhost:8080/actuator/

【讨论】:

也可以考虑management.endpoints.web.base-path=/manage【参考方案8】:

这对我来说是版本冲突,这就是未公开执行器端点的原因。我从 pom 文件中删除了 spring-boot-starter-actuator 的版本以使其工作

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <!--<version>1.5.6.RELEASE</version>-->
</dependency>

【讨论】:

【参考方案9】:

因为你误会了。

暴露的端点有两种方式,请仔细阅读文档。一个暴露给 JMX,另一个暴露给 WEB。

显然,如果您启用 bean 端点,它只会暴露给 JMX。

【讨论】:

【参考方案10】:

如果你得到 401 未授权,那么你应该在你的令牌中添加滚动“ACTUATOR”,那么只有你能够点击应用程序的 /actuator 端点。

【讨论】:

以上是关于Spring Boot /actuator 返回 404 未找到的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Spring Boot Actuator 返回 404 而不是 401?

Spring Boot Actuator /env 端点以 XML 形式返回数据 - 为啥?

Spring Boot Actuator 为 Docker 上的应用程序返回

Spring Boot Actuator 漂亮的打印 JSON

Spring Boot Actuator

Spring Boot 使用 actuator/logfile 乱码问题