如何使用Spring-boot 2中的Actuator修改prometheus公开的度量标准名称

时间:2018-04-02 15:36:46

标签: spring-boot prometheus spring-boot-actuator

我在springboot 2中使用Actuator来暴露/执行/ prometheus端点,prometheus实例将从中获取指标。

Everithing的工作非常完美,只是因为我需要调整指标名称。我的意思不是后缀(_count,_total,_bucket,...)对Prometheus有意义,但是类似:

  

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,但不知道如何将其配置为默认注册表。

2 个答案:

答案 0 :(得分:1)

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

e.g。设置自定义仪表过滤器:

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

但是,在注册表中设置自定义重命名筛选器只允许重命名基本指标名称。 它不作用于后缀,也不允许对属于例如集合的特定度量采取行动。由摘要生成。

使用自定义NamingConvention我可以为约定基本名称添加后缀...我甚至可以更改现有的后缀或替换约定基本名称。

最后请注意,直方图prometheus度量标准类型需要创建

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

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

答案 1 :(得分:1)

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

df = pd.DataFrame([[('2000-09-29 22:00:00'), 78.48659257615778],
       [('2000-09-29 23:00:00'), 79.46896724006444],
       [('2000-09-30 00:00:00'), 79.74108445117001],
       [('2000-09-30 01:00:00'), 79.59727418822389],
       [('2000-09-30 02:00:00'), 79.73048396364723],
       [('2000-09-30 03:00:00'), 79.09930124357557],
       [('2000-09-30 04:00:00'), 78.28903340851555],
       [('2000-09-30 05:00:00'), 78.12229420958224],
       [('2000-09-30 06:00:00'), 78.89923606080113],
       [('2000-09-30 07:00:00'), 78.9620439478767],
       [('2000-09-30 08:00:00'), 78.92566676678388],
       [('2000-09-30 09:00:00'), 61.74819886499889],
       [('2000-09-30 10:00:00'), 35.235524848405]])
df.columns = ['DATE', 'V1']

plt.plot(pd.to_datetime(df['DATE']), df['V1'], marker='.', markersize=8)
plt.show()