将Kafka的指标报告给执行机构

gk7wooem  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(344)

我试图从Kafka那里得到一些指标(客户延迟,…),以供普罗米修斯使用。
我的方法是编写一个简单的springboot应用程序,公开prometheus的度量。我知道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);
    }
}

我用一个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);
    }
}

当我启动应用程序时,一些度量将打印到cmd,但它们都有默认值(0.0,无限,…),并且它们只在应用程序启动后提供一次。
为什么我得不到指标?我做错了什么?
干杯,
费边

uplii1fm

uplii1fm1#

springkafka已经将kafka度量公开为jmx度量。你不需要更新/发送度量给普罗米修斯。prometheus服务器将自动读取应用程序的“/prometheus”端点。在spring项目中启用prometheus的spring执行器,并配置prometheus服务器从中读取数据。
下面是一个使用spring boot的好例子-https://www.callicoder.com/spring-boot-actuator-metrics-monitoring-dashboard-prometheus-grafana/
metricsreporter不用于在度量值更改时“报告”度量值。检查文件(由于某些原因,我找不到最新的api)。
https://archive.apache.org/dist/kafka/0.8.2-beta/java-doc/org/apache/kafka/common/metrics/metricsreporter.html
一个插件接口,允许在创建新指标时侦听内容,以便报告它们。
metricchange()方法仅在更改度量时调用。这就是您在应用程序启动期间看到前几个输出的原因,因为度量是创建的。

pxyaymoc

pxyaymoc2#

消费者指标支持仅在SpringBoot2.1+版本上可用。
对新指标覆盖率的自动配置支持已得到改进,包括:
休眠度量
spring框架的webclient
Kafka消费者指标
log4j2指标
jetty服务器线程池指标
服务器端http请求度量
https://github.com/spring-projects/spring-boot/wiki/spring-boot-2.1-release-notes#auto-新指标的配置支持
我建议你升级到新版本。但是,如果您确实需要使用spring boot以前的版本,您可以在以下位置查看我的kafka metrics测微计实现:
https://github.com/luiztoscano/spring-boot-kmetrics

相关问题