共用方式為


使用 ConfigMap 自訂 Kubernetes 叢集中的 Prometheus 指標集合

當您從 Kubernetes 叢集啟用 Prometheus 度量的收集時,它會使用 預設集合 來決定要收集的度量。 本文說明如何自訂此集合,以符合您的特定監視需求。

ConfigMap

下列 ConfigMap 可用來設定指標附加元件的抓取組態和其他設定。 啟用受管理 Prometheus 時,此 ConfigMap 預設不會存在於叢集中。

ConfigMap 描述
ama-metrics-settings-configmap 包括以下基本設定。
- 叢集別名。 變更從叢集擷取的每個指標中的標籤值 cluster
- 啟用/停用預設抓取目標。
- 根據命名空間啟用以 Pod 註釋為基礎的抓取。
- 計量保留清單。 控制每個預設目標允許的指標。
- 抓取預先定義目標的間隔。
- 偵錯模式,以識別遺漏的度量問題。 請參閱 疑難排解

根據以下指引修改 ConfigMap 中的設定,然後使用以下命令將其應用。 AMA-Metrics Pod 會在 2-3 分鐘內檢測到並重新啟動以套用指定的配置設定。

kubectl apply -f .\ama-metrics-settings-configmap.yaml

啟用和停用預設目標

Azure 監視器中的預設 Prometheus 計量設定 會列出預設從 Kubernetes 叢集收集的預設目標和計量。 若要啟用/停用任何這些目標的抓取,請將 ConfigMap 區段中 default-scrape-settings-enabled 目標的設定更新為 truefalse

例如,若要啟用預設為停用的 coredns 抓取功能,請將設定更新如下:

default-scrape-settings-enabled: |-
    kubelet = true
    coredns = true
    cadvisor = true
    kubeproxy = false
    ...

抓取間隔設定

所有預設目標的預設抓取間隔為 30 秒。 若要修改任何目標的此間隔,您可以更新 ConfigMap 區段中的 default-targets-scrape-interval-settings 設定。

例如,若要將抓取間隔 kubelet 變更為 60 秒,請更新設定,如下所示:

default-targets-scrape-interval-settings: |-
    kubelet = "60s"
    coredns = "30s"
    cadvisor = "30s"
    ...

啟用以 Pod 註釋為基礎的抓取

將註釋新增至叢集中的 Pod,抓取應用程式 Pod,而不需要建立自訂 Prometheus 組態。若要啟用抓取具有特定註釋的 Pod,請將具有您想要抓取之註釋的 Pod 命名空間的規則運算式新增至 ConfigMap podannotationnamespaceregex 區段中的 podannotationnamespaceregex

例如,下列設定只會在 命名空間 kube-systemmy-namespace 中抓取具有註釋的 Pod:

pod-annotation-based-scraping: |-
    podannotationnamespaceregex = "kube-system|my-namespace"

將註釋新增至 metadata ConfigMap 的區段。 prometheus.io/scrape: "true" 是抓取 Pod 的必要條件,而 prometheus.io/pathprometheus.io/port 表示 Pod 上託管計量的路徑和連接埠。 下列範例定義了 Pod 的註釋,會在 <pod IP>:8080/metrics 上託管計量。

metadata:   
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path: '/metrics'
    prometheus.io/port: '8080'

警告

根據具有註釋的 Pod 數目,從許多命名空間抓取 Pod 註釋可能會產生非常大量的計量。

自訂預設目標所收集的計量

只會針對預設目標收集最小計量,如 Azure 監視器中 Prometheus 計量的最小擷取設定檔中所述。 若要從預設目標收集所有指標,請在 ConfigMap 區段中將minimalingestionprofile設定為false中的default-targets-metrics-keep-list

minimalingestionprofile = false

或者,您可以透過更新其 default-targets-metrics-keep-list 保留清單,來新增要收集用於任何預設目標的計量。

例如,kubelet 是預設目標 kubelet 的計量篩選設定。 使用下列指令碼,使用以規則運算式為基礎的篩選,篩選針對預設目標收集的指標。

kubelet = "metricX|metricY"
apiserver = "mymetric.*"

附註

如果您在 regex 中使用引號或反斜線,則必須使用反斜線來逸出,例如範例 "test\'smetric\"s\""testbackslash\\*

如果您想要進一步自訂預設目標以變更收集頻率或標籤等屬性,請將其值設定為 false來停用該目標。 然後,為目標建立自訂作業,如在 Azure 監視器中自訂抓取 Prometheus 計量中所述。

叢集別名

叢集資源 ID 的最後一部分會附加至每個時間序列,以唯一識別資料。 例如,如果資源識別碼為 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-name/providers/Microsoft.ContainerService/managedClusters/myclustername,則叢集標籤為 myclustername。 若要覆寫此叢集標籤,請更新 cluster_alias 下的prometheus-collector-settings設定。

附註

僅允許英數字元。 任何字元都會取代為 _。 如果您要啟用錄製和警示規則,請務必在規則上線範本的叢集名稱參數中使用叢集別名,規則才能運作。

  prometheus-collector-settings: |-
    cluster_alias = ""

偵錯模式

若要檢視為偵錯目的而抓取的每個計量,可以透過將設定 enabled 更新為 true 並依 debug-mode 的設定來調整計量附加元件代理程式,使其在偵錯模式下運行。

警告

此模式可能會影響效能,而且只應該短時間啟用以進行偵錯。

Kube-state-metrics

若要覆寫作為 Managed Prometheus 啟用的一部分安裝的 kube-state-metrics 部署 (ama-metrics-ksm) 的預設啟動參數 (resources、metric-labels-allowlist 和 metric-annotations-allowlist),請使用 ama-metrics-settings-configmap

configmap 中 labels_allow_list 和 annotations_allow_list 的設定會覆寫在上線期間為 ksm-metrics-labels-allow-list 和 ksm-metrics-annotations-allow-list 設定的參數

configmap 中資源的設定會覆寫為 ama-metrics-ksm 部署設定的預設收集器

請注意,以下是 YAML 設定:

  ksm-config: |-
    resources: 
      secrets: {}
      configmaps: {}
    labels_allow_list: # object name and label names
      pods: 
      - app8
    annotations_allow_list: # object name and annotation names
      namespaces:
      - kube-system
      - default

附註

自訂這些值可能會影響作為 kube-state-metrics 工作一部分收集的預設資料,並可能導致某些儀表板無法載入資料。

刪除設定 configmap 中的整個區段 (ksm-config) 後,必須重新建立 ama-metrics-ksm 部署。 這可以透過刪除 ama-metrics-ksm Pod 或執行 - kubectl rollout restart deployment/ama-metrics -n kube-system 來完成

建議僅在必要時自訂這三個參數,設定其他參數作為覆寫值是不受支援的情況 - 雖然可行,但必須謹慎使用

kube-state-metrics cli 引數的 OSS 文件

後續步驟

Prometheus 計量設定警示
查詢 Prometheus 計量
深入了解收集 Prometheus 計量