【发布时间】:2020-10-30 21:50:50
【问题描述】:
我正在尝试配置 Actuator 的运行状况探测,以包括对嵌套在第一级之外的外部服务的检查。例如,当调用 /actuator/health 时,这些是可用的健康指标:
{
"status":"DOWN",
"components":{
"jms":{
"status":"DOWN",
"components":{
"broker1":{
"status":"DOWN",
"details":{
"error":"javax.jms.JMSException: Failed to create session factory"
}
},
"broker2":{
"status":"UP",
"details":{
"provider":"ActiveMQ"
}
}
}
},
"livenessState":{
"status":"UP"
},
"readinessState":{
"status":"UP"
}
},
"groups":[
"liveness",
"readiness"
]
}
在 jms 组件下,有两个代理 - broker1 和 broker2。我可以配置 Actuator 以将 jms 包含在准备组中,例如:
endpoint:
health:
probes:
enabled: true
enabled: true
show-details: always
group:
readiness:
include: readinessState, jms
但是,这将包括就绪探测中的所有代理。
当调用 /actuator/health/readiness 时,我得到:
{
"status":"DOWN",
"components":{
"jms":{
"status":"DOWN",
"components":{
"broker1":{
"status":"DOWN",
"details":{
"error":"javax.jms.JMSException: Failed to create session factory"
}
},
"broker2":{
"status":"UP",
"details":{
"provider":"ActiveMQ"
}
}
}
},
"readinessState":{
"status":"UP"
}
}
}
由于 Kubernetes 中的就绪探测只会阻止将 Web 请求路由到我的 pod,所以我可以在 broker1 关闭时处理请求,只要 broker2起来了。有没有办法将执行器配置为在健康组中包含嵌套的健康指标,而不仅仅是根指标?我尝试了 broker1、jms.broker1、jms/broker1、jms\broker1 等组合,但无济于事。
如果不直接通过配置支持,是否有我可以创建的自定义组件给我所需的行为。例如,我想到了编写自定义 CompositeHealthContributor 的可能性,但我不确定是否可以聚合现有的健康指标。我不想复制已经完成的健康检查。
另一个相关用例是只要一组外部资源中的一个可用,就认为服务是健康的。例如,我在两个数据中心有一个相同的代理。只要其中一位经纪人可用,那么我的服务就可以被认为是健康的。对于这个用例有什么好的方法?
【问题讨论】:
-
你解决了吗?
-
现在我正在返回另一个处于向上或向下状态的
Health对象。
标签: spring-boot-actuator health-check