Spring 向执行机构报告卡夫卡的指标

Spring 向执行机构报告卡夫卡的指标,spring,spring-boot,apache-kafka,kafka-consumer-api,spring-kafka,Spring,Spring Boot,Apache Kafka,Kafka Consumer Api,Spring Kafka,我正试图从卡夫卡那里得到一些指标(客户延迟,…),以供普罗米修斯使用 我的方法是编写一个简单的springboot应用程序,公开普罗米修斯的指标。我知道kafka通过接口MetricsReporter向其所有消费者提供度量 因此,我实现了一个类,它应该做到: public class MonitoringIntegration implements MetricsReporter { @Override public void init(List<KafkaMetric&

我正试图从卡夫卡那里得到一些指标(客户延迟,…),以供普罗米修斯使用

我的方法是编写一个简单的springboot应用程序,公开普罗米修斯的指标。我知道kafka通过接口MetricsReporter向其所有消费者提供度量

因此,我实现了一个类,它应该做到:

public class MonitoringIntegration implements MetricsReporter {

    @Override
    public void init(List<KafkaMetric> list) {
        System.out.println("init");
        for (KafkaMetric kafkaMetric : list) {
            System.out.println(kafkaMetric.metricName());
            System.out.println(kafkaMetric.metricValue());
        }
    }

    @Override
    public void metricChange(KafkaMetric kafkaMetric) {
        System.out.println("Metric Change");
        System.out.println(kafkaMetric.metricName());
        System.out.println(kafkaMetric.metricValue());
    }

    @Override
    public void metricRemoval(KafkaMetric kafkaMetric) {
        System.out.println("Removal");
        System.out.println(kafkaMetric.metricName());
        System.out.println(kafkaMetric.metricValue());
    }

    @Override
    public void close() {
        System.out.println("close");
    }

    @Override
    public void configure(Map<String, ?> map) {
        System.out.println("Configuring");
        System.out.println(map);
    }
}
公共类监控集成实现MetricsReporter{
@凌驾
公共void init(列表){
System.out.println(“init”);
用于(卡夫卡式卡夫卡式:列表){
System.out.println(kafkaMetric.metricName());
System.out.println(kafkaMetric.metricValue());
}
}
@凌驾
公共无效度量值更改(卡夫卡度量值卡夫卡度量值){
System.out.println(“公制变更”);
System.out.println(kafkaMetric.metricName());
System.out.println(kafkaMetric.metricValue());
}
@凌驾
公共无效度量值(卡夫卡度量值){
系统输出打印项次(“删除”);
System.out.println(kafkaMetric.metricName());
System.out.println(kafkaMetric.metricValue());
}
@凌驾
公众假期结束(){
系统输出打印项次(“关闭”);
}
@凌驾
公共void配置(映射){
System.out.println(“配置”);
系统输出打印项次(map);
}
}
我用一个bean注册了这个类:

@Configuration
public class MetricConfiguration {

    @Bean
    public ProducerFactory<?, ?> kafkaProducerFactory(KafkaProperties properties) {
        Map<String, Object> producerProperties = properties.buildProducerProperties();
        producerProperties.put(CommonClientConfigs.METRIC_REPORTER_CLASSES_CONFIG,
                MonitoringIntegration.class.getName());
        return new DefaultKafkaProducerFactory<>(producerProperties);
    }

    @Bean
    public ConsumerFactory<?, ?> kafkaConsumerFactory(KafkaProperties properties) {
        Map<String, Object> consumererProperties = properties.buildConsumerProperties();
        consumererProperties.put(CommonClientConfigs.METRIC_REPORTER_CLASSES_CONFIG,
                MonitoringIntegration.class.getName());
        return new DefaultKafkaConsumerFactory<>(consumererProperties);
    }
}
@配置
公共类度量配置{
@豆子
公共生产工厂卡夫卡生产工厂(卡夫卡财产属性){
Map producerProperties=properties.buildProducerProperties();
producerProperties.put(CommonClientConfigs.METRIC\u REPORTER\u CLASSES\u CONFIG,
MonitoringIntegration.class.getName());
返回新的默认KafkaProducerFactory(producerProperties);
}
@豆子
公共消费工厂卡夫卡消费工厂(卡夫卡房地产){
Map ConsumerProperties=properties.buildConsumerProperties();
ConsumerProperties.put(CommonClientConfigs.METRIC\u REPORTER\u CLASSES\u CONFIG,
MonitoringIntegration.class.getName());
返回新的DefaultKafka消费者工厂(ConsumerProperties);
}
}
当我启动应用程序时,一些指标将打印到cmd,但它们都有默认值(0.0,无限,…),并且在应用程序启动后只提供一次

为什么我得不到指标?我做错了什么

干杯


Fabian

Spring Kafka已经将Kafka度量公开为JMX度量。你不需要更新/发送指标给普罗米修斯。Prometheus服务器将自动读取应用程序的“/Prometheus”端点。在Spring项目中使用Prometheus启用Spring执行器,并将Prometheus服务器配置为从中读取

下面是一个使用Spring Boot的好例子-

MetricsReporter不用于在度量值更改时“报告”度量值。检查文档。(由于某些原因,我找不到最新的API)

一个插件接口,允许在创建新指标时进行监听,以便报告


metricChange()方法仅在度量发生更改时调用。这就是您在应用程序启动期间看到前几个输出的原因,因为度量是创建的。

消费者度量支持仅在spring boot 2.1+版本上可用

对新指标的自动配置支持 指标覆盖范围已得到改进,包括:

休眠度量

Spring框架的WebClient

卡夫卡消费者指标

Log4j2度量

Jetty服务器线程池指标

服务器端HTTP请求度量

我建议您升级到新版本。但是,如果您确实需要使用Spring Boot之前的版本,可以在以下位置查看我的kafka metrics测微计实现:


根据链接的域/URL与您的用户名相同或包含用户名,您似乎已链接到自己的内容。如果你这样做了,你需要披露这是你的。如果你不透露这是你自己的内容,它通常被认为是垃圾邮件。见:和。