睿象云智能告警平台的分派策略
1265
2022-09-30
小数据运维之自建Kafka监控
前文小数据运维之Kafka监控里面提到了一些开源的kafka的监控工具,但在我们实际生产会遇到各种需求这些开源工具无法满足。比如我们遇到的问题就是, 现有的开源监控工具,在历史监控数据保存等方面无法满足我们的需求,
还有这些开源的Kafkak监控工具也不太方便接入我们现有的监控告警平台。我们现有的监控报警系统是基于Influxdb的TICK平台,从运维的角度来看,现在主流的基于时序数据库的监控平台是Influxdb和Promotheus,其中Influxdb是现在DB Engine排名第一的时序数据库。我们现在具体来看看如何基于Influxdb自己搭建Kafka Broker的监控
监控数据采集
Kafka Broker的监控数据是通过Jmx进行暴露,Influxdb的数据采集是基于Telegraf进行的,但Telegraf Plugin并不能直接采集到Kafka JMX的数据,而是通过Jolokia Agent进行的,大致架构图如下
我们在Kafka Broker启动命令中还得加上Jolokia agent相关信息
export JOLOKIA_JAR=/data/kafka/kafka/libs/jolokia-jvm.jarexport KAFKA_OPTS="-javaagent:$JOLOKIA_JAR=port=7778 $KAFKA_OPTS"JMX_PORT=9988 ./bin/kafka-server-start.sh -daemon ./config/server.properties
重启Kafka之后,就可以通过Jolikia获取到Kafka Broker的相关监控信息了。
Telegraf通过配置telegraf.conf来设置需要读取相关的数据,这里我列举了下我们的部分配置,
## Read JMX metrics through Jolokia [[inputs.jolokia2_agent]] ## An array of Kafka servers URI to gather stats. urls = ["http://localhost:7778/jolokia"] name_prefix = "kafka_" # Broker key metrics [[inputs.jolokia2_agent.metric]] name = "underreplicatedpartitions" mbean = "kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions" field_name = "UnderReplicatedPartitions" tag_keys = ["topic", "partition"] [[inputs.jolokia2_agent.metric]] name = "controller_offlinepartitions" mbean = "kafka.controller:type=KafkaController,name=OfflinePartitionsCount" tag_keys = ["controller"] [[inputs.jolokia2_agent.metric]] name = "controller_activecontrollers" mbean = "kafka.controller:type=KafkaController,name=ActiveControllerCount" tag_keys = ["controller"] # Controller metrics [[inputs.jolokia2_agent.metric]] name = "controller" mbean = "kafka.controller:name=*,type=*" field_prefix = "$1." [[inputs.jolokia2_agent.metric]] name = "controller_stats_leaderelectionrateandtime" mbean = "kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs" tag_keys = ["controller"] # Broker replica manager [[inputs.jolokia2_agent.metric]] name = "replica_manager" mbean = "kafka.server:name=*,type=ReplicaManager" field_prefix = "$1." # Broker Topic Metrics [[inputs.jolokia2_agent.metric]] name = "topics" mbean = "kafka.server:name=*,type=BrokerTopicMetrics" field_prefix = "$1." [[inputs.jolokia2_agent.metric]] name = "topic" mbean = "kafka.server:name=*,topic=*,type=BrokerTopicMetrics" field_prefix = "$1." tag_keys = ["topic"] # Partition Metrics [[inputs.jolokia2_agent.metric]] name = "partition" mbean = "kafka.log:name=*,partition=*,topic=*,type=Log" field_name = "$1" tag_keys = ["topic", "partition"]
首先我们看到,telelgraf使用的jolokia2_agent这个Plugin收集监控信息,这个plugin是不需要单独安装的,直接使用telegraf的二进制文件即可,这里针对配置信息进行一下解释
urls = ["http://localhost:7778/jolokia"]name_prefix = "kafka_"
URL这里需要配置jolikia的域名和端口信息,因我们telegraf与kafka broker 部署在同一台服务器, 所以我们直接使用的localhost, name_prefix指的是在Influxdb中measurement的前缀,这样更方便区分哪些是来自kafka的监控指标。
我们在具体来看看一个监控配置:
[[inputs.jolokia2_agent.metric]] name = "controller_offlinepartitions" mbean = "kafka.controller:type=KafkaController,name=OfflinePartitionsCount" tag_keys = ["controller"]
这里的name指的是influxdb中的measurement的名字, 实际上在influxdb中写入的还要加入前文提到的name_prefix, 在influxdb中实际结果如下
> show measurements;name: measurementsname----kafka_controllerkafka_controller_activecontrollerskafka_controller_offlinepartitions
具体监控指标的获取在Mbean这里制定,这里我建议大家可以查看confluent的文档获取相关信息
https://docs.confluent.io/platform/current/kafka/monitoring.html
其他更多的Telegraf配置信息可以参考这二份文档:
https://github.com/influxdata/telegraf/blob/master/plugins/inputs/jolokia2/examples/kafka.conf
https://grafana.com/grafana/dashboards/14505
Influxdb和Grafana的组合可以很容易的自定义展示自己需要的监控指标,图形化的效果相当不错,这一点比开源Kafkak监控平台更加灵活,可定制化程度也更高,例如我们将最核心的报警指标放在最前列,后面依次在放其他broker,partition和Broker等相关指标:
总体来说自建Kafka的监控,相比使用开源的Kafka监控平台,有一定的门槛,比较适合已经有一套自己的监控系统,比如比较主流的Promotheus, Influxdb(Tick), open-falcon等,而且需要对Kafka的监控指标有一个初步了解,Kafka的监控指标非常多,需要自己从中筛选重要的指标, 但同时这种自建的方式也给大家提供了更多的灵活性,指标这一块可以参考前文小数据运维之Kafka监控
发表评论
暂时没有评论,来抢沙发吧~