如果在类路径上检测到Micrometer,并且应用程序上下文中存在单个MeterRegistry,则监听器容器将自动为监听器创建和更新Micrometer timers。可以通过将ContainerProperty micrometerEnabled设置为false来禁用timers。
维护了两个timers——一个用于成功调用监听器,另一个用于失败调用。
timers名为spring.kafka.elistener,并具有以下标签:
可以使用ContainerProperties micrometerTags属性添加其他标签。
你可以在ContainerProperties micrometerTagsProvider中提供一个函数;该函数接收ConsumerRecord, ?>并返回可以与micrometerTags中的任何静态标签合并的标签。
对于并发容器,将为每个线程创建timers,name tag以-n作为后缀,其中n为0到concurrency-1。
如果在类路径上检测到Micrometer,并且应用程序上下文中存在单个MeterRegistry,则template将自动创建和更新用于发送操作的Micrometer timers。可以通过将template的micrometerEnabled属性设置为false来禁用timers。
维护了两个timers——一个用于成功调用监听器,另一个用于失败调用。
timers名为spring.kafka.template,具有以下标签:
可以使用template的micrometerTags属性添加其他标签。
你可以提供KafkaTemplate.setMicrometerTagsProvider(Function
框架提供了工厂监听器,以便在创建和关闭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。
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。