<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Prometheus Thanos 多集群監(jiān)控

          共 3758字,需瀏覽 8分鐘

           ·

          2022-01-14 23:52

          原文鏈接:https://particule.io/en/blog/thanos-monitoring/

          介紹

          在本文中,我們將看到Prometheus監(jiān)控技術(shù)棧的局限性,以及為什么移動(dòng)到基于Thanos的技術(shù)棧可以提高指標(biāo)留存率并降低總體基礎(chǔ)設(shè)施成本。

          用于此演示的內(nèi)容可以在下面鏈接中獲取,并提交到他們各自的許可證。

          • https://github.com/particuleio/teks/tree/main/terragrunt/live/thanos

          • https://github.com/particuleio/terraform-kubernetes-addons/tree/main/modules/aws


          Kubernetes普羅米修斯技術(shù)棧

          在為我們的客戶部署Kubernetes基礎(chǔ)設(shè)施時(shí),在每個(gè)集群上部署監(jiān)控技術(shù)棧是標(biāo)準(zhǔn)做法。這個(gè)堆棧通常由幾個(gè)組件組成:

          • Prometheus:收集度量標(biāo)準(zhǔn)

          • 告警管理器:根據(jù)指標(biāo)查詢向各種提供者發(fā)送警報(bào)

          • Grafana:可視化豪華儀表板


          簡化架構(gòu)如下:


          注意事項(xiàng)

          這種架構(gòu)有一些注意事項(xiàng),當(dāng)你想從其中獲取指標(biāo)的集群數(shù)量增加時(shí),它的伸縮性以及可擴(kuò)展性不太好。

          多個(gè)Grafana

          在這種設(shè)置中,每個(gè)集群都有自己的Grafana和自己的一組儀表板,維護(hù)起來很麻煩。

          存儲指標(biāo)數(shù)據(jù)是昂貴的

          Prometheus將指標(biāo)數(shù)據(jù)存儲在磁盤上,你必須在存儲空間和指標(biāo)保留時(shí)間之間做出選擇。如果你想長時(shí)間存儲數(shù)據(jù)并在云提供商上運(yùn)行,那么如果存儲TB的數(shù)據(jù),塊存儲的成本可能會很高。同樣,在生產(chǎn)環(huán)境中,Prometheus經(jīng)常使用復(fù)制或分片或兩者同時(shí)運(yùn)行,這可能會使存儲需求增加兩倍甚至四倍。

          解決方案

          多個(gè)Grafana數(shù)據(jù)源

          可以在外部網(wǎng)絡(luò)上公開Prometheus的端點(diǎn),并將它們作為數(shù)據(jù)源添加到單個(gè)Grafana中。你只需要在Prometheus外部端點(diǎn)上使用TLS或TLS和基本認(rèn)證來實(shí)現(xiàn)安全性。此解決方案的缺點(diǎn)是不能基于不同的數(shù)據(jù)源進(jìn)行計(jì)算。

          Prometheus聯(lián)邦

          Prometheus聯(lián)邦允許從Prometheus中抓取Prometheus,當(dāng)你不抓取很多指標(biāo)數(shù)據(jù)時(shí),這個(gè)解決方案可以很好地工作。在規(guī)模上,如果你所有的Prometheus目標(biāo)的抓取持續(xù)時(shí)間都比抓取間隔長,可能會遇到一些嚴(yán)重的問題。

          Prometheus遠(yuǎn)程寫

          雖然遠(yuǎn)程寫入是一種解決方案(也由Thanos receiver實(shí)現(xiàn)),但我們將不在本文中討論“推送指標(biāo)”部分。你可以在這里[1]閱讀關(guān)于推送指標(biāo)的利弊。建議在不信任多個(gè)集群或租戶的情況下(例如在將Prometheus構(gòu)建為服務(wù)提供時(shí)),將指標(biāo)作為最后的手段。無論如何,這可能是以后文章的主題,但我們將在這里集中討論抓取。

          Thanos,它來了

          Thanos是一個(gè)“開源的,高可用的Prometheus系統(tǒng),具有長期存儲能力”。很多知名公司都在使用Thanos,也是CNCF孵化項(xiàng)目的一部分。

          Thanos的一個(gè)主要特點(diǎn)就是允許“無限”存儲空間。通過使用對象存儲(比如S3),幾乎每個(gè)云提供商都提供對象存儲。如果在前提環(huán)境下運(yùn)行,對象存儲可以通過rook或minio這樣的解決方案提供。

          它是如何工作的?

          Thanos和Prometheus并肩作戰(zhàn),從Prometheus開始升級到Thanos是很常見的。

          Thanos被分成幾個(gè)組件,每個(gè)組件都有一個(gè)目標(biāo)(每個(gè)服務(wù)都應(yīng)該這樣:)),組件之間通過gRPC進(jìn)行通信。

          Thanos Sidecar


          Thanos和Prometheus一起運(yùn)行(有一個(gè)邊車),每2小時(shí)向一個(gè)對象存儲庫輸出Prometheus指標(biāo)。這使得Prometheus幾乎是無狀態(tài)的。Prometheus仍然在內(nèi)存中保存著2個(gè)小時(shí)的度量值,所以在發(fā)生宕機(jī)的情況下,你可能仍然會丟失2個(gè)小時(shí)的度量值(這個(gè)問題應(yīng)該由你的Prometheus設(shè)置來處理,使用HA/分片,而不是Thanos)。

          Thanos sidecar與Prometheus運(yùn)營者和Kube Prometheus棧一起,可以輕松部署。這個(gè)組件充當(dāng)Thanos查詢的存儲。

          Thanos存儲

          Thanos存儲充當(dāng)一個(gè)網(wǎng)關(guān),將查詢轉(zhuǎn)換為遠(yuǎn)程對象存儲。它還可以在本地存儲上緩存一些信息。基本上,這個(gè)組件允許你查詢對象存儲以獲取指標(biāo)。這個(gè)組件充當(dāng)Thanos查詢的存儲。

          Thanos Compactor

          Thanos Compactor是一個(gè)單例(它是不可擴(kuò)展的),它負(fù)責(zé)壓縮和降低存儲在對象存儲中的指標(biāo)。下采樣是隨著時(shí)間的推移對指標(biāo)粒度的寬松。例如,你可能想將你的指標(biāo)保持2年或3年,但你不需要像昨天的指標(biāo)那么多數(shù)據(jù)點(diǎn)。這就是壓縮器的作用,它可以在對象存儲上節(jié)省字節(jié),從而節(jié)省成本。

          Thanos Query

          Thanos查詢是Thanos的主要組件,它是向其發(fā)送PromQL查詢的中心點(diǎn)。Thanos查詢暴露了一個(gè)與Prometheus兼容的端點(diǎn)。然后它將查詢分派給所有的“stores”。記住,Store可能是任何其他提供指標(biāo)的Thanos組件。Thanos查詢可以發(fā)送查詢到另一個(gè)Thanos查詢(他們可以堆疊)。

          • Thanos Store

          • Thanos Sidecar

          • Thanos Query


          還負(fù)責(zé)對來自不同Store或Prometheus的相同指標(biāo)進(jìn)行重復(fù)數(shù)據(jù)刪除。例如,如果你有一個(gè)度量值在Prometheus中,同時(shí)也在對象存儲中,Thanos Query可以對該指標(biāo)值進(jìn)行重復(fù)數(shù)據(jù)刪除。在Prometheus HA設(shè)置的情況下,重復(fù)數(shù)據(jù)刪除也基于Prometheus副本和分片。

          Thanos Query Frontend

          正如它的名字所暗示的,Thanos查詢前端是Thanos查詢的前端,它的目標(biāo)是將大型查詢拆分為多個(gè)較小的查詢,并緩存查詢結(jié)果(在內(nèi)存或memcached中)。
          還有其他組件,比如在遠(yuǎn)程寫的情況下接收Thanos,但這仍然不是本文的主題。

          多集群架構(gòu)

          有多種方法可以將這些組件部署到多個(gè)Kubernetes集群中,根據(jù)用例的不同,有些方法比其他方法更好,在這里我們不能給出詳細(xì)的介紹。


          我們的例子是在AWS上運(yùn)行,使用tEKS[2]部署了2個(gè)集群,我們的all in one解決方案將生產(chǎn)就緒的EKS集群部署在AWS上:

          • 一個(gè)觀察者集群[3]

          • 一個(gè)被觀察集群[4]


          我們的部署使用了官方的kube-prometheus-stack和bitnami thanos圖表。

          一切都是在我們的terraform-kubernetes-addons存儲庫中策劃的。

          Thanos demo文件夾中的目錄結(jié)構(gòu)如下:

          .
          ├──???env_tags.yaml
          ├──???eu-west-1
          │??├──???clusters
          │??│??└──???observer
          │??│?????├──???eks
          │??│?????│??├──???kubeconfig
          │??│?????│??└──???terragrunt.hcl
          │??│?????├──???eks-addons
          │??│?????│??└──???terragrunt.hcl
          │??│?????└──???vpc
          │??│????????└──???terragrunt.hcl
          │??└──???region_values.yaml
          └──???eu-west-3
          ???├──???clusters
          ???│??└──???observee
          ???│?????├──???cluster_values.yaml
          ???│?????├──???eks
          ???│?????│??├──???kubeconfig
          ???│?????│??└──???terragrunt.hcl
          ???│?????├──???eks-addons
          ???│?????│??└──???terragrunt.hcl
          ???│?????└──???vpc
          ???│????????└──???terragrunt.hcl
          ???└──???region_values.yaml

          這允許DRY(Don 't Repeat Yourself)基礎(chǔ)設(shè)施,并可以輕松地?cái)U(kuò)展AWS帳戶、區(qū)域和集群的數(shù)量。

          觀察者集群

          觀察者集群是我們的主集群,我們將從它查詢其他集群:

          Prometheus正在運(yùn)行:

          • Grafana啟用

          • Thanos邊車上傳到特定的桶


          kube-prometheus-stack?=?{
          ??enabled?????????????????????=?true
          ??allowed_cidrs???????????????=?dependency.vpc.outputs.private_subnets_cidr_blocks
          ??thanos_sidecar_enabled??????=?true
          ??thanos_bucket_force_destroy?=?true
          ??extra_values????????????????=?<<-EXTRA_VALUES
          ????grafana:
          ??????deploymentStrategy:
          ????????type:?Recreate
          ??????ingress:
          ????????enabled:?true
          ????????annotations:
          ??????????kubernetes.io/ingress.class:?nginx
          ??????????cert-manager.io/cluster-issuer:?"letsencrypt"
          ????????hosts:
          ??????????-?grafana.${local.default_domain_suffix}
          ????????tls:
          ??????????-?secretName:?grafana.${local.default_domain_suffix}
          ????????????hosts:
          ??????????????-?grafana.${local.default_domain_suffix}
          ??????persistence:
          ????????enabled:?true
          ????????storageClassName:?ebs-sc
          ????????accessModes:
          ??????????-?ReadWriteOnce
          ????????size:?1Gi
          ????prometheus:
          ??????prometheusSpec:
          ????????replicas:?1
          ????????retention:?2d
          ????????retentionSize:?"10GB"
          ????????ruleSelectorNilUsesHelmValues:?false
          ????????serviceMonitorSelectorNilUsesHelmValues:?false
          ????????podMonitorSelectorNilUsesHelmValues:?false
          ????????storageSpec:
          ??????????volumeClaimTemplate:
          ????????????spec:
          ??????????????storageClassName:?ebs-sc
          ??????????????accessModes:?["ReadWriteOnce"]
          ??????????????resources:
          ????????????????requests:
          ??????????????????storage:?10Gi
          ????EXTRA_VALUES

          為觀察者集群生成一個(gè)CA證書:

          • 這個(gè)CA將被進(jìn)入sidecar的被觀察集群所信任

          • 為Thanos querier組件生成TLS證書,這些組件將查詢被觀察集群


          Thanos組件部署:

          • Thanos組件全部部署完成

          • 查詢前端,作為Grafana的數(shù)據(jù)源端點(diǎn)

          • 存儲網(wǎng)關(guān)用于查詢觀察者桶

          • Query將對存儲網(wǎng)關(guān)和其他查詢器執(zhí)行查詢


          部署的額外Thanos組件:

          • 配置了TLS的Thanos查詢器對每個(gè)被觀察集群進(jìn)行查詢


          thanos-tls-querier?=?{
          ??"observee"?=?{
          ????enabled?????????????????=?true
          ????default_global_requests?=?true
          ????default_global_limits???=?false
          ????stores?=?[
          ??????"thanos-sidecar.${local.default_domain_suffix}:443"
          ????]
          ??}
          }

          thanos-storegateway?=?{
          ??"observee"?=?{
          ????enabled?????????????????=?true
          ????default_global_requests?=?true
          ????default_global_limits???=?false
          ????bucket??????????????????=?"thanos-store-pio-thanos-observee"
          ????region??????????????????=?"eu-west-3"
          ??}


          被觀測集群

          被觀測集群是Kubernetes集群,具有最小的Prometheus/Thanos安裝,將被觀測集群查詢。

          Prometheus operator正在運(yùn)行:

          • Thanos這邊就是上傳給觀察者特定的桶

          • Thanos邊車與TLS客戶端認(rèn)證的入口對象一起發(fā)布,并信任觀察者集群CA

          kube-prometheus-stack?=?{
          ??enabled?????????????????????=?true
          ??allowed_cidrs???????????????=?dependency.vpc.outputs.private_subnets_cidr_blocks
          ??thanos_sidecar_enabled??????=?true
          ??thanos_bucket_force_destroy?=?true
          ??extra_values????????????????=?<<-EXTRA_VALUES
          ????grafana:
          ??????enabled:?false
          ????prometheus:
          ??????thanosIngress:
          ????????enabled:?true
          ????????ingressClassName:?nginx
          ????????annotations:
          ??????????cert-manager.io/cluster-issuer:?"letsencrypt"
          ??????????nginx.ingress.kubernetes.io/ssl-redirect:?"true"
          ??????????nginx.ingress.kubernetes.io/backend-protocol:?"GRPC"
          ??????????nginx.ingress.kubernetes.io/auth-tls-verify-client:?"on"
          ??????????nginx.ingress.kubernetes.io/auth-tls-secret:?"monitoring/thanos-ca"
          ????????hosts:
          ????????-?thanos-sidecar.${local.default_domain_suffix}
          ????????paths:
          ????????-?/
          ????????tls:
          ????????-?secretName:?thanos-sidecar.${local.default_domain_suffix}
          ??????????hosts:
          ??????????-?thanos-sidecar.${local.default_domain_suffix}
          ??????prometheusSpec:
          ????????replicas:?1
          ????????retention:?2d
          ????????retentionSize:?"6GB"
          ????????ruleSelectorNilUsesHelmValues:?false
          ????????serviceMonitorSelectorNilUsesHelmValues:?false
          ????????podMonitorSelectorNilUsesHelmValues:?false
          ????????storageSpec:
          ??????????volumeClaimTemplate:
          ????????????spec:
          ??????????????storageClassName:?ebs-sc
          ??????????????accessModes:?["ReadWriteOnce"]
          ??????????????resources:
          ????????????????requests:
          ??????????????????storage:?10Gi
          ????EXTRA_VALUES

          Thanos組件部署:

          • Thanos壓縮器來管理這個(gè)特定集群的下采樣

          thanos?=?{
          ??enabled?=?true
          ??bucket_force_destroy?=?true
          ??trusted_ca_content??????=?dependency.thanos-ca.outputs.thanos_ca
          ??extra_values?=?<<-EXTRA_VALUES
          ????compactor:
          ??????retentionResolution5m:?90d
          ????query:
          ??????enabled:?false
          ????queryFrontend:
          ??????enabled:?false
          ????storegateway:
          ??????enabled:?false
          ????EXTRA_VALUES
          }


          再深入一點(diǎn)

          讓我們檢查一下集群上正在運(yùn)行什么。關(guān)于觀察員,我們有:
          kubectl?-n?monitoring?get?pods
          NAME????????????????????????????????????????????????????????READY???STATUS????RESTARTS???AGE
          alertmanager-kube-prometheus-stack-alertmanager-0???????????2/2?????Running???0??????????120m
          kube-prometheus-stack-grafana-c8768466b-rd8wm???????????????2/2?????Running???0??????????120m
          kube-prometheus-stack-kube-state-metrics-5cf575d8f8-x59rd???1/1?????Running???0??????????120m
          kube-prometheus-stack-operator-6856b9bb58-hdrb2?????????????1/1?????Running???0??????????119m
          kube-prometheus-stack-prometheus-node-exporter-8hvmv????????1/1?????Running???0??????????117m
          kube-prometheus-stack-prometheus-node-exporter-cwlfd????????1/1?????Running???0??????????120m
          kube-prometheus-stack-prometheus-node-exporter-rsss5????????1/1?????Running???0??????????120m
          kube-prometheus-stack-prometheus-node-exporter-rzgr9????????1/1?????Running???0??????????120m
          prometheus-kube-prometheus-stack-prometheus-0???????????????3/3?????Running???1??????????120m
          thanos-compactor-74784bd59d-vmvps???????????????????????????1/1?????Running???0??????????119m
          thanos-query-7c74db546c-d7bp8???????????????????????????????1/1?????Running???0??????????12m
          thanos-query-7c74db546c-ndnx2???????????????????????????????1/1?????Running???0??????????12m
          thanos-query-frontend-5cbcb65b57-5sx8z??????????????????????1/1?????Running???0??????????119m
          thanos-query-frontend-5cbcb65b57-qjhxg??????????????????????1/1?????Running???0??????????119m
          thanos-storegateway-0???????????????????????????????????????1/1?????Running???0??????????119m
          thanos-storegateway-1???????????????????????????????????????1/1?????Running???0??????????118m
          thanos-storegateway-observee-storegateway-0?????????????????1/1?????Running???0??????????12m
          thanos-storegateway-observee-storegateway-1?????????????????1/1?????Running???0??????????11m
          thanos-tls-querier-observee-query-dfb9f79f9-4str8???????????1/1?????Running???0??????????29m
          thanos-tls-querier-observee-query-dfb9f79f9-xsq24???????????1/1?????Running???0??????????29m

          kubectl?-n?monitoring?get?ingress
          NAME????????????????????????????CLASS????HOSTS????????????????????????????????????????????ADDRESS?????????????????????????????????????????????????????????????????????????PORTS?????AGE
          kube-prometheus-stack-grafana??????grafana.thanos.teks-tg.clusterfrak-dynamics.io???k8s-ingressn-ingressn-afa0a48374-f507283b6cd101c5.elb.eu-west-1.amazonaws.com???80,?443???123m
          被觀察者:

          kubectl?-n?monitoring?get?pods
          NAME????????????????????????????????????????????????????????READY???STATUS????RESTARTS???AGE
          alertmanager-kube-prometheus-stack-alertmanager-0???????????2/2?????Running???0??????????39m
          kube-prometheus-stack-kube-state-metrics-5cf575d8f8-ct292???1/1?????Running???0??????????39m
          kube-prometheus-stack-operator-6856b9bb58-4cngc?????????????1/1?????Running???0??????????39m
          kube-prometheus-stack-prometheus-node-exporter-bs4wp????????1/1?????Running???0??????????39m
          kube-prometheus-stack-prometheus-node-exporter-c57ss????????1/1?????Running???0??????????39m
          kube-prometheus-stack-prometheus-node-exporter-cp5ch????????1/1?????Running???0??????????39m
          kube-prometheus-stack-prometheus-node-exporter-tnqvq????????1/1?????Running???0??????????39m
          kube-prometheus-stack-prometheus-node-exporter-z2p49????????1/1?????Running???0??????????39m
          kube-prometheus-stack-prometheus-node-exporter-zzqp7????????1/1?????Running???0??????????39m
          prometheus-kube-prometheus-stack-prometheus-0???????????????3/3?????Running???1??????????39m
          thanos-compactor-7576dcbcfc-6pd4v???????????????????????????1/1?????Running???0??????????38m

          kubectl?-n?monitoring?get?ingress
          NAME???????????????????????????????????CLASS???HOSTS???????????????????????????????????????????????????ADDRESS?????????????????????????????????????????????????????????????????????????PORTS?????AGE
          kube-prometheus-stack-thanos-gateway???nginx???thanos-sidecar.thanos.teks-tg.clusterfrak-dynamics.io???k8s-ingressn-ingressn-95903f6102-d2ce9013ac068b9e.elb.eu-west-3.amazonaws.com???80,?443???40m

          我們的TLS查詢器應(yīng)該能夠查詢被觀測集群的度量標(biāo)準(zhǔn)。讓我們來看看它們的行為:

          k?-n?monitoring?logs?-f?thanos-tls-querier-observee-query-687dd88ff5-nzpdh

          level=info?ts=2021-02-23T15:37:35.692346206Z?caller=storeset.go:387?component=storeset?msg="adding?new?storeAPI?to?query?storeset"?address=thanos-sidecar.thanos.teks-tg.clusterfrak-dynamics.io:443?extLset="{cluster=\"pio-thanos-observee\",?prometheus=\"monitoring/kube-prometheus-stack-prometheus\",?prometheus_replica=\"prometheus-kube-prometheus-stack-prometheus-0\"}"

          所以這個(gè)查詢器pods可以查詢我的其他集群,如果我們檢查Web,我們可以看到存儲:

          kubectl?-n?monitoring?port-forward?thanos-tls-querier-observee-query-687dd88ff5-nzpdh?10902



          太棒了,但是我只有一個(gè)存儲,還記得我們說過查詢器可以堆疊在一起嗎?在我們的觀察者集群中,我們有標(biāo)準(zhǔn)的http查詢器,它可以查詢架構(gòu)圖中的其他組件。

          kubectl?-n?monitoring?port-forward?thanos-query-7c74db546c-d7bp8?10902

          這里我們可以看到所有的存儲已經(jīng)被添加到我們的中心查詢器:


          • 觀察者把本地Thanos聚集

          • 我們的存儲網(wǎng)關(guān)(一個(gè)用于遠(yuǎn)程觀測者集群,一個(gè)用于本地觀測者集群)

          • 本地TLS查詢器,它可以查詢被觀察的sidecar


          在Grafana可視化

          最后,我們可以前往Grafana,看看默認(rèn)的Kubernetes儀表板是如何與多集群兼容的。


          總結(jié)

          Thanos是一個(gè)非常復(fù)雜的系統(tǒng),有很多移動(dòng)部件,我們沒有深入研究具體的自定義配置,因?yàn)樗鼤ㄙM(fèi)太多的時(shí)間。

          - END -

          ?推薦閱讀?

          31天拿下Kubernetes含金量最高的CKA+CKS證書!?
          三只兔子的故事理解 Kubernetes 污點(diǎn)和容忍,真的很簡單!
          比 netstat 好用?Linux 網(wǎng)絡(luò)狀態(tài)工具 ss 詳解
          Linux Shell 腳本編程最佳實(shí)踐
          我的云服務(wù)器被植入挖礦木馬,CPU飆升200%
          做了這么多年運(yùn)維工作,現(xiàn)在才看清職業(yè)方向
          一篇文章講清楚云原生圖景及發(fā)展路線
          K8s kubectl 常用命令總結(jié)(建議收藏)
          一名運(yùn)維小哥對運(yùn)維規(guī)則的10個(gè)總結(jié)
          K8s運(yùn)維錦囊,19個(gè)常見故障解決方法
          Linux 系統(tǒng)日常巡檢腳本
          終于明白了 DevOps 與 SRE 的區(qū)別!
          編寫 Dockerfile 最佳實(shí)踐
          搭建一套完整的企業(yè)級 K8s 集群(kubeadm方式)



          點(diǎn)亮,服務(wù)器三年不宕機(jī)

          瀏覽 46
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人亚洲欧美 | 全国男人天堂网 | 91麻豆成人电影 | 国产毛片毛片 | 毛片毛片毛片毛片毛片 |