1. 程式人生 > >你與Kafka監控進階,只差一個“視角”的距離

你與Kafka監控進階,只差一個“視角”的距離

Kakfa監控實踐

監控工具選擇

實際使用中對比了多種Kafka監控工具,最終選擇如下幾種工具:

Kafka Monitor:這是LinkedIn開源的Kafka核心功能監控工具,並且提供了視覺化介面。它可以模擬資料生產並消費,基本上覆蓋了黑盒監控大部分指標,包括叢集核心功能、資料讀寫、讀寫延遲等。使用者使用成本也相對簡單,只需對接告警系統即可。

如果你的產品用到了Kafka,強烈推薦使用Kafka Monitor。

 

▲圖一 Kafka Monitor視覺化介面

▲表一 Kafka Monitor監控指標樣例

 

Kafka Manager:

這是Yahoo開源的Kafka管理工具,更偏重於對Kafka叢集指標採集,同時也有一些主題管理功能。

▲圖二 Kafka Manager介面

 

Jmxtrans+Influxdb:Jmxtrans通過Jmx埠可以採集Kafka多種維度監控資料,預儲存在Influxdb。Jmxtrans也是非常優秀的工具,通過它採集的資料項很多,因此採集項篩選是一個難題,篩選後的資料不僅可以作為儀表盤展現使用,也可以為後續產品層面的監控做準備。

 

叢集層面的空間使用率相關資料,需要自研工具來完成,附件中提供了參考指令碼。

 

▲圖三 Kafka運維儀表盤部分指標

 

監控指標

 

確定黑盒監控指標

黑盒監控指標不符合預期說明叢集不能正常工作或出現異常,它更多是一種現象。常用的黑盒監控指標有:叢集核心功能、資料讀寫、讀寫延遲等。

 

確定白盒監控指標

對比其他儲存元件,大部分監控指標是通用的,或者能找到類似的監控指標,白盒監控是黑盒監控的補充,服務於故障定位,從叢集容量、流量、延遲、錯誤四個方面梳理。

▲表二 梳理Kafka監控指標分類

 

部分採集指標

 

  • 核心功能

採集項:produce-availability-avg

說明:單獨建立監控主題,對其進行功能監控,覆蓋訊息生成、寫入、消費整個生命週期

資料來源:Kafka Monitor

 

  • 主題操作

採集項:topic-function

說明:覆蓋主題的整個生命週期(創建出的主題要清理,否則主題過多,在例項恢復時會很慢)

資料來源:自研

 

  • 延遲

採集項:records-delay-ms-avg

說明:生產、消費延遲時間

來源:Kafka Monitor

 

採集項:records-delay-ms-max

說明:最大延遲時間

來源:Kafka Monitor

 

  • 流量

採集項:kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec,topic=*

說明:某一主題每秒寫入

來源:Jmxtrans

 

採集項:kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec,topic=*

說明:某一主題每秒讀出

資料來源:Jmxtrans

 

採集項:kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=*

說明:某一主題每秒寫入訊息數

資料來源:Jmxtrans

 

採集項:kafka.network:type=RequestMetrics,name=RequestsPerSec,request=Produce

說明:每秒Produce的請求次數

資料來源:Jmxtrans

 

  • 容量

採集項:kafka.log:type=Log,name=Size,topic=*,partition=*

說明:分割槽大小

資料來源:Jmxtrans

 

採集項:topicSizeALL

說明:某一主題大小(需要基於各Broker資料進行計算)

資料來源:自研

 

  • 錯誤

採集項:kafka.controller:name=OfflinePartitionsCount,type=KafkaController

說明:沒有Leader的分割槽數

資料來源:Jmxtrans

 

採集項:kafka.controller:name=ActiveControllerCount,type=KafkaController

說明:是否為活躍控制器(整個叢集只能有1個例項為1)

資料來源:Jmxtrans

 

採集項:kafka.server:type=ReplicaFetcherManager,name=MaxLag,clientId=Replica

說明:副本落後主分片的最大訊息數量

資料來源:Jmxtrans

 

採集項:kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions

說明:正在做同步的分割槽數量

資料來源:Jmxtrans

 

採集項:kafka.server:type=ReplicaManager,name=LeaderCount

說明:Leader的Replica的數量

資料來源:Jmxtrans

 

採集項:kafka.server:clientId=*,name=ConsumerLag,partition=*,topic=*,type=FetcherLagMetrics

說明:消費延遲量(Lag)

資料來源:Jmxtrans

 

採集項:kafka.log:type=Log,name=LogEndOffset,topic=*,partition=*

說明:每個分割槽最後的Offset

資料來源:Jmxtrans

 

總結

Kafka監控經驗

  • 通過Jmxtrans獲取到採集項之後,如果期望獲取到全域性資料,則必須對所有Broker上的資料進行彙總計算,附件中提供了部分Jmxtrans採集項計算指令碼。

  • 在分割槽大小告警閾值設定上,主題的某個分割槽不要過大(我們場景,最大為800G),否則,在遷移分割槽時會很慢。

  • Kafka在不同資料目錄分配分割槽時,會按照分割槽數來均衡。因此,實際部署中,不同例項最好做到:資料目錄大小、資料目錄數一致。否則,在叢集達到上千個主題後,你的分割槽遷移工作量會很大。

  • 預採集資料。監控並不能一蹴而就,隨著產品或叢集變化,需要迭代。因此,需要預採集那些當前看似沒有價值的資料,當需要時,所存即所用。另外,從歷史故障中進行總結,也可以發掘一些待採集的監控資料。

  • 針對Kafka,一個可行的監控資料儲存、展現工具集:Jmxtrans+Influxdb+Grafana。Grafana既可以充當巡檢儀表盤,也可充當監控資料檢視工具。

  • 在Kafka採集項獲取或分析資料時,Jmxcmd也是不錯的小工具。

 

Kafka實際產品監控

 

資料匯流排、Kafka訊息佇列等公有云產品,一般是基於Kafka來實現。按照上述監控方法完善Kafka叢集監控,可以做到大部分Kafka問題都能及時發現。但對使用者來說,產品本身的監控才更為重要。

 

產品SLO指標

 

按照Google SRE提出的SLO(Service Level Objectives服務等級目標)和“錯誤預算”理論與實踐,需要從使用者視角對Kafka相關產品進行分析並監控。

 

以“資料匯流排”產品為例,這些產品一般提供給使用者的核心功能主要有:

  • 資料接入

  • 資料歸檔

 

在我們實際產品中,總結了歷史故障,確立了當前產品的SLO指標,並對其進行監控。部分SLO指標:

  • 流資料匯流排生命週期健康>99.9%

  • 重點使用者主題健康>99.9%

  • 歸檔延遲資料<20分鐘

 

▲圖四 資料匯流排SLO及錯誤預算部分指標預覽

 

滿足多租戶

 

如果只關注整體SLO指標,那麼有些租戶可能會遺漏,對於這些租戶的核心功能也需要監控,此時,我們需要藉助已有監控工具預採集的資料,這些資料包含了所有主題的相關資料。這樣,當我們需要知道使用者的主題時,就能快速搜尋到對應主題的流量、延遲等密切指標,及時反饋到租戶。

 

可以為租戶搜尋到的部分指標:

  • kafka.cluster:name=UnderReplicated,partition=*,type=Partition

  • kafka.log:name=LogEndOffset,partition=*,type=Log

  • kafka.log:name=LogStartOffset,partition=*,type=Log

  • kafka.log:name=Size,partition=*,type=Log

  • kafka.server:name=BytesInPerSec,type=BrokerTopicMetrics

  • kafka.server:name=BytesOutPerSec,type=BrokerTopicMetrics

  • kafka.server:name=MessagesInPerSec,topic=*,type=BrokerTopicMetrics

 

▲圖五 搜尋某租戶部分SLO指標結果

 

附:

Kafka監控相關指令碼

https://github.com/cloud-op/monitor/tree/master/kafka