如何在 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("_"));
}
});
}
}
我在 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("_"));
}
});
}
}