通過strimzi部署的kafka集群,如何部署prometheus+grafana去監控呢?官方文檔信息量太大,即便照著做也可能失敗,這裡有一份詳細的保姆級操作指南,助您成功部署監控服務 ...
歡迎訪問我的GitHub
這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos
本篇概覽
- 由於整個系列的實戰都涉及到消息生產和消費,所以咱們需要一套監控服務,用於觀察各種操作的效果,例如生產消息是否成功、消息是否被消費、有沒有發生堆積等
- 因此,在前文完成了最基本的部署和體驗後,今天就一起來把監控服務部署好,為後續的實戰提供良好的後勤支撐
- 今天的實戰,假設CentOS操作系統、kubernetes環境、pv這三樣都已提前裝好,我們要做的是:通過strimzi部署一套kafka服務,並且帶有prometheus和grafana來監控這個kafka
- 如果您對安裝kubernetes和pv還不瞭解,請參考:《快速搭建雲原生開發環境(k8s+pv+prometheus+grafana)》,要註意的是,此文中雖然介紹瞭如何安裝prometheus+grafana,但是在本篇用不上,您在參考此文的時候,只看k8s+pv部分即可
- 本篇的操作如下圖所示,綠色部分及其內部是咱們要做的事情,前面的幾個步驟假設您已經提前做好了
本文適合的讀者
- 第一種讀者:對欣宸的實戰系列有信心,打算按照本文去部署監控服務
- 第二種讀者:對官方資料存在疑問,尋求輔助信息加以對照
- 第三中讀者:按照官方資料操作,結果難以成功(例如grafana上的數據始終為空)
- 這裡提一下,本來欣宸也是按官方資料去部署監控的,然而遇到各種問題,要麼服務啟動失敗,要麼grafana沒有數據,反覆修改調整嘗試後才部署成功並且數據正常,因此寫下此文避免今後再次踩坑,也希望這點經驗能給更多人提供有價值的參考,畢竟網上的strimzi類原創並不多,涉及監控的就更少了
重點問題需要先澄清
- 首先要搞清楚的是:咱們常說的prometheus-operator,到底是啥?
- 如下圖,可見首先prometheus-operator是個github賬號,該賬號下麵有兩個重要的倉庫:prometheus-operator和kube-prometheus
- 關於prometheus-operator和kube-prometheus這兩個倉庫的區別,繼續看官方描述,如下圖,prometheus-operator是基礎,通過CRD簡化了prometheus、alertmanager以及其他監控組件的部署,而kube-prometheus則是在prometheus-operator的基礎上增加了很多集群監控的樣例,例如多實例、各種指標的exporter等等
- 簡單的說:prometheus-operator只提供監控服務用到各種要素,kube-prometheus在prometheus-operator的基礎上提供了具體的成果,即各種監控圖表
- 如果您看過《快速搭建雲原生開發環境(k8s+pv+prometheus+grafana)》,會發現此文已介紹瞭如何部署prometheus+grafana,並且各種監控圖表一應俱全,其實那裡用的就是kube-prometheus
- 現在相信您已經清楚了prometheus-operator和kube-prometheus的關係,然後重點來了:strimzi的官方資料中,搭建監控服務是基於prometheus-operator來做的
- 也就是說,按照strimzi官方的資料部署好的監控服務中,只能看到strimzi相關的內容,例如消息相關、kafka服務相關,至於kube-prometheus中提供的那些豐富的監控內容(例如宿主機、kubernetes等相關指標),都是不存在的...
- 當然您可能會說:只要strimzi的exporter正常,完全可以自己部署kube-prometheus,再參考官方的腳本去自己定做監控報表即可,確實,這樣做沒問題,但是對於本系列來說就超綱了,咱們只是想藉助prometheus和grafana觀察strimzi的指標而已,其他的並非主題,能省就省吧...
官方操作速看
- 動手前快速瀏覽官方操作指導,對基本操作有個大概瞭解(自己遇到的問題也在此指出,為您把坑提前避開)
- strimzi關於監控相關的資料鏈接如下圖紅色箭頭,地址是:https://strimzi.io/docs/operators/in-development/deploying.html#assembly-metrics-setup-str
-
執行kubectl apply -f kafka-metrics.yaml,這裡麵包含了Exporter(用於暴露指標),文件kafka-metrics.yaml可以在GitHub的發佈包中找到
-
執行以下命令,生成名為prometheus-operator-deployment.yaml的文件
curl -s https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml | sed -e '/[[:space:]]*namespace: [a-zA-Z0-9-]*$/s/namespace:[[:space:]]*[a-zA-Z0-9-]*$/namespace: my-namespace/' > prometheus-operator-deployment.yaml
- 執行kubectl create -f prometheus-operator-deployment.yaml,完成prometheus-operator的部署
- 修改prometheus.yml文件,這裡面是prometheus的配置信息,現在要修改的是namespace,改成您自己的
sed -i 's/namespace: .*/namespace: my-namespace/' prometheus.yaml
- 修改文件strimzi-pod-monitor.yaml,找到namespaceSelector.matchNames屬性,改成自己的namespace(漏掉這一步就是致命問題,會導致grafana不出數據,我漏過...)
- 執行以下操作
kubectl apply -f prometheus-additional.yaml
kubectl apply -f strimzi-pod-monitor.yaml
kubectl apply -f prometheus-rules.yaml
kubectl apply -f prometheus.yaml
- 部署grafana
kubectl apply -f grafana.yaml
- 上述步驟是對官方操作的簡單介紹,接下來就是我這邊逐步詳細的操作過程,可以確保成功的那種,為了避免官方文件變化導致部署問題,相關文件我都存入了自己的倉庫
- 現在相信您對整個部署過程已經有了大致瞭解,接下來咱們開始吧
實際操作之一:創建命名空間
- 這裡就隨意些吧,我的命名空間是aabbcc
kubectl create namespace aabbcc
實際操作之二:創建strimzi的資源
kubectl create -f 'https://strimzi.io/install/latest?namespace=aabbcc' -n aabbcc
實際操作之三:部署kafka+zookeeper+exporter
- 執行以下命令,會下載一個名為kafka-metrics.yaml 的配置文件,併在kubernets創建文件中配置的資源,包括kafka集群及其exporter的部署(exporter的作用是向prometheus暴露監控數據),註意namespace
kubectl create -f 'https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/kafka-metrics.yaml?namespace=aabbcc' -n aabbcc
- 等待容器啟動完畢,如下圖所示,kafka集群和exporter都已經就緒,接下來該部署prometheus了
實際操作之四:部署prometheus+grafana
- 為了部署prometheus+grafana,這邊要準備七個文件,接下來會詳細說明
- 首先是準備好prometheus-operator的資源文件,執行以下命令,註意將aabbcc改成您自己的namespace(因為文件bundle.yaml很大,導致此命令會耗時三分鐘左右,請耐心等待)
curl –connect-timeout 300 -m 300 -s https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml | sed -e '/[[:space:]]*namespace: [a-zA-Z0-9-]*$/s/namespace:[[:space:]]*[a-zA-Z0-9-]*$/namespace: aabbcc/' > prometheus-operator-deployment.yaml
- 執行完上面的命令後,在本地得到了名為prometheus-operator-deployment.yaml的文件,此文件是用來創建prometheus-operator的,稍後會用到
- 記得打開文件prometheus-operator-deployment.yaml查看一下,如果裡面內容為空(網路問題所致),就需要重新執行上一步操作,請務必要檢查,因為太容易出錯了!!!
- 第二個文件是prometheus的資源文件,執行以下命令,註意將aabbcc改成您自己的namespace
curl -s https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/prometheus.yaml | sed -e 's/namespace: .*/namespace: aabbcc/' > prometheus.yaml
- 執行完上面的命令後,在本地得到了名為prometheus.yaml的文件,此文件是用來創建prometheus的,稍後會用到
- 第三個文件名為strimzi-pod-monitor.yaml,下載地址:https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/strimzi-pod-monitor.yaml
- 第三個文件strimzi-pod-monitor.yaml下載後,要做的修改如下圖黃色箭頭所示,每個namespaceSelector.matchNames的值都要該成您自己的namespace,一共有四處,請務必要修改正確(我最初操作時grafana一直沒有數據,最終發現是漏了這一步導致的)
- 第四個文件名為grafana-service-nodeport.yaml,下載地址:https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/grafana-service-nodeport.yaml ,這個是定義了外部訪問grafana頁面的埠,我這裡配置的是31330埠,您可以按照自己的實際情況去修改
- 另外還有三個文件,它們不需要做任何修改,直接下載到本地即可,下載命令如下
wget https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/prometheus-additional.yaml
wget https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/prometheus-rules.yaml
wget https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/grafana.yaml
- 至此,咱們本地一共生成了七個文件,這裡用表格對其做說明,請檢查確認,以免遺漏
編號 | 文件名 | 作用 | 是否需要修改 |
---|---|---|---|
1 | prometheus-operator-deployment.yaml | 創建prometheus-operator | 是 |
2 | prometheus.yaml | 創建prometheus | 是 |
3 | strimzi-pod-monitor.yaml | prometheus採集pod指標的規則 | 是 |
4 | prometheus-additional.yaml | 可以在此增加prometheus的採集job | 否 |
5 | prometheus-rules.yaml | 告警規則 | 否 |
6 | grafana.yaml | 創建grafana | 否 |
7 | grafana-service-nodeport.yaml | grafana的服務配置文件,埠是31330 | 否 |
- 至此,所有文件都準備好了,先執行以下命令創建prometheus-operator,再次提醒,檢查prometheus-operator-deployment.yaml的內容,很有可能因為網路問題導致此文件為空,需要重新下載
kubectl create -f prometheus-operator-deployment.yaml
- 執行以下命令完成prometheus和grafana的創建
kubectl apply -f prometheus-additional.yaml
kubectl apply -f strimzi-pod-monitor.yaml
kubectl apply -f prometheus-rules.yaml
kubectl apply -f prometheus.yaml
kubectl apply -f grafana.yaml
kubectl create clusterrolebinding kube-state-metrics-admin-binding \
--clusterrole=cluster-admin \
--user=system:serviceaccount:default:prometheus-server
kubectl apply -f grafana-service-nodeport.yaml
- 上述命令要註意的是:prometheus-operator-deployment.yaml文件太大了,不能用kubectl apply命令,只能用kubectl create命令
- 至此,prometheus+grafana已部署完成,接下來咱們登錄grafana,導入dashboard
實際操作之五:在grafana創建數據源
- dashboard就是grafana上的各種監控圖表,strimzi為我們提供了幾個樣例,咱們直接導入即可
- 假設我的kubernetes宿主機的IP地址是192.168.0.1,那麼grafana地址就是:192.168.0.1:31330
- 打開頁面後,grafana要求輸入賬號密碼,預設的賬號和密碼都是admin
- 登錄後,點擊下圖黃色箭頭位置,將prometheus設置為grafana的數據源
- 類型選擇prometheus
- prometheus地址如下圖黃色箭頭所示http://prometheus-operated:9090,最後點擊底部的Save & Test按鈕,就完成了數據源的添加,接下來可以添加dashboard(圖表)了
在grafana創建dashboard
- 現在,咱們只需要在grafana上添加dashboard,就能在頁面上監控kafka的各項數據了
- 如下圖,點擊黃色箭頭所指的Import按鈕
- 此時會出現導入dashboard的表單,咱們只要把strimzi提供的dashboard數據粘貼到下圖黃色箭頭所指區域即可
- strimzi提供了豐富的dashboard配置,我已搜集好放在倉庫中,地址:https://gitee.com/zq2599/blog_download_files/tree/master/strimzi/grafana/dashboard ,如下圖,打開紅框中的文件,將其內容複製到上圖grafana頁面中黃色箭頭指向的位置
- 註意選擇數據源
- 配置完成後,就能看到kafka監控信息了
驗證
- 接下來咱們生產和消費一些消息,看看grafana顯示的數據是否符合預期
- 執行以下命令,進入生產消息的交互模式,輸入一些消息(每次回車都會發送一條)
kubectl -n aabbcc \
run kafka-producer \
-ti \
--image=quay.io/strimzi/kafka:0.32.0-kafka-3.3.1 \
--rm=true \
--restart=Never \
-- bin/kafka-console-producer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic
- 生產消息的信息很快就在grafa圖表中體現出來,如下圖
- 再開啟一個控制台,執行以下命令消息消息
kubectl -n aabbcc \
run kafka-consumer \
-ti \
--image=quay.io/strimzi/kafka:0.32.0-kafka-3.3.1 \
--rm=true \
--restart=Never \
-- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
- 數十秒後,grafana上就會看見消費消息的指標數據,如下圖右側
關於prometheus的存儲
- 細心的您可能會發現:prometheus採集的數據並沒有存儲在外部,而是存儲在容器內部,這樣一旦pod被殺,數據就會丟失,情況確實如此
- prometheus的存儲屬於prometheus-operator鄰域的配置,篇幅所限就不在本篇細說了,這裡給出一些參考信息,您可以自己動手試試,如下圖,在prometheus.yaml文件中,紅色箭頭所指位置可以添加pvc,這樣就能使用當前kubernetes環境的pv了,grafana的存儲配置亦是如此
kafka視圖
-
除了strimzi提供的grafana圖表,我們還可以使用grabana官網上的kafka圖標,最具代表性的應該是Kafka Exporter Overview,導入方法很簡單,如下圖,在導入表單上輸入ID號7589即可(記得點擊Load按鈕,數據源繼續選prometheus)
-
此dashboard的效果如下
-
至此,strimzi中部署監控的實戰已經完成,希望本篇能給您一些參考,助您順利完成部署,歡迎您繼續關註《strimzi實戰》系列,接下來會解鎖更多strimzi的神奇能力