我试图为部署到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
如文档中所述,在调用应用程序和命令行运行程序之前,应用程序尚未准备好处理流量。调用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时都会失败,如下异常所示。我没有在我的应用程序中明确调用任何健康检查。 如何在每次启动