如何在 Spring-boot 2 中使用 Actuator 修改 prometheus 公开的指标名称

How to modify prometheus exposed metric names using Actuator in Spring-boot 2

我在 springboot 2 中使用 Actuator 来公开 /actuator/prometheus 端点,普罗米修斯实例将从中提取指标。

除了我需要调整指标名称外,一切都很完美。我的意思不是对 Prometheus 有意义的后缀 (_count, _total, _bucket, ...) 而是类似:

http_server_requests_seconds_count -> http_server_requests_count http_server_requests_seconds_max -> latency_seconds_max http_server_requests_seconds_sum -> latency_seconds_sum http_server_requests_seconds_bucket -> latency_seconds_bucket

有什么更好的方法吗?

P.S.

我知道我可以使用

management.metrics.web.server.requests-metric-name=different

获得

different_seconds_count
different_seconds_max 
different_seconds_sum 
different_seconds_bucket

但很难:

1º 删除 _seconds 后缀

2º 仅对其中一个使用不同的基本名称

我想我可以写一个替代方案 PrometheusRenameFilter 但不确定如何将其配置到默认注册表。

现在我知道如何自定义全局注册表了:

例如设置自定义仪表过滤器:

@Configuration
public class MetricsConfig {
    @Bean
    MeterRegistryCustomizer<MeterRegistry> metricsConfig() {
        return registry -> registry.config().meterFilter(new CustomRenameFilter());
    }
}

但是,在注册表中设置自定义重命名过滤器仅允许重命名基本指标名称。 它不会作用于后缀,也不允许作用于属于集合的特定度量,例如由摘要生成。

使用自定义 NamingConvention 我可以向约定基名添加后缀...我什至可以更改现有后缀或替换约定基名。

最后请注意,Histogram prometheus 指标类型需要创建

<basename>_bucket
<basename>_sum
<basename>_count

使用这些特定的名称,因此以我想要的方式调整组件可能是不正确的,因为那将是一个不同的组件。

您可以覆盖此方法并更新命名约定:

@Configuration
public class MetricsConfiga {
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer(String applicationName) {
    return (registry) -> registry.config().namingConvention(new NamingConvention() {
        @Override
        public String name(String name, Meter.Type type, String baseUnit) {
            return "PREFIX" + Arrays.stream(name1.split("\."))
                .filter(Objects::nonNull)
                .collect(Collectors.joining("_"));
        }
       });
    }
}