es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La configuración común de etiqueta de Micronaut Micrometer Prometheus no se está aplicando a todas las métricas.

Spring Boot permite la configuración declarativa de etiquetas comunes:

Las etiquetas comunes se aplican a todos los medidores y se pueden configurar, como muestra el siguiente ejemplo:

management.metrics.tags.region=us-east-1

Así, en Spring Boot, con management.metrics.tags.application=myapp en su lugar, todas las métricas incluyen esa etiqueta, por ejemplo:

jvm_memory_max_bytes{application="myapp",area="heap",id="G1 Survivor Space"} -1.0
system_cpu_count{application="myapp"} 16.0

Quiero lograr lo mismo en una aplicación Micronaut. No parece haber una forma declarativa de hacerlo y, en su lugar, necesitamos personalizarlo programáticamente usando un MeterRegistryConfigurer.

Creé lo siguiente:

@Singleton
@RequiresMetrics
class PrometheusMeterRegistryConfigurer: MeterRegistryConfigurer<MeterRegistry> {

<pre><code>override fun configure(meterRegistry: MeterRegistry) {
    meterRegistry.config().commonTags("application", "myapp")
}

override fun getType(): Class<MeterRegistry> {
    return MeterRegistry::class.java
}
</code></pre>

}

El problema es que no se aplica a todas las métricas, algunas métricas tienen etiquetas (http_server_requests_seconds_max) mientras que otras no las tienen (jvm_memory_max_bytes, system_cpu_count, etc.):


http_server_requests_seconds_max{application="myapp",exception="none",method="GET",status="200",uri="/actuator/prometheus",} 0.131942121
jvm_memory_max_bytes{area="nonheap",id="CodeHeap 'profiled nmethods'",} 1.22023936E8
system_cpu_count 16.0

¿Cómo puedo hacer que la etiqueta se aplique a todas las métricas de micrometer-prometheus?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que la etiqueta application se aplique a todas las métricas de Micrometer-Prometheus en una aplicación Micronaut, puede personalizar directamente el PrometheusMeterRegistry creando un bean de tipo PrometheusConfig y configurando las etiquetas comunes allí.

    import io.micrometer.core.instrument.Clock
    import io.micrometer.prometheus.PrometheusConfig
    import io.micrometer.prometheus.PrometheusMeterRegistry
    import io.micronaut.context.annotation.Bean
    import io.micronaut.context.annotation.Factory
    import javax.inject.Singleton
    
    @Factory
    class MetricsFactory {
        @Bean
        @Singleton
        fun prometheusMeterRegistry(): PrometheusMeterRegistry {
            val config = PrometheusConfig.DEFAULT
                                .withCommonTags("application", "myapp")
            return PrometheusMeterRegistry(config, Clock.SYSTEM)
        }
    }
    

    Esto creará un bean PrometheusMeterRegistry con la etiqueta application establecida como myapp y se aplicará a todas las métricas.

    http_server_requests_seconds_max{application="myapp",exception="none",method="GET",status="200",uri="/actuator/prometheus"} 0.116679072
    jvm_memory_max_bytes{application="myapp",area="nonheap",id="CodeHeap 'profiled nmethods'"} 1.2272512E8
    system_cpu_count{application="myapp"} 8.0
    

    Al crear un bean PrometheusConfig que se inyecta en el PrometheusMeterRegistry, puede personalizar otras configuraciones como namingConvention y step.

Comments are closed.