kafka的監控

Kafka使用Yammer Metrics來報告server和client的衆多metric。還可以使用其他的插件來跟你的監控系統連接起來,比如https://cwiki.apache.org/confluence/display/KAFKA/JMX+Reporters中提到的ganglia和Graphite等。默認使用的是JMX,最簡單的觀察方式是使用jconsole連接你的server或者client,就可以看到所有可用的metric。我自己是使用Zabbix跟JMX對接,監測一些metric,並進行報警,以下metric是值得關注的:

 

描述:所有的topic的消息速率(消息數/秒)

Mbean名:"kafka.server":name="AllTopicsMessagesInPerSec",type="BrokerTopicMetrics"

正常的值:

 

描述:所有的topic的流入數據速率(字節/秒)

Mbean名:"kafka.server":name="AllTopicsBytesInPerSec",type="BrokerTopicMetrics"

正常的值:

 

描述:producer或Fetch-consumer或Fetch-follower的請求速率(請求次數/秒)

Mbean名:"kafka.network":name="{Produce|Fetch-consumer|Fetch-follower}-RequestsPerSec",type="RequestMetrics"

正常的值:

 

描述:所有的topic的流出數據速率(字節/秒)

Mbean名: "kafka.server":name="AllTopicsBytesOutPerSec",type="BrokerTopicMetrics"

正常的值:

 

描述:刷日誌的速率和耗時

Mbean名: "kafka.log":name="LogFlushRateAndTimeMs",type="LogFlushStats"

正常的值:

 

描述:正在做複製的partition的數量(|ISR| < |all replicas|)

Mbean名:"kafka.server":name="UnderReplicatedPartitions",type="ReplicaManager"

正常的值:0

 

描述:當前的broker是否爲controller

Mbean名:"kafka.controller":name="ActiveControllerCount",type="KafkaController"

正常的值:在集羣中只有一個broker的這個值爲1

 

描述:選舉leader的速率

Mbean名:"kafka.controller":name="LeaderElectionRateAndTimeMs",type="ControllerStats"

正常的值:如果有broker掛了,此值非0

 

描述:Unclean的leader選舉速率

Mbean名:"kafka.controller":name="UncleanLeaderElectionsPerSec",type="ControllerStats"

正常的值:0

 

描述:該broker上的partition的數量

Mbean名: "kafka.server":name="PartitionCount",type="ReplicaManager"

正常的值:應在各個broker中平均分佈

 

描述:Leader的replica的數量

Mbean名: "kafka.server":name="LeaderCount",type="ReplicaManager"

正常的值:應在各個broker中平均分佈

 

描述:ISR的收縮(shrink)速率

Mbean名:"kafka.server":name="ISRShrinksPerSec",type="ReplicaManager"

正常的值:如果一個broker掛掉了,一些partition的ISR會收縮。當那個broker重新起來時,一旦它的replica完全跟上,ISR會擴大(expand)。除此之外,正常情況下,此值和下面的擴大速率都是0。

 

描述:ISR的擴大(expansion)速率

Mbean名: "kafka.server":name="ISRExpandsPerSec",type="ReplicaManager"

正常的值:參見ISR的收縮(shrink)速率

 

描述:follower落後leader replica的最大的消息數量

Mbean名:"kafka.server":name="([-.\w]+)-MaxLag",type="ReplicaFetcherManager"

正常的值:小於replica.lag.max.messages

 

描述:每個follower replica落後的消息速率

Mbean名:"kafka.server":name="([-.\w]+)-ConsumerLag",type="FetcherLagMetrics"

正常的值:小於replica.lag.max.messages

 

描述:等待producer purgatory的請求數

Mbean名:"kafka.server":name="PurgatorySize",type="ProducerRequestPurgatory"

正常的值:如果ack=-1,應爲非0值

 

描述:等待fetch purgatory的請求數

Mbean名:"kafka.server":name="PurgatorySize",type="FetchRequestPurgatory"

正常的值:依賴於consumer的fetch.wait.max.ms的設置

 

描述:一個請求(producer,Fetch-Consumer,Fetch-Follower)耗費的所有時間

Mbean名:"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-TotalTimeMs",type="RequestMetrics"

正常的值:包括了queue, local, remote和response send time

 

描述:請求(producer,Fetch-Consumer,Fetch-Follower)在請求隊列中的等待時間

Mbean名:"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-QueueTimeMs",type="RequestMetrics"

正常的值:

 

描述:請求(producer,Fetch-Consumer,Fetch-Follower)leader處理請求花的時間

Mbean名:"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-LocalTimeMs",type="RequestMetrics"

正常的值:

 

描述:請求(producer,Fetch-Consumer,Fetch-Follower)等待follower花費的時間

Mbean名:"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-RemoteTimeMs",type="RequestMetrics"

正常的值:producer的ack=-1時,非0才正常

 

描述:發送響應花費的時間

Mbean名:"kafka.network":name="{Produce|Fetch-Consumer|Fetch-Follower}-ResponseSendTimeMs",type="RequestMetrics"

正常的值:

 

描述:consumer落後producer的消息數量

Mbean名:"kafka.consumer":name="([-.\w]+)-MaxLag",type="ConsumerFetcherManager"

正常的值:

 

建議對GC耗時和其他參數和諸如系統CPU,I/O時間等等進行監控。在client端,建議對"消息數量/字節數"的速率(全局的和對於每一個topic),請求的"速率/大小/耗時"進行監控。還有consumer端,所有partition的最大的落後情況和最小的fetch請求的速率。consumer爲了能跟上,最大落後數量需要少於一個threshold並且最小fetch速率需要大於0.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章