strimzi實戰之三:prometheus+grafana監控(按官方文檔搞不定監控?不妨看看本文,已經踩過坑了)

来源:https://www.cnblogs.com/bolingcavalry/archive/2023/09/26/17724689.html
-Advertisement-
Play Games

通過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的指標而已,其他的並非主題,能省就省吧...

官方操作速看

  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的神奇能力

歡迎關註博客園:程式員欣宸

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文已收錄至GitHub,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 原創不易,註重版權。轉載請註明原作者和原文鏈接 目錄記憶體碎片如何產生的記憶體分配器怎麼看是否有記憶體碎片碎片率的意義清理記憶體碎片低於4.0-RC3版本的Redis高於4.0-RC3版本的Redis 在我們探究和優化Re ...
  • 本期分享將對 Excelize 的 2023 年部分更新背後的技術點、Go 1.21.0 版本中 XML 標準庫的相容性問題,以及如何構建 WebAssembly 版本跨語言支持展開討論。 ...
  • springboot2.7 java8 問題 在使用工廠模式封裝service時,需要通過service的class獲取其類型註解,但是有些工廠類可以取到annotation註解,有些取不到 渠道註解: /** * xxx渠道註解 * */ @Target({ElementType.TYPE}) @ ...
  • BeingDebugged 是`Windows`系統`PEB`結構體中的一個成員,它是一個標誌位,用於標識當前進程是否正在被調試。BeingDebugged的值為0表示當前進程未被調試,值為1表示當前進程正在被調試。由於`BeingDebugged`是在`PEB`結構體中存儲的,因此可以通過訪問`P... ...
  • 基於java線上婚紗定製系統設計與實現,可適用於線上婚紗攝影預定系統,基於web的婚紗影樓管理系統設計,基於web的婚紗影樓管理系統設計,婚紗攝影網系統,婚紗攝影網站系統,婚紗攝影網站系統,婚紗系統,婚紗管理系統等等; ...
  • EasyExcel動態表頭導出(支持多級表頭) 在很多業務場景中,都會應用到動態表頭的導出,也會涉及到多級表頭的導出,如下圖所示 通過EasyExcel,我們可以快速實現這一需求,具體代碼如下 DynamicHeader import java.util.List; /** *@Author: <a ...
  • 1章:系統基礎信息模塊詳解 通過第三方模塊獲取伺服器的基本性能、塊設備、網卡介面、網路地址庫等信息。 1.1 系統性能模塊psutil:獲取系統性能信息、記憶體信息、磁碟信息、網路信息、用戶信息等。 1.2 IP地址處理模塊IPy: 處理IP地址,網段等。 1.3 DNS處理模塊dnspython: ...
  • 在工具類中封裝getBean,使用哪個介面來實現 實事上,在工具類中,實現BeanFactoryPostProcessor和ApplicationContextAware介面後,使用它們構造方法里的對象ConfigurableListableBeanFactory和ApplicationContex ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...