當您從 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 目標的設定更新為 true 或 false。
例如,若要啟用預設為停用的 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-system 和 my-namespace 中抓取具有註釋的 Pod:
pod-annotation-based-scraping: |-
podannotationnamespaceregex = "kube-system|my-namespace"
將註釋新增至 metadata ConfigMap 的區段。
prometheus.io/scrape: "true" 是抓取 Pod 的必要條件,而 prometheus.io/path 和 prometheus.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 來完成
建議僅在必要時自訂這三個參數,設定其他參數作為覆寫值是不受支援的情況 - 雖然可行,但必須謹慎使用