首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Strimzi改进了Prometheus的Kafka指标

Strimzi改进了Prometheus的Kafka指标

作者头像
CNCF
发布2019-12-04 15:08:47
2.4K0
发布2019-12-04 15:08:47
举报
文章被收录于专栏:CNCFCNCF

作者:Jakub Scholz

在我们之前的博客文章中,我们主要关注跟踪,这是0.14.0版本中的一个新特性。但是跟踪并不是我们在0.14.0中对监视功能进行的惟一改进。我们还对Prometheus的监控进行了一些重大改进。Strimzi几乎从一开始就支持Prometheus的Kafka指标。但是在0.14.0中,通过添加对Kafka导出器(Kafka Exporter )的支持,我们做出了一些重大改进。Kafka导出器增加了Kafka代理中缺少的一些额外指标。在这篇博文中了解更多关于它们的信息。

https://strimzi.io/2019/10/08/strimzi-apache-kafka-and-tracing.html

https://github.com/danielqsj/kafka_exporter

Prometheus监控

Prometheus是一个开源的监控解决方案,它已经成为云计算领域中指标和警报的实际标准。与许多其它监视系统不同,使用Prometheus,你的应用程序不必将指标数据推给Prometheus。相反,Prometheus将从你的应用程序中获取(收集)指标,并将它们存储在时间序列数据库中。Prometheus获取这些数据的接口是一个简单的HTTP端点,提供带有指标的文本输出。有许多工具和库可以让你轻松地在应用程序中创建Prometheus端点。查看Prometheus文档的测仪(Instrumenting)部分,了解更多关于如何从你的应用程序中公开Prometheus指标的信息。

https://prometheus.io/docs/instrumenting/clientlibs/

一旦指标存储在数据库中,就可以使用PromQL查询语言查询它们。PromQL语言是一个API,其它应用程序可以使用它来查询指标。支持它的工具之一是Grafana,它可以用来可视化来自Prometheus数据库的数据。

Prometheus也可以用来警报。你可以配置应该触发警报的规则。Prometheus将根据它正在抓取的指标来评估规则,当任何规则匹配时,它将把它发送给Alertmanager。Alertmanager将负责管理这些警报。它将处理重复、沉默、抑制和聚集警报,并向你选择的系统发送通知。你可以让你的提醒发送到许多不同的通知渠道,如电子邮件、Slack、PagerDuty等。

https://prometheus.io/docs/alerting/alertmanager/

Apache Kafka和Prometheus

默认情况下,Apache Kafka不支持Prometheus指标。与许多基于JVM的应用程序一样,它使用JMX(Java Management Extension,Java管理扩展)来公开指标。但是,由于我们在Strimzi项目中的目标是在运行Apache Kafka时提供一种Kubernetes原生体验,所以我们希望将指标作为Prometheus端点公开。为了帮助解决这个问题,我们使用Prometheus JMX导出器(Prometheus JMX Exporter)项目,获取JMX指标并将其公开为Prometheus端点。除了集成JMX导出器,我们还提供Grafana仪表盘和样本Prometheus警报规则,你可以使用和适应自己的需要。

https://github.com/prometheus/jmx_exporter

要在Strimzi中启用JMX导出器,你必须在Strimzi Kafka、KafkaConnect和KafkaConnectS2I自定义资源中指定metrics部分。该部分配置JMX导出器,并告诉它如何将JMX指标转换为Prometheus指标。配置JMX导出器有不同的方法。当然,你可以根据自己的需要随意配置它,但如果你想使用我们的仪表板和警报规则,则必须遵循我们的配置。

Prometheus的支持、仪表板和示例警报规则不仅适用于Kafka代理。它们还支持Kafka Connect和Apache Zookeeper。Prometheus监控所需的所有文件都可以在GitHub仓库的metrics文件夹中找到。你也可以按照我们的文档,这不仅将帮助你的仪表板,也帮助设置Prometheus、PrometheusAlertManager和Grafana。

https://github.com/strimzi/strimzi-kafka-operator/tree/master/metrics/examples

https://strimzi.io/docs/latest/full.html#assembly-metrics-setup-str

Kafka导出器

这就解释了Strimzi对指标的支持,但是我们提到的Kafka导出器是有什么关系呢?Kafka代理提供了许多与代理状态、使用和性能相关的有用指标。但一些重要的指标却被遗漏了。例如,它不提供关于消费者滞后或主题信息的任何指标。你可以通过Kafka命令行工具或Kafka管理API获得这些信息。但不是作为JMX或Prometheus的指标标准。

消费者延迟尤其重要,因为它允许你监视消费者消费的偏离量(offset),与最近添加的消息的偏离量之间的延迟。当滞后增长时,表明消费者比生产者慢,他们落后了。如果你的应用程序应该能够近乎实时地工作,那么你需要做一些事情来纠正这种情况。

在Grafana仪表板中有消费者延迟,并且能够根据它配置警报,这将使监视基于Kafka的应用程序变得更加容易。这就是为什么我们增加了对Kafka导出器的支持。Kafka导出器是一个伟大的开源项目,来自Daniel Qian和其他贡献者 - 谢谢你的工作。Strimzi只是将它集成到我们自己的Kafka部署中。Kafka导出器作为客户端连接到Kafka,并收集关于主题、分区和用户组的不同信息。然后将此信息作为Prometheus指标端点公开。

https://github.com/danielqsj/kafka_exporter

用Strimzi部署Kafka导出器很容易。所有你需要做的是把它添加到Kafka自定义资源:

apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  kafkaExporter: {}

Strimzi将使用Kafka导出器创建一个新的部署,并将其配置为连接到Kafka集群。你不需要创建任何证书或配置它应该连接的位置。但如果需要,你可以配置它应该监视的消费者组或主题:

apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  kafkaExporter:
    topicRegex: "important-topic-.*"
    groupRegex: "important-group-.*"

你可以在我们的API参考中找到所有可用的配置选项。

https://strimzi.io/docs/0.14.0/full.html#type-KafkaExporterSpec-reference

Kafka导出器不仅提供消费者滞后指标。它还提供了许多关于消费者组和主题的附加细节。

  • 关于消息使用率的信息。
  • 每个消费群体的最新补偿。
  • 主题的最新和最老的偏离量(offset)。
  • 关于在首选节点上没有其leader的分区的信息。所有这些指标都可以用于警报和仪表板。

一旦部署了Kafka导出器,就可以开始获取它提供的指标。我们还提供了一个新的Grafana仪表板和警报规则,它与新的指标一起工作。在0.14.0中,我们的仪表板是相当基本的。在0.15.0中,我们将发布一个改进的Grafana仪表板,它将使用Kafka导出器提供的更多不同指标。你可以在我们的GitHub上找到样本Prometheus警报和Grafana仪表板。

https://github.com/strimzi/strimzi-kafka-operator/blob/master/metrics/examples/prometheus/install/prometheus-rules.yaml

https://github.com/strimzi/strimzi-kafka-operator/blob/master/metrics/examples/grafana/strimzi-kafka-exporter.json

结论

对我们来说,提供生产可用的Kafka是很重要的。有效的监控是其中重要的一部分。Kafka导出器是Strimzi监控能力的重要改进。它为我们的用户提供了即时可用的消费者滞后监控。如果你喜欢Kafka导出器提供的功能,别忘了在GitHub上给它打颗星。

https://github.com/danielqsj/kafka_exporter

如果你喜欢Strimzi,请在GitHub上给我们加星,并在Twitter上关注我们,以确保你不会错过我们未来的任何博文!

https://github.com/strimzi/strimzi-kafka-operator

https://twitter.com/strimziio

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Prometheus 监控服务
Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档