项目作者: sysco-middleware

项目描述 :
Prometheus custom collector for JMX metrics of Kafka clients
高级语言: Java
项目地址: git://github.com/sysco-middleware/kafka-client-collector.git
创建时间: 2019-06-26T15:10:21Z
项目社区:https://github.com/sysco-middleware/kafka-client-collector

开源协议:Apache License 2.0

下载


Build Status
Maven metadata URI

Kafka client collector

Kafka client collector is an implementation of Prometheus custom collector,
for collecting JMX metrics from kafka clients.

Version Kafka-client version Prometheus simpleclient version
0.0.3 2.1.1 0.6.0
0.0.4 2.3.0 0.6.0
0.0.5 2.3.0 0.6.0

Usage

  1. <dependency>
  2. <groupId>no.sysco.middleware.prometheus</groupId>
  3. <artifactId>kafka-client-collector</artifactId>
  4. <version>0.0.5</version>
  5. </dependency>

Prometheus http server

Use KafkaClientsJmxExports to initialize collectors for kafka client’s JMX metrics to conveniently register them.

  1. HTTPServer server = new HTTPServer(8081);
  2. Runtime.getRuntime().addShutdownHook(new Thread(server::stop));
  3. KafkaClientsJmxExports.initialize(kafkaProducer1);

Armeria http server

Add armeria dependency, than

  1. /** init health-check, config, metrics */
  2. final CollectorRegistry collectorRegistry = CollectorRegistry.defaultRegistry;
  3. new ClientsJmxCollector(kafkaProducer).register(collectorRegistry);
  4. Server server = new ServerBuilder().http(8085)
  5. .service("/", (ctx, req) -> HttpResponse.of("OK"))
  6. .service("/config", (ctx, req) -> HttpResponse.of(appConfig.properties.toString()))
  7. .service("/metrics", (ctx, req) -> {
  8. final ByteArrayOutputStream stream = new ByteArrayOutputStream();
  9. try (OutputStreamWriter writer = new OutputStreamWriter(stream)) {
  10. TextFormat.write004(writer, collectorRegistry.metricFamilySamples());
  11. }
  12. return HttpResponse.of(HttpStatus.OK, CONTENT_TYPE_004, stream.toByteArray());
  13. })
  14. .build();
  15. CompletableFuture<Void> future = server.start();
  16. // Wait until the server is ready.
  17. future.join();

Follow full example

Metric format

  1. JMX example
  2. kafka.producer:type=producer-metrics,client-id="dasf-gdfgd-dfgd-31",waiting-threads="5"
  3. Will be exposed as
  4. producer_metrics_waiting_threads {cliend_id="dasf-gdfgd-dfgd-31"} 5.0

JMX domain (kafka.producer - example above) is not present in Prometheus format, due to kafka-streams api
use others apis (kafka-producer, kafka-consumer, kafka-admin-client) and domain names are not presented in KafkaMetric.

Metrics types (group)

Producer:

  • app-info @deprecated
  • producer-metrics
  • producer-topic-metrics
  • producer-node-metrics

    Consumer:

  • app-info @deprecated
  • consumer-metrics
  • consumer-coordinator-metrics
  • consumer-fetch-manager-metrics
  • consumer-node-metrics

    Stream:

    Stream contains metrics from domains kafka.producer, kafka.consumer, kafka.admin.client and own set of metrics
    such as :
  • app-info @deprecated
  • stream-metrics [INFO lvl]
  • stream-task-metrics [DEBUG lvl]
  • stream-processor-node-metrics [DEBUG lvl]
  • stream-[store-scope]-metrics [DEBUG lvl]
  • stream-record-cache-metrics [DEBUG lvl]
  • stream-buffer-metrics [DEBUG lvl]

Prometheus metrics format

  1. Check
    Read blog post.
    There is a tool promtool to verify metrics formatting.

References

Issues