Closed HStoyanov-augglobal closed 2 months ago
Sorry for the lack of response on this. https://github.com/spring-projects/spring-kafka/issues/3275#issuecomment-2213211219 I believe explains what is going on. I tried to modify your tags provider implementation to handle the case when the record is null
, but this didn't help because of this code that prevents the configured tags provider from being applied when the record is null. This is a problem for the Prometheus client because it means a different set of tags will be there depending on whether the ProducerRecord is null. I suppose as a workaround you could use setMicrometerTags
with default values to be used when the record is null, like Map.of("topic", "NONE")
. Does that work for you?
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.
Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open.
Describe the bug
In a spring project I have metrics and prometheus enabled, I am creating my own KafkaTemplate and setting a
micrometerTagsProvider
for it. And at that point thespring_kafka_template_...
metrics all break, they stop, value at 0, the given tags are not shown. It doesn't matter what tag name or value i provide, or how many, behavior is the same. However, if i provide an empty Map, the metric will start working again.KafkaTemplate also support adding static tags via
KafkaTemplate#setMicrometerTags(Map)
. This always works and doesn't break the metric. Metric will show these static tags in all cases (even if micrometerTagsProvider is used).After discussing this in the Spring Kafka project https://github.com/spring-projects/spring-kafka/issues/3275 , it was suggested that the issue has to be with micrometer itself.
In what version(s) of Spring for Apache Kafka are you seeing this issue?
Spring Kafka, see attached sample project.
To Reproduce
1) KafkaTemplate<String, String> template = new KafkaTemplate<>(producerFactory); 2) template.setMicrometerTagsProvider(producerRecord -> Map.of("topic", producerRecord.topic())); 3)
spring_kafka_template_...
break, value showing 0, tags not present ex:spring_kafka_template_seconds_sum{exception="none",name="testKafkaTemplateWithTagsProvider",result="success",} 0
Expected behavior
spring_kafka_template_seconds_sum{topic=someTopic, exception="none",name="testKafkaTemplateWithTagsProvider",result="success",} 1.306612559
Sample
You can run a small project to test it yourself if you have access to your own kafka: https://github.com/HStoyanov-augglobal/kafka-metrics-springboot-bug-report/tree/main
Metrics available at
http://localhost:8080/actuator/prometheus
See this code in particular where
micrometerTagsProvider
is specified, along with 3 cases to experiment with: https://github.com/HStoyanov-augglobal/kafka-metrics-springboot-bug-report/blob/main/src/main/java/bugreport/BugReportApplication.java#L33-L47