摘要:在監控模塊最大化利用了,并在其基礎上添加了很多組件,實現了多租戶管理高可用的監控集群。其使用的核心監控組件就是。請求身份驗證和授權由外部反向代理處理。技術方案實現討論細節大會講稿本文為容器監控實踐系列文章,完整內容見
一.概述
cortex:一個支持多租戶、水平擴展的prometheus服務。
當時調研cortex其實是因為看到了Weave Cloud這個商業產品中的監控模塊介紹,weave也叫weave works,官方地址是:https://cloud.weave.works,是一個專注于容器微服務的paas平臺。
WeaveCloud在監控模塊最大化利用了Prometheus,并在其基礎上添加了很多組件,實現了多租戶管理、高可用的監控集群。其使用的核心監控組件就是cortex。
本文主要分享的是cortex的運行機制,關于Weave Cloud的產品定位和功能可以看下后續的文章:[商業方案-weave work]()
Cortex是一個CNCF的沙盒項目,目前被幾個線上產品使用:Weave Cloud、GrafanaCloud和FreshTracks.io
為什么不直接運行Prometheus,而用Cortex?
ps:來自cortex kubecon大會演講
作為服務,cortex提供了鑒權和訪問控制
數據永久保留,狀態能夠被管理
提供持久化、高可用、伸縮性
提供更好的查詢效率,尤其是長查詢
二.主要功能針對以上需求,Cortex提供的主要功能或特色如下:
支持多租戶:Prometheus本身沒有的租戶概念。這意味著,它無法對特定于租戶的數據訪問和資源使用配額,提供任何形式的細粒度控制。Cortex可以從多個獨立的prometheus實例中獲取數據,并按照租戶管理。
長期存儲:基于遠程寫入機制,支持四種開箱即用的長期存儲系統:AWS DynamoDB、AWS S3、Apache Cassandra和Google Cloud Bigtable。
全局視圖:提供所有prometheus server 整合后的時間序列數據的單一,一致的“全局”視圖。
高可用:提供服務實例的水平擴展、聯邦集群等
最大化利用了Prometheus
相似的競品:
Prometheus + InfluxDB:使用InfluxData
Prometheus + Thanos:長期存儲、全局視圖
Timbala:多副本、全局視圖,作者是Matt Bostock
M3DB:自動擴縮容,來自uber
ps:來自weave work上試用監控模塊時的截圖
1.安裝監控的agent:
2.概覽視圖
3.資源監控面板
4.監控詳情頁面
5.添加監控
6.配置報警
在k8s集群中部署所需要的yaml列表為:
[https://github.com/weaveworks...](https://github.com/weaveworks...
)
部署的agent時的腳本內容是:
#!/bin/sh set -e # Create a temporary file for the bootstrap binary TMPFILE="$(mktemp -qt weave_bootstrap.XXXXXXXXXX)" || exit 1 finish(){ # Send only when this script errors out # Filter out the bootstrap errors if [ $? -ne 111 ] && [ $? -ne 0 ]; then curl -s >/dev/null 2>/dev/null -H "Accept: application/json" -H "Authorization: Bearer $token" -X POST -d "{"type": "onboarding_failed", "messages": {"browser": { "type": "onboarding_failed", "text": "Installation of Weave Cloud agents did not finish."}}}" https://cloud.weave.works/api/notification/external/events || true fi # Arrange for the bootstrap binary to be deleted rm -f "$TMPFILE" } # Call finish function on exit trap finish EXIT # Parse command-line arguments for arg in "$@"; do case $arg in --token=*) token=$(echo $arg | cut -d "=" -f 2) ;; esac done if [ -z "$token" ]; then echo "error: please specify the instance token with --token=三.實現原理" exit 1 fi # Notify installation has started curl -s >/dev/null 2>/dev/null -H "Accept: application/json" -H "Authorization: Bearer $token" -X POST -d "{"type": "onboarding_started", "messages": {"browser": { "type": "onboarding_started", "text": "Installation of Weave Cloud agents has started"}}}" https://cloud.weave.works/api/notification/external/events || true # Get distribution unamestr=$(uname) if [ "$unamestr" = "Darwin" ]; then dist="darwin" elif [ "$unamestr" = "Linux" ]; then dist="linux" else echo "This OS is not supported" exit 1 fi # Download the bootstrap binary echo "Downloading the Weave Cloud installer... " curl -Ls "https://get.weave.works/bootstrap?dist=$dist" >> "$TMPFILE" # Make the bootstrap binary executable chmod +x "$TMPFILE" # Execute the bootstrap binary "$TMPFILE" "--scheme=https" "--wc.launcher=get.weave.works" "--wc.hostname=cloud.weave.works" "--report-errors" "$@"
Cortex與Prometheus的交互圖:
原理圖:
Cortex中各組件的作用:
Retrieval:采集組件,運行在用戶k8s集群上,從用戶應用中拉取監控指標,并把這些數據推送給云平臺的服務
Frontend: 負載均衡/路由轉發/權限認證,接受Retrieval發送來的請求,這里用的nginx
Distributor:分發器,把用戶推送來的監控指標,按照用戶id、指標名稱、標簽做一致性hash,然后并行交給后面的多個ingester處理(grpc交互)。是監控數據寫入的第一站
Ingester:處理器,將監控數據保存到promtheus中,高度定制了MemorySeriesStorage模塊,分塊存儲、寫入內存并索引(使用AWS的DynamoDB產品),最后寫入磁盤
讀寫分離:ingest和query分開為兩個服務
Cortex由多個可水平擴展的微服務組成。每個微服務使用最合適的技術進行水平縮放; 大多數是無狀態的,而有些(即Retrieval)是半有狀態的并且依賴于一致性哈希
Prometheus實例從各種目標中抓取樣本,然后將它們推送到Cortex(使用Prometheus的遠程寫入API),并對發送的Protocol Buffers序列化數據進行Snappy壓縮。
Cortex要求每個HTTP請求都帶有一個header,用于指定請求的租戶ID。請求身份驗證和授權由外部反向代理處理。
傳入的樣本(來自Prometheus的寫入)由Distributor處理,而傳入的讀取(PromQL查詢)由查詢前端處理。
查詢緩存:
查詢時會緩存存查詢結果,并在后續查詢中復用它們。如果緩存的結果不完整,則查詢前端計算所需的子查詢并在下游查詢器上并行執行它們。
并發查詢:
查詢作業接受來自查詢器的gRPC流請求,為了實現高可用性,建議您運行多個前端,且前端數量少于查詢器數量。在大多數情況下,兩個應該足夠了。
技術方案實現討論細節:https://goo.gl/prdUYV
CNCF TOC:https://docs.google.com/presentation/d/190oIFgujktVYxWZLhLYN4q8p9dtQYoe4sxHgn4deBSI/edit#slide=id.g3b8e2d6f7e_0_101
kubecon 大會講稿:https://kccna18.sched.com/event/GrXL/cortex-infinitely-scalable-prometheus-bryan-boreham-weaveworks
本文為容器監控實踐系列文章,完整內容見:container-monitor-book
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32981.html
摘要:在監控模塊最大化利用了,并在其基礎上添加了很多組件,實現了多租戶管理高可用的監控集群。其使用的核心監控組件就是。請求身份驗證和授權由外部反向代理處理。技術方案實現討論細節大會講稿本文為容器監控實踐系列文章,完整內容見 一.概述 cortex:一個支持多租戶、水平擴展的prometheus服務。 當時調研cortex其實是因為看到了Weave Cloud這個商業產品中的監控模塊介紹,we...
摘要:方案匯總一開源方案采集展示報警二商業方案三云廠商騰訊云阿里云百度云華為云四主機監控五日志監控六服務監控七存儲后端腦圖本文為容器監控實踐系列文章,完整內容見 概述 隨著越來越多的線上服務docker化,對容器的監控、報警變得越來越重要,容器監控有多種形態,有些是開源的(如promethues),而另一些則是商業性質的(如Weave),有些是集成在云廠商一鍵部署的(Rancher、谷歌云)...
摘要:為了解決單節點存儲的限制,沒有自己實現集群存儲,而是提供了遠程讀寫的接口,讓用戶自己選擇合適的時序數據庫來實現的擴展性。的其實是一個,至于在的另一端是什么類型的時序數據庫它根本不關心,如果你愿意,你也可以編寫自己的。 概述 Prometheus提供了本地存儲,即tsdb時序數據庫,本地存儲給Prometheus帶來了簡單高效的使用體驗,prometheus2.0以后壓縮數據能力也得到了...
摘要:為了解決單節點存儲的限制,沒有自己實現集群存儲,而是提供了遠程讀寫的接口,讓用戶自己選擇合適的時序數據庫來實現的擴展性。的其實是一個,至于在的另一端是什么類型的時序數據庫它根本不關心,如果你愿意,你也可以編寫自己的。 概述 Prometheus提供了本地存儲,即tsdb時序數據庫,本地存儲給Prometheus帶來了簡單高效的使用體驗,prometheus2.0以后壓縮數據能力也得到了...
閱讀 3609·2021-11-15 11:37
閱讀 2974·2021-11-12 10:36
閱讀 4403·2021-09-22 15:51
閱讀 2381·2021-08-27 16:18
閱讀 882·2019-08-30 15:44
閱讀 2164·2019-08-30 10:58
閱讀 1769·2019-08-29 17:18
閱讀 3269·2019-08-28 18:25