grafana&prometheus生產級容器化監控-1:生產級容器化

本文是grafana/prometheus生產級容器化實踐系列文章的第一篇。mysql

 

目錄:git

(1).grafana/prometheus簡單回顧github

(2).grafana/prometheus生產級實踐web

1.容器化多個prometheus實例sql

2.exporter組件docker

3.業務服務數據庫

4.grafanajson

(3).grafana/prometheus生產級容器化配置安全

1.注意事項微信

2.容器化步驟

3.關鍵配置

(4).相關文章

 

(1).grafana/prometheus簡單回顧

 

prometheus是時序數據庫,相比傳統數據庫更適合存儲監控類數據;是一套開源的系統監控報警框架。它啓發於 Google borgmon 監控系統;同時也是雲原生時代監控的事實標準。

 

Grafana是一個跨平臺的開源的度量分析和可視化工具,能夠經過將採集的數據查詢而後可視化的展現,並及時通知,支持多種數據源:GraphiteInfluxDBOpenTSDBPrometheusElasticsearchCloudWatchKairosDB。通常都使用prometheus做爲其數據源。

 

每個prometheus實例都有一個prometheus.xml配置,裏邊定義了抓取規則,從知足哪些條件的服務獲取metircs數據,默認60秒抓一次;而後在grafana上製做dashboard,在dashboard中定義查詢語句將監控數據展現爲監控圖表。

 

(2).grafana/prometheus生產級實踐

 


 

原始圖片位於:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/images/grafana-prometheus%E7%94%9F%E4%BA%A7%E7%BA%A7%E5%AE%9E%E8%B7%B5.jpg

 

如上圖所示:

 

1.容器化多個prometheus實例

因爲當數據量很大(metrics不少)或者grafana選擇的時間跨度很大時,prometheus的吞吐性能會頗有問題,再加上會有不少人經過grafana查看各業務數據,若是生產環境只部署一個prometheus,確定是有問題的,prometheus會常常性崩潰。

同時,這樣也能夠設置不一樣的數據保存時間,好比對於mq來講,我但願保留更長時間的數據。

 

2.exporter組件

prometheus-expoerter組件是一個數據收集和聚合的組件,以exporter-rocketmq爲例,prometheus經過prometheus.xml中定義的抓取規則定時從exporter-rocketmq拉取監控數據,exporter-rocketmq收到請求後,再從rocketmq集羣獲取監控數據,分析處理後聚合成metircs的格式返回給prometheus存儲。

本文中的rocketmq-exporter沒有使用官方的exporter,是根據筆者公司的狀況自行開發,後續會另行發文/開源。

 

3.業務服務

prometheus不只僅做爲基礎組件的監控數據存儲,一樣的,咱們能夠在業務服務中使用,去監控一些業務指標,好比筆者曾經開發的oss上傳基礎服務,筆者十分關心文件上傳數,上傳文件大小/時間,以及相關的p90等指標。幫助筆者發現/確認問題,事實上頗有幫助,好比曾經發現有1G大小的文件被上傳等異常現象。

成本強相關的服務(不侷限於此)很是適合這樣處理。

能夠理解爲監控打點。

 

下圖爲oss上傳服務的上傳文件大小的監控截圖:

 


下圖爲oss上傳服務架構圖:

原圖參見:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/images/caf-cdn%E6%96%B9%E6%A1%88.jpg


 

相關文章參見:

cdn-3:上傳文件到oss-bucket生產級別的完整監控

 

4.grafana

主要說明3部分,grafana-web, provisioning-datasources, provisioning-dashboards

 

grafana-web:

經過豐富圖表展現監控數據,這些圖表有dashboard定義。

 

provisioning-datasources:

位於:

https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/grafana/provisioning/datasources


這個目錄下只有一個文件datasource.yml,定義grafana獲取查詢數據的數據源,能夠定義多個數據源,不一樣的圖表/dashboard可使用不一樣的數據源。

datasources: - name: prometheus-mq-rocketmq   type: prometheus   access: proxy   orgId: 1   url: http://prometheus-mq-rocketmq:9090   isDefault: false   jsonData:      tlsAuth: false tlsAuthWithCACert: false

 

provisioning-dashboards:

https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards


這個目錄下有一個provision.yml配置文件,和不一樣監控組件的dashboard目錄。

provision.yml定義了dashboard位置,用於grafana啓動時加載。

 

providers: - name: 'storage-mysql'   orgId: 1   folder: 'storage-mysql'   folderUid: ''   type: file   options: path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/storage-mysql
 - name: 'mq-rocketmq'   orgId: 1   folder: 'mq-rocketmq'   folderUid: 'mq-rocketmq'   type: file   options: path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/mq-rocketmq


 

建議使用provisioning-dashboards方式去定義dashboard,這樣的dashboardgrafana界面是不容許修改的,更加安全,防止誤操做。

 

(3).grafana/prometheus生產級容器化配置

 

筆者提供了一個grafana/prometheus生產級的容器化配置,徹底按照本文方式實現,位於:

https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro

 

1.注意事項

a.本配置使用的是local-pv,生產使用要換成雲存儲,本配置提供nfs的配置(已註釋)。

b.imagePullSecret是註釋掉的,生產要打開,由於鏡像倉庫都是有secret的。

c.注意先創建pv目錄和掛載,注意目錄的權限,不然prometehus, grafana容器化失敗,給775或777。

 

2.容器化步驟

kubectl apply -f grafana-prometheus-image-repo-secret.yaml(生產環境須要改爲本身的祕鑰,本地部署不要執行)

kubectl apply -f grafana-prometheus-namespace.yaml

 

分別進入子目錄執行:kubectl apply -f .

 

容器化完成後的樣例:

 

 


 


不過如今dashboard是沒有數據顯示的,如何將各種基礎中間件歸入grafana/prometheus監控,請關注後續文章。

 

3.關鍵配置


下述關鍵配置位於文件:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/grafana/grafana-statefulset.yaml

 

下邊的配置保證grafana啓動前先把dashboards和datasources配置下載到本地。

 

initContainers: - name: dashboards-clear #存到你公司本身的鏡像倉庫,不要用docker官方倉庫 image: alpine/git:1.0.7 command: ['sh', '-c', 'rm -rf inc-k8s-app-config'] volumeMounts: - name: pv-metrics-grafana mountPath: /git - name: dashboards-sync #存到你公司本身的鏡像倉庫,不要用docker官方倉庫 image: alpine/git:1.0.7 command: ['sh', '-c', 'git clone '] volumeMounts: - name: pv-metrics-grafana mountPath: /git




下圖配置指定了grafana啓動時從哪裏加載dashboardsdatasources,即以前git clone下的目錄。

 

env:  #開啓percona的dashboards,用於mysql監控dashboard顯示,關閉,咱們經過provisioning方式實現dashboard導入. #- name: GF_INSTALL_PLUGINS # value: "percona-percona-app" - name: GF_PATHS_PROVISIONING value: "/var/lib/grafana"



 

(4).相關文章

 

1.cdn-3:上傳文件到oss-bucket生產級別的完整監控


2.基於阿里雲自建kubernetes集羣與微服務的生產實踐系列-1:總體架構-1

 


本文分享自微信公衆號 - 千里行走(a_thousands_of_miles)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索