本文是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是一個跨平臺的開源的度量分析和可視化工具,能夠經過將採集的數據查詢而後可視化的展現,並及時通知,支持多種數據源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB。通常都使用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: prometheus-mq-rocketmq : prometheus : proxy : 1 : http://prometheus-mq-rocketmq:9090 : false : : 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: 'storage-mysql' : 1 : 'storage-mysql' : '' : file : : path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/storage-mysql
'mq-rocketmq' : 1 : 'mq-rocketmq' : 'mq-rocketmq' : file : : path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/mq-rocketmq
建議使用provisioning-dashboards方式去定義dashboard,這樣的dashboard在grafana界面是不容許修改的,更加安全,防止誤操做。
(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啓動時從哪裏加載dashboards和datasources,即以前git clone下的目錄。
env: - 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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。