当前位置: 首页 > 知识库问答 >
问题:

当所有组都启动时,执行器运行状况终结点返回OUT OF_服务

范玄裳
2023-03-14

我试图为部署到k8s的应用程序设置就绪探测,但在执行器/健康endpoint下,与执行器/健康/就绪endpoint相比,我得到了不同的状态。

重要的是,只有当应用程序部署到k8s集群时,才会观察到这种行为。

因此,在应用程序中没有任何额外的配置。属性我正在获取的文件:

➜  ~ curl localhost:8080/actuator/health
{"status":"OUT_OF_SERVICE","groups":["liveness","readiness"]}%
➜  ~ curl localhost:8080/actuator/health/liveness
{"status":"UP"}%
➜  ~ curl localhost:8080/actuator/health/readiness
{"status":"OUT_OF_SERVICE"}%

这似乎是正确的——如果准备状态是OUT_OF_SERVICE,健康endpoint也会返回OUT_OF_SERVICE,因为它包括准备状态组。这至少是一致的。

另一方面,当我在应用程序中指定准备就绪组中应该包括什么时。属性它似乎报告了不一致的结果。在我的例子中,我在配置文件中添加了一个条目,即:management。endpoint。健康组准备就绪include=ping

这一次,这就是我发送与以前相同的请求集的结果:

➜  ~ curl localhost:8080/actuator/health
{"status":"OUT_OF_SERVICE","groups":["liveness","readiness"]}%
➜  ~ curl localhost:8080/actuator/health/liveness
{"status":"UP"}%
➜  ~ curl localhost:8080/actuator/health/readiness
{"status":"UP"}%

这是不一致的-当活跃度和准备度endpoint返回状态时,我希望在健康endpoint中看到相同的状态。

我正在寻找一个解释,我在这里误解了什么,以及为什么它是这样工作的。

为了简化操作,我创建了一个小应用程序,您可以在集群上验证这种行为:https://github.com/gebertdominik/actuator-bug


共有1个答案

阎元徽
2023-03-14

如文档中所述,在调用应用程序和命令行运行程序之前,应用程序尚未准备好处理流量。调用EventConsumer的命令行运行程序永远不会返回,因此应用程序永远不会准备好处理流量。

如果将健康endpoint配置为始终显示详细信息,则更容易看到其效果:

management.endpoint.health.show-details=always

健康终结点现在显示了聚合以生成整体健康的所有单个组件:

{
    "components": {
        "diskSpace": {
            "details": {
                "exists": true,
                "free": 465064448000,
                "threshold": 10485760,
                "total": 1000240963584
            },
            "status": "UP"
        },
        "livenessState": {
            "status": "UP"
        },
        "ping": {
            "status": "UP"
        },
        "readinessState": {
            "status": "OUT_OF_SERVICE"
        }
    },
    "groups": [
        "liveness",
        "readiness"
    ],
    "status": "OUT_OF_SERVICE"
}

OUT_OF_SERVICE由于readinessState组件的状态而返回。

在其默认配置中,就绪状态(readinessState)由准备就绪(readiness)组使用,并且它也返回出服务。通过设置<代码>管理。endpoint。健康组准备就绪include=ping,您已经创建了自己的自定义就绪组,该组仅包括ping组件。它现在返回UP,这与整体健康响应中ping组件的状态一致。如文档所示,在自定义readinessGroup时,您应该包括readinessState:

management.endpoint.health.group.readiness.include=readinessState,ping

 类似资料:
  • 在我的项目中,我不想使用。我的application.java有、和注释。 我在pom.xml中添加了Spring Boot执行器依赖项。但是,当我尝试访问时,得到的是404。我相信我需要指定一些配置类作为导入注释的一部分。我需要帮助弄清楚配置是什么。

  • 我有一个WebFlux、Health Actuctor和Spring Security的项目。我正在尝试构建自定义身份验证,但该身份验证也会在健康执行器endpoint上发挥作用。我怎样才能禁用它? 根据文档,我实现了一个自定义的,下面是它的基本版本: 根据文档,不应该要求我进行任何额外的配置来禁用健康endpoint上的身份验证。以下是中的配置: 尽管添加了此功能,但仍会导致状态代码也是。如何禁

  • 我已经用spring Security保护了我的spring boot应用程序(基本身份验证)。我为可以使用监视和管理的用户添加了角色管理。我设置management.security.roles=management。具有此角色的用户只能看到状态(使用运行状况终结点)。如果我设置management.security.role=management,则一切正常(具有此角色的用户可查看所有健康参数

  • 我的一个服务/执行器/健康endpoint花费了更多时间(大约9秒)。我正在使用以下依赖项,如何调试? 使用的Spring引导版本:2.0.3.RELEASE 谢谢,哈里

  • 我最近将SpringBoot项目从1.1升级到1.4,突然,“/health”endpoint的测试开始失败 发生的事情是:第一个测试总是通过,而第二个测试总是失败。输出为200。如果顺序颠倒,也会发生同样的情况,所以 这一次,503失败了。如果我添加线程。在像这样的实际Rest电话之前先睡一觉 那它每次都会过去!因此,Spring似乎在中引入了一些更改,并且需要一些时间来配置一个模拟(可能现在在

  • 我正在使用Java传输客户端库在Spring boot 1.5.8.RELEASE上使用Elastic Search 5.5.0。 弹性搜索与docker一起部署在一个容器中。它工作得很好。来自java应用程序的查询也运行良好。 问题是,Elasticsearch运行状况检查几乎每次从我的本地机器启动Spring时都会失败,如下异常所示。我没有在我的应用程序中明确调用任何健康检查。 如何在每次启动