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

Spring Boot 2迁移后不导出运行状况终结点度量

姜弘化
2023-03-14

我的团队将我们的微服务从Spring Boot1迁移到了版本2,由于执行器发生了变化,我们通过prometheus jmx exporter导出的健康endpoint度量不再起作用。

通常的/acture/health按预期工作,但prometheus-jmx-exporter无法接收它,尽管尝试了几个方法:

  • 我更改了exporter-config.yaml中的元信息,以反映Spring Boot 2中的名称更改
  • 我将io.micrometer:micrometer-registry-prometheus添加到我们的build.gradle中,看看这是否是问题
  • i根据Spring Boot 2文档公开了web和jmxendpoint

所以现在我没有主意了,我很感激oyu可能给我的任何暗示

旧prometheus-jmx-exporter exporter-config.yaml:

---
lowercaseOutputName: true
lowercaseOutputLabelNames: true
whitelistObjectNames: ["org.springframework.boot:type=Endpoint,name=healthEndpoint"]
rules:
- pattern: 'org.springframework.boot<type=Endpoint, name=healthEndpoint><(.*, )?(.*)>(.*):'
  name: health_endpoint_$1$3
  attrNameSnakeCase: true  

新建prometheus-jmx-exporter exporter-config.yaml:

---
lowercaseOutputName: true
lowercaseOutputLabelNames: true
whitelistObjectNames: ["org.springframework.boot:type=Endpoint,name=Health"]
rules:
- pattern: 'org.springframework.boot<type=Endpoint, name=Health>'
  name: health_endpoint_$1$3
  attrNameSnakeCase: true

关于执行器终结点的当前应用程序属性:

management.endpoints.web.exposure.include=info, health, refresh, metrics, prometheus
management.endpoints.jmx.exposure.include=health, metrics, prometheus

在使用旧的exporter-config.yaml的Spring boot1中,我得到如下结果:

# HELP health_endpoint_hystrix_status Invoke the underlying endpoint (org.springframework.boot<type=Endpoint, name=healthEndpoint><hystrix, status>status)
# TYPE health_endpoint_hystrix_status untyped
health_endpoint_hystrix_status 1.0
# HELP health_endpoint_status Invoke the underlying endpoint (org.springframework.boot<type=Endpoint, name=healthEndpoint><status>status)
# TYPE health_endpoint_status untyped
health_endpoint_status 1.0

共有1个答案

高溪叠
2023-03-14

您可以共同计算自己的健康值并将其添加到Prometheus Metricsendpoint:

@Configuration
public class HealthMetricsConfiguration {

    @Bean
    public MeterRegistryCustomizer prometheusHealthCheck(HealthEndpoint healthEndpoint) {
        return registry -> registry.gauge("health", healthEndpoint, HealthMetricsConfiguration::healthToCode);
    }

    public static int healthToCode(HealthEndpoint ep) {
        Status status = ep.health().getStatus();

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

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

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

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

  • 问题内容: 我在夹层中使用Django1.7。我创建了简单的配置文件(根据Mezzanine文档),存储在单独的应用程序“配置文件”中: 创建迁移会返回: 当我运行“迁移配置文件”时: 问题是,当我尝试打开与mezzanine.accounts相关的任何页面(例如更新帐户)时,它崩溃并显示: 我做错了什么? 问题答案: 在MySQL数据库中,从表中删除行。 删除迁移文件夹中的所有迁移文件。 重试并

  • 我用试用密钥尝试了State/BaselineMigration功能。https://flywaydb.org/documentation/concepts/baselinemigrationsFlyWay迁移执行脚本并正确移动到正确的版本。但在此基础上运行的所有迁移都失败了 从S开始2__xxx.sql然后它在版本2的模式表中创建一行并键入"SQL_STATE_SCRIPT" 再次执行flywa