偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Prometheus定義指南之Operator

譯文
開(kāi)發(fā) 前端
本文將讓您深入了解Prometheus Operator的工作機(jī)制,以及如何使用Prometheus Operator和Helm charts,為Kubernetes部署有關(guān)Prometheus的監(jiān)控。

[[433690]]

【51CTO.com快譯】本文將重點(diǎn)向您介紹如何使用Prometheus Operator和Helm Chart,以及如何以簡(jiǎn)單的方式在Kubernetes集群上安裝和管理Prometheus。首先,讓我們先了解一些與Prometheus Operator相關(guān)的基本概念。

CRD(Custom Resource Definition,定制資源定義)的方法是允許用戶自定義Deployment和StatefulSet等資源類型的結(jié)構(gòu)和有效性。其中,CR(Custom Resource,定制資源)是按照CRD的結(jié)構(gòu)所創(chuàng)建的資源。而Custom Controller(定制控制器)則能夠確保Kubernetes集群、或應(yīng)用程序始終將其當(dāng)前的狀態(tài),與我們所期望的狀態(tài)相匹配。因此,Operator可以被理解為我們部署在集群中的一組Kubernetes定制控制器。它會(huì)去偵聽(tīng)被定制資源中,針對(duì)Kubernetes資源的創(chuàng)建、修改、刪除等操作。您可以通過(guò)鏈接-- https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/,了解更多有過(guò)定制資源的相關(guān)內(nèi)容。

Kubernetes Operator的用例

總的說(shuō)來(lái),Kubernetes Operator可以實(shí)現(xiàn):

  • 提供一種在Kubernetes上部署有狀態(tài)服務(wù)(如各種數(shù)據(jù)庫(kù))的方法
  • 處理應(yīng)用程序代碼的升級(jí)
  • 根據(jù)性能指標(biāo),橫向擴(kuò)展資源
  • 按需備份和恢復(fù)應(yīng)用程序或數(shù)據(jù)庫(kù)的狀態(tài)
  • 向Kubernetes部署監(jiān)控、存儲(chǔ)、歸檔(vault)等方案

什么是Prometheus Operator?

簡(jiǎn)單來(lái)說(shuō),類似其他標(biāo)準(zhǔn)化的Kubernetes部署對(duì)象,Prometheus Operator能夠以完全自動(dòng)化的方式部署Prometheus服務(wù)器、Alertmanager、以及所有相關(guān)的密鑰和configmap等。該方式有助于在較短幾分鐘內(nèi),建立出Prometheus監(jiān)控系統(tǒng),并實(shí)例化Kubernetes的集群監(jiān)控。而在完成部署后,Prometheus Operator將具有如下功能:

  • 自動(dòng)化:便捷地為Kubernetes的命名空間、特定的應(yīng)用或團(tuán)隊(duì)啟動(dòng)Prometheus實(shí)例。
  • 服務(wù)發(fā)現(xiàn):無(wú)需額外學(xué)習(xí)Prometheus的特定配置語(yǔ)言,便可使用熟悉的Kubernetes標(biāo)簽,自動(dòng)發(fā)現(xiàn)有待監(jiān)控的目標(biāo)。
  • 輕松配置:可管理Prometheus的版本、持久性、留存策略、以及來(lái)自Kubernetes資源的副本等基本資源的相關(guān)配置。

安裝Prometheus棧的方法

在Kubernetes中設(shè)置Prometheus監(jiān)控棧有如下三種不同的方法:

1.自行創(chuàng)造一切

如果您已準(zhǔn)備好了Prometheus組件、及其先決條件,則可以通過(guò)參考其相互之間的依賴關(guān)系,以正確的順序?yàn)镻rometheus、Alertmanager、Grafana的所有密鑰、以及ConfigMaps等每個(gè)組件,手動(dòng)部署YAML規(guī)范文件。這種方法通常非常耗時(shí),并且需要花費(fèi)大量的精力,去部署和管理Prometheus生態(tài)系統(tǒng)。同時(shí),它還需要構(gòu)建強(qiáng)大的文檔,以便將其復(fù)制到其他環(huán)境中。

2. 使用Prometheus Operator

既然前文提到了Prometheus Operator能夠管理Prometheus所有組件的生命周期,那么我們可以參考鏈接--https://github.com/prometheus-operator/prometheus-operator,據(jù)此在Kubernetes集群中部署Prometheus。

3. 使用Helm Chart部署Operator

作為一種更好、更高效的方式,我們可以使用由Prometheus社區(qū)維護(hù)的Helm Chart,來(lái)部署Prometheus Operator。概括地說(shuō),Helm會(huì)隨著Prometheus、Alertmanager和其他定制資源的創(chuàng)建,進(jìn)行Prometheu Operator的初始化安裝。然后,Prometheus Operator會(huì)管理這些定制資源的整個(gè)生命周期。其安裝步驟如下:

  1. Go  
  2. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts  
  3. helm repo update  
  4. helm install prometheus prometheus-community/kube-prometheus-stack 

此處的kube-Prometheus-stack安裝了以下組件:

  • Prometheus Operator
  • 創(chuàng)建Prometheus、Alertmanager、以及相關(guān)的CR
  • Grafana
  • 各種節(jié)點(diǎn)導(dǎo)出器

它們還預(yù)先配置了針對(duì)協(xié)同工作、以及為您設(shè)置了基本集群的監(jiān)控,以方便您輕松地調(diào)整和添加各種自定義。上述命令的執(zhí)行速度非??欤恍鑾追昼姳憧蓡?dòng)并運(yùn)行所有的組件。

您可以通過(guò)“helm get manifestPrometheus| kubectl get -f –”命令,來(lái)查看創(chuàng)建的所有對(duì)象。

如上所圖示,您將能夠看到Prometheus棧的Deployments和StatefulSet等所有不同的資源。

Prometheus如何找到所有監(jiān)控項(xiàng)并抓取的目標(biāo)?

為了讓Prometheus發(fā)現(xiàn)待監(jiān)控的對(duì)象,我們需要傳遞一個(gè)被稱為prometheus.yaml的YAML(配置文件,以便Prometheus可以參考并實(shí)施監(jiān)控。每個(gè)待監(jiān)控的目標(biāo)端點(diǎn)都在prometheus.yaml中的scrape_configs部分下被定義。下面展示了Prometheus release tar中自帶的典型配置文件的內(nèi)容:

  1. Go
  2. # my global config 
  3. global
  4.   scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute
  5.   evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute
  6.   # scrape_timeout is set to the global default (10s). 
  7.  
  8. # Alertmanager configuration 
  9. alerting: 
  10.   alertmanagers: 
  11.   - static_configs: 
  12.     - targets: 
  13.        - localhost:9093 
  14.  
  15. Load rules once and periodically evaluate them according to the global 'evaluation_interval'
  16. rule_files: 
  17.   - '/etc/prometheus/alert.rules' 
  18.      
  19.   # - "first_rules.yml" 
  20.   # - "second_rules.yml" 
  21.  
  22. # A scrape configuration containing exactly one endpoint to scrape: 
  23. # Here it's Prometheus itself. 
  24. scrape_configs: 
  25.   # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. 
  26.   - job_name: 'prometheus' 
  27.  
  28.     # metrics_path defaults to '/metrics' 
  29.     # scheme defaults to 'http'
  30.  
  31.     static_configs: 
  32.       - targets: ['localhost:9090'
  33.  
  34.   - job_name: 'node_exporter' 
  35.     scrape_interval: 5s 
  36.     static_configs: 
  37.       - targets: ['localhost:9100']     

下面,讓我們深入了解prometheus.yaml文件中的一些主要關(guān)鍵術(shù)語(yǔ)。其中,我們可以通過(guò)如下兩種方式,為Prometheus指定目標(biāo)端點(diǎn)集合:

  • scrape_config通過(guò)指定一組目標(biāo)和配置參數(shù),來(lái)描述如何抓取他們。也就是說(shuō),在prometheus.yaml文件中,我們需要針對(duì)每個(gè)目標(biāo)定義一個(gè)抓取配置塊。
  • ServiceMonitor則讓我們以Kubernetes原生的方式,輕松地在scrape_config中創(chuàng)建一個(gè)作業(yè)條目。在內(nèi)部,Prometheus Operator將配置從每個(gè) ServiceMonitor資源轉(zhuǎn)換為prometheus.yaml的scrape_config部分。由kube-prometheus-stack創(chuàng)建的Prometheus資源帶有一個(gè)選擇器,可以對(duì)所有帶有標(biāo)簽release: prometheus(請(qǐng)參見(jiàn)配置)的ServiceMonitor進(jìn)行各項(xiàng)操作。下圖展示了其工作原理:

圖片來(lái)源:CoreOS(https://www.openshift.com/blog)

讓我們以Prometheus服務(wù)本身為例,查看ServiceMonitor能否自動(dòng)在Prometheus配置文件中創(chuàng)建了一個(gè)scrape_config條目。

  1. Go 
  2. kubectl get services prometheus-prometheus-oper-prometheus -o wide --show-labels  
  3. NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   SELECTOR                                                          LABELS 
  4. prometheus-prometheus-oper-prometheus   ClusterIP   10.105.67.172   <none>        9090/TCP   12d   app=prometheus,prometheus=prometheus-prometheus-oper-prometheus   app=prometheus-operator-prometheus,release=prometheus,self-monitor=true 

根據(jù)上述代碼,我們進(jìn)而可以查看相應(yīng)的ServiceMonitor是否已為Prometheus的服務(wù)準(zhǔn)備就緒。

  1. Go 
  2. kubectl get servicemonitors.monitoring.coreos.com -l app=prometheus-operator-prometheus 
  3. NAME                                    AGE 
  4. prometheus-prometheus-oper-prometheus   12d 

上述代碼證實(shí)了Prometheus服務(wù)本身ServiceMonitor的存在性。下面,讓我們檢查“prometheus-prometheus-oper-prometheus”是否已在Prometheusconfig YAML文件中添加了一個(gè)作業(yè)。我們首先需要訪問(wèn)由Prometheus Operator創(chuàng)建的Prometheuspod。

  1. Go 
  2. kubectl exec -it prometheus-prometheus-prometheus-oper-prometheus-0 -- /bin/sh 
  3. /prometheus $  

讓我們通過(guò)如下代碼找出pod內(nèi)由Prometheus使用的配置文件名。

  1. Go 
  2. /prometheus $ ps 
  3.  
  4. PID   USER     TIME  COMMAND 
  5. 1     1000      4h58 /bin/prometheus … --config.file=/etc/prometheus/config_out/prometheus.env.yaml 
  6. 59    1000      0:00 /bin/sh 

從上述代碼可知,由Operator創(chuàng)建的配置文件prometheus.env.yaml可以被Prometheus服務(wù)器用于查找待監(jiān)控和抓取的目標(biāo)端點(diǎn)。最后,讓我們檢查Prometheus服務(wù)本身的作業(yè)是否已被ServiceMonitor添加到了該配置文件中:

  1. Go 
  2. /Prometheus $  cat  / etc /Prometheus/ config_out /Prometheus。ENV 。yaml  |  grep  - i  - A  10  "job_name: default/prometheus-prometheus-oper-prometheus/0" ​ 
  3.  
  4. Go 
  5. - job_name: default/prometheus-prometheus-oper-prometheus/0 
  6.   honor_labels: false 
  7.   kubernetes_sd_configs: 
  8.   - role: endpoints 
  9.     namespaces: 
  10.       names: 
  11.       - default 
  12.   metrics_path: /metrics 

由上述代碼可知,ServiceMonitor會(huì)自動(dòng)為基于Kubernetes的服務(wù)創(chuàng)建一個(gè)待監(jiān)控和抓取的作業(yè)。

此外,我們也可以直接在Prometheus Web UI中的Status -> Configuration下查看scrape_config的方法。如下圖所示:

除了ServiceMonitor之外,我們也可以使用PodMonitor方法去抓取Kubernetes pod,并由Prometheus Operator處理定制的資源。PodMonitor能夠以聲明的方式,指定如何直接監(jiān)控一組Pod。

您一定會(huì)問(wèn),既然我們有了ServiceMonitor,為何還需要PodMonitor呢?其主要原因是,ServiceMonitor合適那些Pod里已經(jīng)有某個(gè)服務(wù)(Service)的場(chǎng)景。否則,您需要用到PodMonitor。通常,Prometheus可以被配置為如下兩種方式,去定義待監(jiān)控的目標(biāo)端點(diǎn)。

  • 使用static_config機(jī)制

如果待監(jiān)控的Kubernetes服務(wù)/端點(diǎn)非常小且固定,那么您可以使用prometheus.yaml文件中的static_config來(lái)定義這些靜態(tài)端點(diǎn)。示例鏈接展示了如何通過(guò)配置Prometheus,以默認(rèn)使用static_configs來(lái)監(jiān)控本身。

當(dāng)然,這主要適用于簡(jiǎn)單的用例,而且需要在添加和刪除節(jié)點(diǎn)時(shí),手動(dòng)更新prometheus.yml。而在Kubernetes之類的動(dòng)態(tài)環(huán)境中,新的應(yīng)用服務(wù)實(shí)例往往會(huì)出現(xiàn)得快而頻繁。

  • 使用service_discovery機(jī)制

目前,支持Prometheus的服務(wù)發(fā)現(xiàn)機(jī)制有:DNS、Kubernetes、AWS、Consul、以及其他自定義的類型。這些機(jī)制通常能夠動(dòng)態(tài)地發(fā)現(xiàn)待監(jiān)控和抓取的目標(biāo)端點(diǎn)。對(duì)于Kubernetes而言,它可以使用Kubernetes API來(lái)實(shí)現(xiàn)。示例鏈接展示了如何為Kubernetes配置Prometheus。其中,Prometheus Operator負(fù)責(zé)根據(jù)ServiceMonitor和PodMonitor資源完成上述配置。

Prometheus的規(guī)則

您可以創(chuàng)建一個(gè)包含規(guī)則語(yǔ)句的YAML文件,并使用Prometheus-configuration中的rule_files字段,將它們加載到Prometheus中。而在使用Prometheus Operator時(shí),您可以使用PrometheusRule源的Helm,創(chuàng)建相應(yīng)的規(guī)則。目前,Prometheus可以定期配置和評(píng)估如下兩種類型的規(guī)則:

  • 記錄(Recording)規(guī)則

記錄規(guī)則允許您預(yù)先計(jì)算出經(jīng)常使用的PromQL表達(dá)式,并且需要相對(duì)大量的步驟,來(lái)實(shí)現(xiàn)表達(dá)式的結(jié)果。據(jù)此,在下一次運(yùn)行相同的PromQL查詢時(shí),您可以直接從預(yù)先計(jì)算出的PromQL結(jié)果中獲取到。這比反復(fù)執(zhí)行相同的查詢要快得多。例如:

  1. Go 
  2. groups: 
  3.   - name: example 
  4.     rules: 
  5.     - record: job:http_inprogress_requests:sum 
  6.       expr: sum by (job) (http_inprogress_requests) 
  • 警報(bào)(Alerting)規(guī)則

警報(bào)規(guī)則允許您根據(jù)PromQL定義的警報(bào)條件,將有關(guān)觸發(fā)警報(bào)的通知,發(fā)送到外部接收器上。只要警報(bào)表達(dá)式的結(jié)果為True時(shí),就會(huì)發(fā)送警報(bào)。例如:

  1. Go 
  2. groups: 
  3. name: example 
  4.   rules: 
  5.   - alert: HighRequestLatency 
  6.     expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5 
  7.     for: 10m 
  8.     labels: 
  9.       severity: page 
  10.     annotations: 
  11.       summary: High request latency 

警報(bào)和可視化

圖片來(lái)源:Prometheus的介紹(https://www.youtube.com/watch?v=9GMWvFcQjYI&t=314s)

在配置了警報(bào)規(guī)則后,我們需要通過(guò)Alertmanager來(lái)添加警報(bào)摘要、控制、甚至將收到的通知“靜音”。如上圖所示,Alertmanager會(huì)定期從Prometheus服務(wù)器處接收有關(guān)警報(bào)狀態(tài)的信息,以確保對(duì)已定義的接收者(如電子郵件、PagerDuty等)進(jìn)行分組、數(shù)據(jù)去重、以及通知發(fā)送。

我們不必?fù)?dān)心在何處、以及如何在Kubernetes集群中定義或設(shè)置Alertmanager。我們之前在Helm Chart的幫助下部署Prometheus Operator時(shí),已經(jīng)創(chuàng)建了一個(gè)作為StatefulSet的Alertmanager。請(qǐng)參見(jiàn)如下代碼:

  1. Go 
  2. kubectl get statefulsets.apps  
  3.  
  4. NAME                                                    READY      AGE 
  5. alertmanager-prometheus-prometheus-oper-alertmanager    1/1         8d 

Alertmanager StatefulSet會(huì)在內(nèi)部使用一個(gè)配置文件--alertmanager.yaml。我們可以將它放入alertmanagerpod中。請(qǐng)參見(jiàn)如下命令:

  1. Go 
  2. /bin/alertmanager --config.file=/etc/alertmanager/config/alertmanager.yaml 

alertmanager.yaml文件包含了如下關(guān)鍵元素:

  • 路由:這是一個(gè)代碼塊,可用于定義將警報(bào)路由到下一個(gè)位置。
  • 接收器:接收器是可用來(lái)發(fā)送或通知警報(bào)的網(wǎng)絡(luò)鉤子、郵件地址、以及PagerDuty之類的工具。
  • 禁止規(guī)則:禁止規(guī)則部分可以在另一個(gè)警報(bào)因相同原因被觸發(fā)時(shí),使之“靜音”。例如,對(duì)于那些已經(jīng)處于critical級(jí)別的應(yīng)用服務(wù),即便再次出現(xiàn)故障,其警告通知也會(huì)被靜音。

我們可以通過(guò)如下示例來(lái)查看Alertmanager的配置文件:

  1. Go 
  2. global
  3.   resolve_timeout: 5m 
  4.  
  5. route: 
  6.   group_by: ['alertname'
  7.   group_wait: 10s 
  8.   group_interval: 10s 
  9.   repeat_interval: 1h 
  10.   receiver: 'web.hook' 
  11. receivers: 
  12. name'web.hook' 
  13.   webhook_configs: 
  14.   - url: 'http://127.0.0.1:5001/' 
  15. inhibit_rules: 
  16.   - source_match: 
  17.       severity: 'critical' 
  18.     target_match: 
  19.       severity: 'warning' 
  20.     equal: ['alertname''dev''instance'

使用Grafana進(jìn)行指標(biāo)可視化

作為一種標(biāo)準(zhǔn)化工​​具,Grafana可以幫助您可視化那些在Prometheus的幫助下,收集到的所有指標(biāo)。kube-Prometheus-stack的Helm Chart已經(jīng)為我們部署了Grafana。我們可以通過(guò)如下命令,定位Grafana服務(wù)。

  1. Go 
  2. kubectl get services  
  3.  
  4. NAME                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                       
  5.  
  6. prometheus-grafana                ClusterIP    10.104.143.147    <none>       80/TCP       

通過(guò)如下代碼,我們可以將端口轉(zhuǎn)發(fā)到此服務(wù)上,以便顯示在Grafana的Web界面上。

  1. Go 
  2. kubectl port-forward svc/prometheus-grafana 3000:80 
  3.  
  4. Forwarding from 127.0.0.1:3000 -> 3000 
  5. Forwarding from [::1]:3000 -> 3000 

如下圖,您可以在瀏覽器中訪問(wèn)http://localhost:3000。

在輸入了默認(rèn)用戶名:admin和密碼:prom-operator后,您可以訪問(wèn)到Grafana儀表板,如下圖所示。

依次點(diǎn)擊Dashboard -> Manage,您將能夠看到由kube-prometheus-stack提供的有關(guān)Kubernetes集群的所有儀表板:

您可以瀏覽到諸如“Kubernetes/Compute Resources/Pod”等儀表板信息:

上面展示的標(biāo)準(zhǔn)化儀表板便是從kubernetes-mixin項(xiàng)目生成的。

小結(jié)

綜上所述,我們討論了Prometheus Operator是什么,如何在Prometheus Operator和Helm Chart的幫助下輕松地配置Prometheus,Prometheus如何發(fā)現(xiàn)帶監(jiān)控的資源,以及該如何配置Prometheus的各個(gè)組件與運(yùn)作機(jī)制。此外,我們還探討了如何設(shè)置警報(bào),以及如何將它們可視化。

原文標(biāo)題:Prometheus Definitive Guide: Prometheus Operator,作者:Ninad Desai

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2020-12-14 10:26:48

Prometheus 監(jiān)控Services

2011-12-05 15:02:21

Knockout

2020-11-26 09:10:36

Prometheus

2021-05-28 08:58:41

Golang網(wǎng)卡metrics

2023-03-26 08:41:37

2020-12-30 08:09:46

運(yùn)維Prometheus 監(jiān)控

2020-12-28 10:13:32

運(yùn)維Prometheus監(jiān)控

2021-03-26 20:37:14

Prometheus監(jiān)控指標(biāo)

2024-01-01 21:57:41

kubernetesCRDOperator

2023-04-26 00:01:04

2020-12-29 10:45:22

運(yùn)維Prometheus-監(jiān)控

2023-10-09 08:12:00

2020-05-21 11:38:10

監(jiān)控系統(tǒng)架構(gòu)技術(shù)

2021-06-10 07:49:26

RPCgRPC模式

2014-11-10 15:02:21

大數(shù)據(jù)云計(jì)算Hadoop

2009-12-30 17:29:53

Silverlight

2011-08-24 11:23:20

CREATE OPER中文man

2021-07-07 05:46:46

運(yùn)維監(jiān)控Prometheus

2011-08-24 14:35:33

DROP OPERAT中文man

2023-05-06 08:00:00

KubernetesK8s數(shù)據(jù)服務(wù)自動(dòng)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)