我有一个基于SpringBoot的web应用程序,它公开了一个Consult health indicator bean。
该bean由SpringBoot的autoconfiguration正确创建和初始化,但是,尽管关联的配置属性“Management.health.consul.Enabled”设置为true,但指示器并未显示在执行器健康endpoint中:
{
"status": "UP",
"components": {
"Kafka": {...},
"SchemaRegistry": {...},
"discoveryComposite": {...},
"diskSpace": {...},
"ping": {...},
"refreshScope": {...}
}
}
经过进一步检查,我发现了负责获取所有可用指示器(HealthEndpointConfiguration.java)的bellow代码段:
@Bean
@ConditionalOnMissingBean
HealthContributorRegistry healthContributorRegistry(ApplicationContext applicationContext,
HealthEndpointGroups groups) {
Map<String, HealthContributor> healthContributors = new LinkedHashMap<>(
applicationContext.getBeansOfType(HealthContributor.class));
if (ClassUtils.isPresent("reactor.core.publisher.Flux", applicationContext.getClassLoader())) {
healthContributors.putAll(new AdaptedReactiveHealthContributors(applicationContext).get());
}
return new AutoConfiguredHealthContributorRegistry(healthContributors, groups.getNames());
}
在这里设置一个断点,我发现实际上,ApplicationContext.GetBeanSofType(HealthContributor.class)调用的输出中并没有列出ConsulHealthIndicator bean,如下面所示:
有人能解释一下为什么这个特定的bean存在于根上下文中而不存在于子上下文中吗?
有没有一种方法可以在子上下文中强制初始化它,这样它就可以在健康endpoint中正确注册?
我附上了一个允许复制该问题的示例项目。我还包括了应用程序使用的Consult配置的示例(您可以通过Consult import命令导入它)。运行上面的示例并转到healthendpoint(localhost:8080/monitoring/health),您将清楚地看到列表中缺少consult组件。
提前谢谢你。
看起来,领事健康指标没有注册到健康贡献者注册表,您可以通过自己注册领事健康检查来解决这个问题。您可以在任何配置文件中添加类似这样的代码段。
@Autowired
public void doRegister(
ConsulHealthIndicator healthIndicator, HealthContributorRegistry healthContributorRegistry) {
healthContributorRegistry.registerContributor("consul", healthIndicator);
}
一旦添加,就会产生如下所示的结果
{
"status": "UP",
"components": {
"consul": {
"status": "UP",
"details": {
"leader": "127.0.0.1:8300",
"services": {
"consul": []
}
}
},
"discoveryComposite": {
"description": "Discovery Client not initialized",
"status": "UNKNOWN",
"components": {
"discoveryClient": {
"description": "Discovery Client not initialized",
"status": "UNKNOWN"
}
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 250685575168,
"free": 17967964160,
"threshold": 10485760,
"exists": true
}
},
"ping": {
"status": "UP"
},
"refreshScope": {
"status": "UP"
}
}
}
我有一个基于SpringBoot的web应用程序,它公开了一个Consor健康指示器bean 在进一步检查后,我发现了负责获取所有可用指标的下面片段(HealthEndpoint Configuration.java): 在这里设置一个断点,我看到ConsultHealthIndicator bean确实没有列在applicationContext的输出中。getBeansOfType(Healt
我们已经在几个项目中使用了Spring Boot,现在我们使用的是最新版本1.2.3。我们正在合并执行器。到目前为止,一切都很顺利,只是我们发现/health指示器[default]显示服务已关闭。事实并非如此。这些服务是通过数据源实现的。它可以调用其他SOAP或Rest服务。卫生服务部门在看什么来衡量一项服务是否下降?
我们正在尝试healthcheck一个Spring Boot应用程序,我们正在计划使用Spring Boot执行器health来获得健康状态。 令人困惑的是,当CassandraHealthIndicator、DiskSpaceHealthIndicator、DataSourceHealthIndicator、ElasticsearchHealthIndicator、JmsHealthIndica
对于我一直在开发的一个微服务,我创建了一个自定义健康检查类,扩展了AbstractHealthIndicator,并能够在中获得输出 但当我向领事注册服务时,健康检查状态为失败。 尝试将执行器url配置为领事健康检查为spring。云领事发现健康检查url=http://localhost:8080/actuator/health。但它仍然失败,出现错误http://localhost:8566/
{“Status”:“Down”} 我需要做什么才能显示自定义健康状况指示器?
我需要改变频率来检查springboot执行器中的DB运行状况。默认DB运行状况检查查询每毫秒执行一次。我想让这个查询每1分钟后执行一次,而不是毫秒。有什么方法可以自定义它吗?