Показывать метрики из Кафки в Actuator - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь получить какие-то метрики (клиентское отставание, ...) от Кафки, чтобы предоставить его для использования Прометей.

Мой подход состоит в том, чтобы написать простое приложение 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);
    }
}

Я зарегистрировал этот класс с помощью 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, бесконечно, ..), и они будут предоставлены только один раз после запуска приложения.

Почему я не получаю метрики?Что я сделал не так?

Ура,

Фабиан

1 Ответ

0 голосов
/ 11 января 2019

Spring Kafka уже представляет метрики Kafka как метрики JMX.Вам не нужно обновлять / отправлять метрики в Prometheus.Сервер Prometheus автоматически считывает данные из конечной точки вашего приложения «/ prometheus».Включите Spring Actuator с 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 () будет вызываться только при изменении метрики.По этой причине вы видите первые несколько результатов при запуске приложения, потому что метрики были созданы.

...