strimzi實戰之三: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的指標而已,其他的並非主題,能省就省吧...

官方操作速看

  1. 執行kubectl apply -f kafka-metrics.yaml,這裏麪包含了Exporter(用於暴露指標),文件kafka-metrics.yaml可以在GitHub的發佈包中找到

  2. 執行以下命令,生成名爲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
  1. 執行kubectl create -f prometheus-operator-deployment.yaml,完成prometheus-operator的部署
  2. 修改prometheus.yml文件,這裏面是prometheus的配置信息,現在要修改的是namespace,改成您自己的
sed -i 's/namespace: .*/namespace: my-namespace/' prometheus.yaml
  1. 修改文件strimzi-pod-monitor.yaml,找到namespaceSelector.matchNames屬性,改成自己的namespace(漏掉這一步就是致命問題,會導致grafana不出數據,我漏過...)
  2. 執行以下操作
kubectl apply -f prometheus-additional.yaml
kubectl apply -f strimzi-pod-monitor.yaml
kubectl apply -f prometheus-rules.yaml
kubectl apply -f prometheus.yaml
  1. 部署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的神奇能力

歡迎關注博客園:程序員欣宸

學習路上,你不孤單,欣宸原創一路相伴...

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