【Spring连载】使用Spring访问 Apache Kafka(十)----监控

【Spring连载】使用Spring访问 Apache Kafka(十)----监控Monitoring

  • 一、监控监听器性能Monitoring Listener Performance
  • 二、监控KafkaTemplate性能Monitoring KafkaTemplate Performance
  • 三、Micrometer Native Metrics
  • 四、Micrometer Observation

一、监控监听器性能Monitoring Listener Performance

如果在类路径上检测到Micrometer,并且应用程序上下文中存在单个MeterRegistry,则监听器容器将自动为监听器创建和更新Micrometer timers。可以通过将ContainerProperty micrometerEnabled设置为false来禁用timers。
维护了两个timers——一个用于成功调用监听器,另一个用于失败调用。
timers名为spring.kafka.elistener,并具有以下标签:

  • name:(容器bean名称)
  • result:成功或失败
  • exception:none或ListenerExecutionFailedException

可以使用ContainerProperties micrometerTags属性添加其他标签。
你可以在ContainerProperties micrometerTagsProvider中提供一个函数;该函数接收ConsumerRecord并返回可以与micrometerTags中的任何静态标签合并的标签。
对于并发容器,将为每个线程创建timers,name tag以-n作为后缀,其中n为0到concurrency-1。

二、监控KafkaTemplate性能Monitoring KafkaTemplate Performance

如果在类路径上检测到Micrometer,并且应用程序上下文中存在单个MeterRegistry,则template将自动创建和更新用于发送操作的Micrometer timers。可以通过将template的micrometerEnabled属性设置为false来禁用timers。
维护了两个timers——一个用于成功调用监听器,另一个用于失败调用。
timers名为spring.kafka.template,具有以下标签:

  • name:(template bean名称)
  • result:成功或失败
  • exception:none或失败的异常类名

可以使用template的micrometerTags属性添加其他标签。
你可以提供KafkaTemplate.setMicrometerTagsProvider(Function, Map>)属性;该函数接收ProducerRecord并返回可以与micrometerTags中的任何静态标签合并的标签。

三、Micrometer Native Metrics

框架提供了工厂监听器,以便在创建和关闭producers和consumers时管理一个Micrometer KafkaClientMetrics实例。要启用此功能,只需将监听器添加到您的生产者和消费者工厂:

@Bean
public ConsumerFactory<String, String> myConsumerFactory() {
    Map<String, Object> configs = consumerConfigs();
    ...
    DefaultKafkaConsumerFactory<String, String> cf = new DefaultKafkaConsumerFactory<>(configs);
    ...
    cf.addListener(new MicrometerConsumerListener<String, String>(meterRegistry(),
            Collections.singletonList(new ImmutableTag("customTag", "customTagValue"))));
    ...
    return cf;
}

@Bean
public ProducerFactory<String, String> myProducerFactory() {
    Map<String, Object> configs = producerConfigs();
    configs.put(ProducerConfig.CLIENT_ID_CONFIG, "myClientId");
    ...
    DefaultKafkaProducerFactory<String, String> pf = new DefaultKafkaProducerFactory<>(configs);
    ...
    pf.addListener(new MicrometerProducerListener<String, String>(meterRegistry(),
            Collections.singletonList(new ImmutableTag("customTag", "customTagValue"))));
    ...
    return pf;
}

传递给监听器的consumer/producer id被添加到标签名为spring.id的meter标签。获取Kafka指标的一个例子:

double count = this.meterRegistry.get("kafka.producer.node.incoming.byte.total")
                .tag("customTag", "customTagValue")
                .tag("spring.id", "myProducerFactory.myClientId-1")
                .functionCounter()
                .count()

框架也为StreamsBuilderFactoryBean提供了一个类似的监听器KafkaStreamsMicrometerListener。

四、Micrometer Observation

KafkaTemplate和监听器容器现在支持使用Micrometer进行观察。
在KafkaTemplate和ContainerProperties上设置observationEnabled为true,以启用观察;这将禁用Micrometer Timers,因为timers现在将与每个observation一起管理。
要向timers/traces添加标签,请分别向template或监听器容器配置自定义KafkaTemplateObservationConvention或KafkaListenerObservationConvention。
默认实现为template观察添加了bean.name标签,为容器添加了listener.id标签。
你可以添加DefaultKafkaTemplateObservationConvention 或DefaultKafkaListenerObservationConvention的子类实现,或者提供全新的实现。
你可以根据消费者或生产者record中的信息向timers和traces添加动态标签。为此,需要将自定义的KafkaListenerObservationConvention或KafkaTemplateObservationConvention分别添加到监听器容器属性或KafkaTemplate中。两个observation上下文中的record 属性分别包含ConsumerRecord 或ProducerRecord。

你可能感兴趣的:(spring,apache,kafka)