监控数据指标kafka-metricsPrometheus(⼆)Kafka metrics 所有的 metric 都可以通过 JMX 获取,暴露kafka metrics ⽀持两种⽅式
1.在 Kafka Broker 外部, 作为⼀个独⽴进程, 通过 JMX 的 RMI 接⼝读取数据.
这种⽅式的好处是有任何调整不需要重启 Kafka Broker 进程,
缺点是多维护了⼀个独⽴的进程。
2.在 Kafka Broker 进程内部读取 JMX 数据, 这样解析数据的逻辑就在 Kafka Broker
进程内部, 如果有任何调整, 需要重启 Broker。
选择暴露 kafka-metric ⽅式
1. 下载 kafka_exporter(所在机器需与kafka集群⽹络相通)
解压: tar -zxvf kafka_exporter-1.2.0.
切到相应⽬录: cd kafka_exporter-1.2.0.linux-amd64
./kafka_exporter --kafka.rver=kafkaIP或者域名:9092 &
(只需填写kafka集群的⼀个ip即可)
[root@prometheus prometheus]# yum install screen -y
[root@prometheus prometheus]# screen
[root@prometheus prometheus]# ./kafka_exporter --kafka.rver=kafka03:9092
#按Ctrl+a+d后进⼊后台运⾏模式
对应的服务端⼝为9308
2.下载prometheus
解压
tar -zxvf prometheus-2.15.1.
cd ./prometheus-2.15.1.linux-amd64
这个⽂件是对应的配置⽂件,在未添加kafka_exporter之前可以先启动查看下服务是否正常
添加监控配置
重启prometheus
./prometheus --config.l --web.listen-address=:9090
–storage.tsdb.path=/data/prometheus &
3. 下载grafana
tar -zxvf grafana-7.1.5.
该grafana-rver⼆进制需要⼯作⽬录是根安装⽬录,其中⼆进制⽂件以及public⽂件夹的位置。
通过运⾏以下命令启动Grafana:
./bin/grafana-rver web
打开grafana的web页⾯ ip:3000,添加promethues数据源
导⼊监控图标,对于grafana的监控,官⽅有监控图标,不需要⾃⼰搞
官⽅的监控界⾯
⽣产环境的监控环境配置及对应查询语句
Grafana画图也有许多优秀的开源dashboard
第⼆种是读取 JMX 的数据. Prometheus 官⽅的组件 jmx_exporter 把两种实现都提供了:
jmx_prometheus_httprver 通过独⽴进程读取 JMX 的数据
镇远古镇旅游攻略jmx_prometheus_javaagent 使⽤ Java Agent ⽅式, 尽量⽆侵⼊(仅需在 java
命令⾏中使⽤ -javaagent 参数)的启动 in-process library, 读取 JMX 数据.
Prometheus 采⽤了 PULL ⽅式, Prometheus 主动抓取 metrics 数据,
⽽不是靠客户端主动 PUSH 数据, 因此 jmx_prometheus 都是通过暴露 HTTP
小小的船课文端⼝的⽅式暴露 metrics 数据, ⽅便 Prometheus 抓取数据.
选择⽅案2
我们这⾥选择第⼆种jmx_prometheus_javaagent ⽅式收集kafka指标
部署流程:
下载jmx_prometheus_javaagent和l
打开⽂件
添加⼏⾏代码:
export JMX_PORT=“9999”
export
KAFKA_OPTS="-javaagent:/path/jmx_prometheus_javaagent-0.6.jar=9991:/l"
监控指标
大兔子
部分监控指标解释,不⼀定准确,请参考。还有参考 有详细的指标信息
指标解释
kafka_rver_replicafetchermanager_maxlag Max
kafka_rver_replicamanager_isrexpands_total ISR expansion rate 扩⼤率(ISR是in-sync replicas的
简写)
孕妇能吃橙子吗kafka_rver_replicamanager_isrshrinks_total ISR shrink rate 收缩率
kafka_rver_replicamanager_underreplicatedpartitions # of under replicated partitions (|ISR| < |all
replicas|)
kafka_network_requestmetrics_responndtimems Time to nd the respon Produce
kafka_network_socketrver_networkprocessoravgidlepercent The average fraction of time the network
processors are idle
kafka_network_requestmetrics_responndtimems
kafka_network_requestmetrics_requestqueuetimems Time the request waiting in the request queue
Produce
kafka_network_requestmetrics_remotetimems Time the request waits for the follower Produce
kafka_network_requestmetrics_localtimems Time the request being procesd at the leader
Produce
kafka_log_logflushstats_logflushrateandtimems_count Log flush latency
kafka_rver_replicafetchermanager_minfetchrate Max lag in messages btw follower and leader
replicas > 4000
kafka_controller_controllerstats_uncleanleaderelectionsperc Unclean leader election has occurred last 15m kafka_rver_replicamanager_underreplicatedpartitions Under replicated partitions
kafka_controller_kafkacontroller_activecontrollercount活跃的 Controller 的数量
kafka_controller_controllerstats_uncleanleaderelectionsperc争议的 leader 选举次数
kafka_controller_controllerstats_controlledshutdownrateandtimems 将ISR中处于关闭状态的副本从集合中去除掉,返回⼀个新的ISR集合,然后选取第⼀个副本作为leader,然后令当前AR作为接收LeaderAndIsr请求的副本。
kafka_controller_kafkacontroller_offlinepartitionscount 从活着的ISR中选择⼀个broker作为leader,如果ISR中没有活着的副本,则从assignedReplicas中选择⼀个副本作为leader,leader选举成功后注册到Zookeeper
中,并更新所有的缓存。
broker指标
kafka_rver_brokertopicmetrics_messagesin_total所有topic消息(进出)流量 消息写⼊总量kafka_rver_brokertopicmetrics_bytesrejected_total扔掉的流量
kafka_rver_brokertopicmetrics_failedfetchrequests_total当前机器fetch请求失败的数量kafka_rver_brokertopicmetrics_bytesout_total输出的流量
kafka_rver_brokertopicmetrics_bytesin_total输⼊的流量
kafka_rver_brokertopicmetrics_failedproducerequests_total当前机器produce请求失败的数量kafka_rver_replicamanager_partitioncount该broker上的partition的数量
kafka_rver_replicamanager_leadercount Leader的replica的数量
kafka_network_requestmetrics_totaltimems{FetchConsumer\FetchFollower\Produce}⼀个请求FetchConsumer\FetchFollower\Produce耗
费的所有时间
指标解释
预警指标分析
kafka.rver:type=ReplicaManager,name=UnderReplicatedPartitions **
含义: 正在复制的 Partition 的数量.
建议报警阈值: > 0 就建议报警. 但如果 Kafka 集群正在 reassign partition 时,
这个值也会 >0
含义: 没有 Leader 的 Partition 的数量. 处于这个状态的 Partition 是不可读也不可写
建议报警阈值: >0 ⼀旦出现就报警.
含义: 活跃的 Controller 的数量.
建议报警阈值: != 0 就赶紧报警
kafka.rver:type=ReplicaManager,name=PartitionCount
含义: 集群中 Partition 的总数
建议报警阈值: 感觉这个报警不可控.
kafka_controller_controllerstats_leaderelectionrateandtimems
含义: Leader election rate 领导⼈选举率
UncleanLeaderElectionsPerSec
含义: Unclean leader election rate 争议的 leader 选举次数
描述:所有的topic的消息速率(消息数/秒)
Mbean名:“kafka.rver”:name=“AllTopicsMessagesInPerSec”,type=“BrokerTopicMetrics”
正常的值:
清蒸鲈鱼的制作方法描述:所有的topic的流⼊数据速率(字节/秒)
Mbean名:“kafka.rver”:name=“AllTopicsBytesInPerSec”,type=“BrokerTopicMetrics”
正常的值:
描述:producer或Fetch-consumer或Fetch-follower的请求速率(请求次数/秒)
Mbean名:“kafkawork”:name="{Produce|Fetch-consumer|Fetch-follower}-RequestsPerSec",type=“RequestMetrics”正常的值:
描述:所有的topic的流出数据速率(字节/秒)
Mbean名:
“kafka.rver”:name=“AllTopicsBytesOutPerSec”,type=“BrokerTopicMetrics”
正常的值:
描述:刷⽇志的速率和耗时
Mbean名: “kafka.log”:name=“LogFlushRateAndTimeMs”,type=“LogFlushStats”
正常的值:
描述:正在做复制的partition的数量(|ISR| < |all replicas|)
Mbean名:“kafka.rver”:name=“UnderReplicatedPartitions”,type=“ReplicaManager”
正常的值:0
描述:当前的broker是否为controller
Mbean名:“ller”:name=“ActiveControllerCount”,type=“KafkaController”
正常的值:在集群中只有⼀个broker的这个值为1
描述:选举leader的速率
Mbean名:“ller”:name=“LeaderElectionRateAndTimeMs”,type=“ControllerStats”
正常的值:如果有broker挂了,此值⾮0
描述:Unclean的leader选举速率
Mbean名:“ller”:name=“UncleanLeaderElectionsPerSec”,type=“ControllerStats”
正常的值:0
描述:该broker上的partition的数量
Mbean名: “kafka.rver”:name=“PartitionCount”,type=“ReplicaManager”
正常的值:应在各个broker中平均分布
描述:Leader的replica的数量
Mbean名: “kafka.rver”:name=“LeaderCount”,type=“ReplicaManager”
正常的值:应在各个broker中平均分布
描述:ISR的收缩(shrink)速率
Mbean名:“kafka.rver”:name=“ISRShrinksPerSec”,type=“ReplicaManager”银河公园
正常的值:如果⼀个broker挂掉了,⼀些partition的ISR会收缩。当那个broker重新起来时,⼀旦它的replica完全跟上,ISR会扩⼤(expand)。除此之外,正常情况下,此值和下⾯的扩⼤速率都是0。
描述:ISR的扩⼤(expansion)速率
Mbean名: “kafka.rver”:name=“ISRExpandsPerSec”,type=“ReplicaManager”
正常的值:参见ISR的收缩(shrink)速率
描述:follower落后leader replica的最⼤的消息数量
Mbean名:“kafka.rver”:name="([-.\w]+)-MaxLag",type=“ReplicaFetcherManager”
正常的值:⼩于replica.ssages
描述:每个follower replica落后的消息速率
Mbean名:“kafka.rver”:name="([-.\w]+)-ConsumerLag",type=“FetcherLagMetrics”
正常的值:⼩于replica.ssages
描述:等待producer purgatory的请求数
Mbean名:“kafka.rver”:name=“PurgatorySize”,type=“ProducerRequestPurgatory”
正常的值:如果ack=-1,应为⾮0值
描述:等待fetch purgatory的请求数
Mbean名:“kafka.rver”:name=“PurgatorySize”,type=“FetchRequestPurgatory”
正常的值:依赖于consumer的fetch.wait.max.ms的设置
描述:⼀个请求(producer,Fetch-Consumer,Fetch-Follower)耗费的所有时间
Mbean名:“kafkawork”:name="{Produce|Fetch-Consumer|Fetch-Follower}-TotalTimeMs",type=“RequestMetrics”
正常的值:包括了queue, local, remote和respon nd time
描述:请求(producer,Fetch-Consumer,Fetch-Follower)在请求队列中的等待时间
Mbean名:“kafkawork”:name="{Produce|Fetch-Consumer|Fetch-Follower}-QueueTimeMs",type=“RequestMetrics”
正常的值:
描述:请求(producer,Fetch-Consumer,Fetch-Follower)在leader处理请求花的时间
Mbean名:“kafkawork”:name="{Produce|Fetch-Consumer|Fetch-Follower}-LocalTimeMs",type=“RequestMetrics”
正常的值:退出策略
描述:请求(producer,Fetch-Consumer,Fetch-Follower)等待follower花费的时间
Mbean名:“kafkawork”:name="{Produce|Fetch-Consumer|Fetch-Follower}-RemoteTimeMs",type=“RequestMetrics”正常的值:producer的ack=-1时,⾮0才正常
描述:发送响应花费的时间
教师的座右铭Mbean名:“kafkawork”:name="{Produce|Fetch-Consumer|Fetch-Follower}-
ResponSendTimeMs",type=“RequestMetrics”
正常的值:
描述:consumer落后producer的消息数量
Mbean名:“sumer”:name="([-.\w]+)-MaxLag",type=“ConsumerFetcherManager”
正常的值:
建议对GC耗时和其他参数和诸如系统CPU,I/O时间等等进⾏监控。在client端,建议对"消息数量/字节数"的速率(全局的和对于每⼀个topic),请求的"速率/⼤⼩/耗时"进⾏监控。还有consumer端,所有partition的最⼤的落后情况和最⼩的fetch请求的速率。consumer为了能跟上,最⼤落后数量需要少于⼀个threshold并且最⼩fetch速率需要⼤于0.
Grafana画图 上传 下⾯ json⽂件
{
“__inputs”: [
{
“name”: “DS_PROMETHEUS”,
“label”: “Prometheus”,
“description”: “”,