在適用於 Prometheus 的 Azure 監視器受管理服務中自訂抓取 Prometheus 計量
本文提供在 Azure 監視器中使用計量附加元件,以自訂為 Kubernetes 叢集抓取計量的相關指示。
Configmaps
可以設定四個不同的 Configmaps 以提供計量附加元件的抓取設定和其他設定。 所有設定對應都應該套用至任何叢集 kube-system
命名空間。
注意
啟用受控 Prometheus 時,叢集中預設沒有這四個 Configmap。 視需要自訂的內容而定,您必須在 kube-system
命名空間中部署這四個相同名稱的這四個 configmap 中的任何或全部。 AMA 計量 Pod 會在您將這些設定對應部署到 kube-system
命名空間之後挑選,並在 2-3 分鐘內重新啟動,以套用 Configmap 中指定的設定。
ama-metrics-settings-configmap
此 ConfigMap 具有下列可設定的簡單設定。 您可以從上述 Git 中樞存放庫取得 Configmap、變更需要設定,並將 Configmap 套用/部署至叢集的kube-system
命名空間- 叢集別名 (若要在從叢集內嵌的每個時間序列/計量中變更
cluster
標籤標的值) - 啟用/停用預設抓取目標 - 根據目標開啟/關閉預設抓取。 這些預設目標的抓取設定已預先定義/內建
- 根據命名空間啟用以 Pod 註釋為基礎的抓取
- 計量保留清單:此設定可用來控制每個預設目標允許的計量,以及變更預設行為
- 抓取預設/預先定義目標的間隔。
30 secs
是預設的抓取頻率,而且可以使用此 Configmap 來變更每個預設目標 - 偵錯模式:啟用此設定有助於偵錯遺漏的計量/擷取問題 - 詳情請參閱疑難排解
- 叢集別名 (若要在從叢集內嵌的每個時間序列/計量中變更
ama-metrics-prometheus-config
此 Configmap 可用來提供附加元件複本的 Prometheus 抓取設定。 Addon 會執行單一複本,而且您可以在此 Configmap 中提供抓取作業,以探索和抓取任何叢集層級服務。 您可以從上述 Git 中樞存放庫取得範例 Configmap、新增您需要的抓取作業,並將 Configmap 套用/部署至叢集的kube-system
命名空間。 雖然支援此功能,但請注意,抓取自訂目標的建議方式是使用自訂資源ama-metrics-prometheus-config-node
(進階) 此 Configmap 可用來提供 Prometheus 抓取設定給叢集中每個 Linux 節點上執行的附加元件 DaemonSet,而且每個節點上的任何節點層級目標都可以在此 Configmap 中提供抓取作業來進行抓取。 當您使用此 Configmap 時,可以在抓取組態中使用$NODE_IP
變數,此變數會由在每個節點上執行的 DaemonSet Pod 中對應的節點 IP 位址取代。 如此一來,您就可以從計量附加元件 DaemonSet 抓取在該節點上執行的任何項目。 當您在此節點層級 Configmap 中使用抓取組態中的探索時請多加注意,因為叢集中的每個節點都會設定及探索目標,並收集的備援計量。 您可以從上述 Git 中樞存放庫取得範例 Configmap、新增您需要的抓取作業,並將 Configmap 套用/部署至叢集的kube-system
命名空間ama-metrics-prometheus-config-node-windows
(進階) 此 Configmap 可用來提供 Prometheus 抓取設定給叢集中每個 Windows 節點上執行的附加元件 DaemonSet,而每個節點上的節點層級目標可藉由在此 Configmap 中提供抓取作業來進行抓取。 當您使用此 Configmap 時,可以在抓取組態中使用$NODE_IP
變數,此變數將會由在每個節點上執行的 DaemonSet Pod 中對應的節點 IP 位址取代。 如此一來,您就可以從計量附加元件 DaemonSet 抓取在該節點上執行的任何項目。 當您在此節點層級 Configmap 中使用抓取組態中的探索時請多加注意,因為叢集中的每個節點都會設定及探索目標,並收集的備援計量。 您可以從上述 Git 中樞存放庫取得範例 Configmap、新增您需要的抓取作業,並將 Configmap 套用/部署至叢集的kube-system
命名空間
自訂資源定義
Azure 監視器計量附加元件支援使用 Prometheus - Pod 監視器和服務監視器來抓取 Prometheus 計量,類似於 OSS Prometheus 運算子。 啟用附加元件將會部署 Pod 和服務監視器自訂資源定義,讓您建立自己的自訂資源。 請遵循指示,在您的叢集上建立及套用自訂資源 (部分機器翻譯)。
計量附加元件設定 Configmap
The ama-metrics-settings-configmap 可以下載、編輯和套用至叢集,以自訂立即可用的計量附加元件功能。
啟用和停用預設目標
下表列出 Azure 監視器計量附加元件預設可抓取的所有預設目標,及其一開始是否已啟用。 預設目標為每隔 30 秒抓取一次。 複本會以抓取全叢集目標 (例如 kube-state-metrics) 進行部署。 DaemonSet 也會以抓取全節點目標 (例如 kubelet) 進行部署。
機碼 | 類型 | 已啟用 | Pod | 描述 |
---|---|---|---|---|
kubelet | bool | true |
Linux DaemonSet | 在 K8s 叢集中的每個節點中抓取 kubelet,而不需要任何額外的抓取設定。 |
cadvisor | bool | true |
Linux DaemonSet | 在 K8s 叢集中的每個節點中抓取 cAdvisor,而不需要任何額外的抓取設定。 僅限 Linux。 |
kubestate | bool | true |
Linux 複本 | 在 K8s 叢集中抓取 kube-state-metrics (安裝為附加元件的一部分),而不需任何額外的抓取設定。 |
nodeexporter | bool | true |
Linux DaemonSet | 抓取節點計量,而不需任何額外的抓取設定。 僅限 Linux。 |
coredns | bool | false |
Linux 複本 | 在 K8s 叢集中抓取 coredns 服務,而不需要任何額外的抓取設定。 |
kubeproxy | bool | false |
Linux DaemonSet | 在 K8s 叢集中探索到的每個 Linux 節點中抓取 kube-proxy,而不需要任何額外的抓取設定。 僅限 Linux。 |
apiserver | bool | false |
Linux 複本 | 在 K8s 叢集中抓取 kubernetes API 伺服器,而不需任何額外的抓取設定。 |
windowsexporter | bool | false |
Windows DaemonSet | 在 K8s 叢集中的每個節點中抓取 Windows 匯出工具,而不需要任何額外的抓取設定。 僅限 Windows。 |
windowskubeproxy | bool | false |
Windows DaemonSet | 在 K8s 叢集的每個節點中抓取 windows-kube-proxy,無需任何額外的抓取設定。 僅限 Windows。 |
prometheuscollectorhealth | bool | false |
Linux 複本 | 抓取 prometheus-collector 容器的相關資訊,例如抓取的時間序列數量和大小。 |
如果您想要開啟預設未啟用的預設目標抓取,請編輯 configmap (英文) ama-metrics-settings-configmap
,以將 default-scrape-settings-enabled
下列出的目標更新為 true
。 將 Configmap 套用至您的叢集。
啟用以 Pod 註釋為基礎的抓取
若要抓取應用程式 Pod,而不需要建立自定義 Prometheus 組態,可以將註釋新增至 Pod。 需要註釋 prometheus.io/scrape: "true"
才能抓取 Pod。 批註 prometheus.io/path
和 prometheus.io/port
指出計量裝載在 Pod 上的路徑和連接埠。 於 <pod IP>:8080/metrics
裝載計量之 Pod 的註釋如下:
metadata:
annotations:
prometheus.io/scrape: 'true'
prometheus.io/path: '/metrics'
prometheus.io/port: '8080'
預設會抓取具有特定註釋的這些 Pod。 若要啟用,請在 ama-metrics-settings-configmap
中,新增 pod 命名空間的 regex,並加上您想要抓取的批註作為字段的值 podannotationnamespaceregex
。
例如,下列設定只會在 命名空間 kube-system
和 my-namespace
中抓取具有註釋的 Pod:
pod-annotation-based-scraping: |-
podannotationnamespaceregex = "kube-system|my-namespace"
警告
根據具有註釋的 Pod 數目,從許多命名空間抓取 Pod 註釋可能會產生非常大量的計量。
自訂預設目標所收集的計量
根據預設,對於所有預設目標,只會內嵌預設錄製規則、警示和 Grafana 儀表板中使用的最小計量,如 minimal-ingestion-profile 中所述。 若要從預設目標收集所有計量,請在 default-targets-metrics-keep-list
下方更新設定 configmap 中的 keep-list,並將 minimalingestionprofile
設定為 false
。
若要允許列出更多計量,除了允許的預設計量之外,針對任何預設目標,請針對您想要變更的對應作業編輯 default-targets-metrics-keep-list
下的設定。
例如,kubelet
是預設目標 kubelet 的計量篩選設定。 使用下列指令碼,以篩選使用 regex 型篩選條件在預設目標中收集的 in 計量。
kubelet = "metricX|metricY"
apiserver = "mymetric.*"
注意
如果您在 regex 中使用引號或反斜線,則必須使用反斜線來逸出,例如範例 "test\'smetric\"s\""
和 testbackslash\\*
。
若要進一步自訂預設作業以變更屬性,例如集合頻率或標籤,請藉由將目標的 configmap 值設為 false
,以停用對應的預設目標。 然後使用自訂 Configmap 來套用作業。 對於自訂設定上的詳細資料,請參閱在 Azure 監視器中自訂抓取 Prometheus 計量。
叢集別名
附加至每次抓取時間序列的叢集標籤將會使用完整 AKS 叢集 Azure Resource Manager 資源識別碼的最後一部分。 例如,如果資源識別碼為 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-name/providers/Microsoft.ContainerService/managedClusters/myclustername
,則叢集標籤為 myclustername
。
若要覆寫已抓取時間序列中的叢集標籤,請將設定 cluster_alias
更新為 configmap (英文) ama-metrics-settings-configmap
中 prometheus-collector-settings
下的任何字串。 如果叢集中不存在,您可以建立此 Configmap,或者如果叢集中已經存在,您則可以編輯。
新的標籤也顯示在 Grafana 儀表板的叢集參數下拉式清單中,而不是預設標籤。
注意
僅允許英數字元。 任何字元都會取代為 _
。 這項變更為了確保取用此標籤的不同元件會遵守基本英數字元慣例。
如果您要啟用錄製和警示規則,請務必在規則上線範本的叢集名稱參數中使用叢集別名名稱,以利規則運作。
偵錯模式
警告
此模式可能會影響效能,而且只應該短時間啟用以進行偵錯。
若要檢視為了偵錯而抓取的每個計量,可以將計量附加元件代理程式設定為在偵錯模式中執行,方法是將設定 enabled
更新為 configmap (英文) ama-metrics-settings-configmap
中 debug-mode
設定下的 true
。 您可以建立此 configmap,或編輯現有的 configmap。 如需更多資訊,請參閱對於 Prometheus 計量集合進行疑難排解的〈偵錯模式〉一節。
抓取間隔設定
若要更新任何目標的抓取間隔設定,您可以在 Configmap (英文) ama-metrics-settings-configmap
中更新該目標的設定 default-targets-scrape-interval-settings
持續時間。 您必須以此網站中指定的正確格式來設定抓取間隔。 否則,預設值為 30 秒會套用至對應的目標。 例如 - 如果您想要將 kubelet
作業的抓取間隔更新為 60s
,您可以在 YAML 中更新下列區段:
default-targets-scrape-interval-settings: |-
kubelet = "60s"
coredns = "30s"
cadvisor = "30s"
kubeproxy = "30s"
apiserver = "30s"
kubestate = "30s"
nodeexporter = "30s"
windowsexporter = "30s"
windowskubeproxy = "30s"
kappiebasic = "30s"
prometheuscollectorhealth = "30s"
podannotations = "30s"
並使用下列命令套用 YAML:kubectl apply -f .\ama-metrics-settings-configmap.yaml
設定自訂 Prometheus 抓取作業
您可以使用 Prometheus - Pod 監視器和服務監視器 (建議使用) 來抓取 Prometheus 計量,類似於 OSS Prometheus 運算子。 請遵循指示,在您的叢集上建立及套用自訂資源 (部分機器翻譯)。
此外,針對您的叢集,您可以遵循指示以建立、驗證及套用 configmap。 設定格式類似於 Prometheus 設定檔 (英文)。
Prometheus 設定提示與範例
從本節的範例中了解一些秘訣。
使用 Pod 和服務監視器範本 (英文),並遵循 API 規格來建立您的自訂資源 (PodMonitor (英文) 和服務監視器 (英文))。 請注意,受控 Prometheus 挑選現有 OSS CR 所需的唯一變更是 API 群組 - azmonitoring.coreos.com/v1。 請參閱這裡 (部分機器翻譯) 來深入了解
注意
當自訂抓取設定因驗證錯誤而無法套用時,將會繼續使用預設抓取設定。
如果您想使用套用至所有抓取作業的全域設定,而且只有自訂資源 (部分機器翻譯),您仍然需要建立僅包含全域設定的 configmap (自訂資源中的這每個設定都會覆寫全域區段中的設定)
抓取設定
目前,自訂資源的目標探索支援方法是 Pod 和服務監視器
Pod 和服務監視器
使用 Pod 和服務監視器探索到的目標,會根據所使用的監視器而有不同的 __meta_*
標籤。 您可以在 relabelings
區段使用這些標籤,以篩選目標或取代目標的標籤。
請參閱 Pod 和服務監視器的 Pod 和服務監視器範例 (英文)。
重新指派標籤
relabelings
區段會在目標探索時套用,並套用至作業的每個目標。 下列範例示範使用 relabelings
的方式。
新增標籤
將名為 example_label
的新標籤 (具有值 example_value
) 新增至作業的每個計量。 請只使用 __address__
做為來源標籤,因為該標籤存在,並新增作業每個目標的標籤。
relabelings:
- sourceLabels: [__address__]
targetLabel: example_label
replacement: 'example_value'
使用 Pod 或服務監視器標籤
使用 Pod 和服務監視器探索到的目標,會根據所使用的監視器而有不同的 __meta_*
標籤。 探索目標之後,會卸除 __*
標籤。 若要在計量層級篩選這些標籤,請先指派標籤名稱,使其維持使用 relabelings
。 然後使用 metricRelabelings
來篩選。
# Use the kubernetes namespace as a label called 'kubernetes_namespace'
relabelings:
- sourceLabels: [__meta_kubernetes_namespace]
action: replace
targetLabel: kubernetes_namespace
# Keep only metrics with the kubernetes namespace 'default'
metricRelabelings:
- sourceLabels: [kubernetes_namespace]
action: keep
regex: 'default'
作業與執行個體重新指派標籤
您可根據來源標籤變更 job
和 instance
標籤值,就像任何其他標籤一樣。
# Replace the job name with the pod label 'k8s app'
relabelings:
- sourceLabels: [__meta_kubernetes_pod_label_k8s_app]
targetLabel: job
# Replace the instance name with the node name. This is helpful to replace a node IP
# and port with a value that is more readable
relabelings:
- sourceLabels: [__meta_kubernetes_node_name]]
targetLabel: instance
注意
如果您有重新標記設定,請確定重新標記不會篩選出目標,且設定的標籤可正確符合目標。
計量重新指派標籤
重新指派標籤會在抓取之後和擷取之前套用。 使用 metricRelabelings
區段以篩選抓取後的計量。 下列範例示範如何進行。
依名稱卸除計量
# Drop the metric named 'example_metric_name'
metricRelabelings:
- sourceLabels: [__name__]
action: drop
regex: 'example_metric_name'
依名稱僅保留特定計量
# Keep only the metric named 'example_metric_name'
metricRelabelings:
- sourceLabels: [__name__]
action: keep
regex: 'example_metric_name'
# Keep only metrics that start with 'example_'
metricRelabelings:
- sourceLabels: [__name__]
action: keep
regex: '(example_.*)'
重新命名計量
不支援計量重新命名。
依標籤篩選計量
# Keep metrics only where example_label = 'example'
metricRelabelings:
- sourceLabels: [example_label]
action: keep
regex: 'example'
# Keep metrics only if `example_label` equals `value_1` or `value_2`
metricRelabelings:
- sourceLabels: [example_label]
action: keep
regex: '(value_1|value_2)'
# Keep metrics only if `example_label_1 = value_1` and `example_label_2 = value_2`
metricRelabelings:
- sourceLabels: [example_label_1, example_label_2]
separator: ';'
action: keep
regex: 'value_1;value_2'
# Keep metrics only if `example_label` exists as a label
metricRelabelings:
- sourceLabels: [example_label_1]
action: keep
regex: '.+'
基本身份驗證和持有人令牌
若要在 prometheus 組態中使用 basic_auth
或 bearer_token
設定,請遵循下列步驟:
在名為
ama-metrics-mtls-secret
的命名空間中kube-system
建立秘密。只要它符合下一個步驟中 Prometheus 的 filepath 中的
password_file
檔名,金鑰的名稱password1
就可以是任何專案。 索引鍵的值必須是base64編碼。apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: password1: <base64-encoded-string>
秘密
ama-metrics-mtls-secret
會掛接至ama-metrics
路徑/etc/prometheus/certs/
上的Pod,並可供 Prometheus 刮刀使用。 索引鍵 (password1
在上述範例中) 會是檔名。 此值已譯碼為base64,並新增為容器內檔案的內容。然後,在 configmap 中的自定義報廢組態中,提供 filepath:
基本驗證
欄位
username
應該包含實際的用戶名稱字串。 欄位password_file
應該包含包含密碼之檔案的路徑。# Sets the `Authorization` header on every scrape request with the # configured username and password. basic_auth: username: <username string> password_file: /etc/prometheus/certs/password1
持有人權杖
欄位
bearer_token_file
應該包含包含令牌之檔案的路徑。# Sets the `Authorization` header on every scrape request with the bearer token # read from the configured file. It is mutually exclusive with `bearer_token`. bearer_token_file: /etc/prometheus/certs/password1
如需這些設定的詳細資訊,請參閱 Prometheus scrape_config 檔。
如果您使用基本身份驗證和 TLS 驗證,請參閱 下列章節 。 如需詳細資訊,請參閱下方的附註一節。
以 TLS 為基礎的報廢
如果您想要從 HTTPs 端點擷取 Prometheus 計量,Prometheus 組態、PodMonitor 或 ServiceMonitor 應該已 scheme
設定為 https
和額外的 TLS 設定。
在名為
ama-metrics-mtls-secret
的命名空間中kube-system
建立秘密。 秘密物件之數據區段中指定的每個索引鍵/值組,都會掛接為此 /etc/prometheus/certs 位置中的個別檔案,檔名與數據區段中指定的索引鍵相同。 秘密值應以base64編碼。以下是秘密的範例 YAML:
apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: <certfile>: base64_cert_content <keyfile>: base64_key_content
秘密
ama-metrics-mtls-secret
會掛接至ama-metrics
路徑/etc/prometheus/certs/
上的Pod,並可供 Prometheus 刮刀使用。 索引鍵 (password1
在上述範例中) 會是檔名。 此值已譯碼為base64,並新增為容器內檔案的內容。然後,在 Prometheus config、PodMonitor 或 ServiceMonitor 中,提供 filepath:
- 若要在 configmap 中提供 TLS 組態設定,請遵循下列範例:
tls_config:
# CA certificate to validate API server certificate with.
ca_file: /etc/prometheus/certs/<certfile>
# Certificate and key files for client cert authentication to the server.
cert_file: /etc/prometheus/certs/<certfile>
key_file: /etc/prometheus/certs/<keyfile>
# Disable validation of the server certificate.
insecure_skip_verify: false
基本驗證和 TLS
如果您想要在 configmap/CRD 中使用基本和 TLS 驗證設定,請確定秘密 ama-metrics-mtls-secret
包含數據區段下的所有密鑰及其對應的 base64 編碼值,如下所示:
apiVersion: v1
kind: Secret
metadata:
name: ama-metrics-mtls-secret
namespace: kube-system
type: Opaque
data:
certfile: base64_cert_content # used for TLS
keyfile: base64_key_content # used for TLS
password1: base64-encoded-string # used for basic auth
password2: base64-encoded-string # used for basic auth
注意
注意
路徑 /etc/prometheus/certs/
是必要路徑,但 password1
可以是任何字串,而且必須符合上面所建立秘密中數據的索引鍵。 這是因為秘密 ama-metrics-mtls-secret
會掛接在容器內的路徑 /etc/prometheus/certs/
中。
當秘密掛接為檔案時,ama-metrics Pod 會自動將base64編碼的值譯碼。
請確定秘密名稱為 ama-metrics-mtls-secret
,且位於命名空間中 kube-system
。
應該先建立秘密,然後在命名空間中 kube-system
建立 configmap、PodMonitor 或 ServiceMonitor。 祕密建立的順序很重要。 當沒有秘密,但 configmap、PodMonitor 或 ServiceMonitor 指向秘密時,下列錯誤會位於 ama-metrics prometheus-collector 容器記錄中: no file found for cert....
若要深入了解 TLS 組態設定,請遵循此組態 (英文)。