我正在为我的 spring 应用程序设置健康检查,作为它的一部分,我创建了一个自定义健康指标来检查下游调用自己的健康检查。如果停机,则下游呼叫标记为
DOWN
。现在,健康检查如下所示
{
"status" : "DOWN",
"downstreamCall" : {
"status" : "DOWN",
"Error Code" : 1
},
.
.
.
"diskSpace" : {
"status" : "UP",
"free" : 209047318528,
"threshold" : 10485760
}
}
所以
downstreamCall
被标记为关闭,当它关闭时,这是应该的。但是,当downstreamCall
被标记为down时,我希望整体状态被标记为DEGRADED
,如下图。
{
"status" : "DEGRADED",
"downstreamCall" : {
"status" : "DOWN",
"Error Code" : 1
},
.
.
.
"diskSpace" : {
"status" : "UP",
"free" : 209047318528,
"threshold" : 10485760
}
}
这是专门针对downstreamCall的。
DOWN
的健康检查的任何其他部分仍应导致整体状态为 DOWN
。我一直在查看 Spring 文档以及此处的问题,但还没有找到实现此目的的方法。
不清楚它是什么时候添加的,但是因为至少支持 SpringBoot 2(及更高版本)自定义类型...
另见:https://docs.spring.io/spring-boot/docs/2.2.x/reference/html/production-ready-features.html
将以下内容添加到您的
application.yml
:
management.endpoint.health.status:
order: fatal,down,out-of-service,jones,unknown,up
http-mapping:
up: 200
jones: 410
down: 200
fatal: 500
out-of-service: 503
然后,在自定义健康组件中,您可以执行以下操作:
Health.Builder jonser = Health.status("jones");
// Add more detail here if you'ld like.
return jonser.build();
注意,在我的测试中,如果您跳过
order
部分,状态将显示为UNKNOWN
。