共用方式為


在適用於 Prometheus 的 Azure 監視器受管理服務中自訂抓取 Prometheus 計量

本文提供在 Azure 監視器中使用計量附加元件,以自訂為 Kubernetes 叢集抓取計量的相關指示。

Configmaps

可以設定四個不同的 Configmaps 以提供計量附加元件的抓取設定和其他設定。 所有設定對應都應該套用至任何叢集 kube-system 命名空間。

注意

啟用受控 Prometheus 時,叢集中預設沒有這四個 Configmap。 視需要自訂的內容而定,您必須在 kube-system 命名空間中部署這四個相同名稱的這四個 configmap 中的任何或全部。 AMA 計量 Pod 會在您將這些設定對應部署到 kube-system 命名空間之後挑選,並在 2-3 分鐘內重新啟動,以套用 Configmap 中指定的設定。

  1. ama-metrics-settings-configmap 此 ConfigMap 具有下列可設定的簡單設定。 您可以從上述 Git 中樞存放庫取得 Configmap、變更需要設定,並將 Configmap 套用/部署至叢集的 kube-system 命名空間
    • 叢集別名 (若要在從叢集內嵌的每個時間序列/計量中變更 cluster 標籤標的值)
    • 啟用/停用預設抓取目標 - 根據目標開啟/關閉預設抓取。 這些預設目標的抓取設定已預先定義/內建
    • 根據命名空間啟用以 Pod 註釋為基礎的抓取
    • 計量保留清單:此設定可用來控制每個預設目標允許的計量,以及變更預設行為
    • 抓取預設/預先定義目標的間隔。 30 secs 是預設的抓取頻率,而且可以使用此 Configmap 來變更每個預設目標
    • 偵錯模式:啟用此設定有助於偵錯遺漏的計量/擷取問題 - 詳情請參閱疑難排解
  2. ama-metrics-prometheus-config 此 Configmap 可用來提供附加元件複本的 Prometheus 抓取設定。 Addon 會執行單一複本,而且您可以在此 Configmap 中提供抓取作業,以探索和抓取任何叢集層級服務。 您可以從上述 Git 中樞存放庫取得範例 Configmap、新增您需要的抓取作業,並將 Configmap 套用/部署至叢集的 kube-system 命名空間。 雖然支援此功能,但請注意,抓取自訂目標的建議方式是使用自訂資源
  3. ama-metrics-prometheus-config-node (進階) 此 Configmap 可用來提供 Prometheus 抓取設定給叢集中每個 Linux 節點上執行的附加元件 DaemonSet,而且每個節點上的任何節點層級目標都可以在此 Configmap 中提供抓取作業來進行抓取。 當您使用此 Configmap 時,可以在抓取組態中使用 $NODE_IP 變數,此變數會由在每個節點上執行的 DaemonSet Pod 中對應的節點 IP 位址取代。 如此一來,您就可以從計量附加元件 DaemonSet 抓取在該節點上執行的任何項目。 當您在此節點層級 Configmap 中使用抓取組態中的探索時請多加注意,因為叢集中的每個節點都會設定及探索目標,並收集的備援計量。 您可以從上述 Git 中樞存放庫取得範例 Configmap、新增您需要的抓取作業,並將 Configmap 套用/部署至叢集的 kube-system 命名空間
  4. 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/pathprometheus.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-systemmy-namespace 中抓取具有註釋的 Pod:

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

若要針對具有所有命名空間註釋的 Pod 啟用抓取,請使用:

pod-annotation-based-scraping: |-
    podannotationnamespaceregex = ".*"

警告

根據具有註釋的 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/00000000-0000-0000-0000-000000000000/resourcegroups/rg-name/providers/Microsoft.ContainerService/managedClusters/myclustername,則叢集標籤為 myclustername

若要覆寫已抓取時間序列中的叢集標籤,請將設定 cluster_alias 更新為 configmap ama-metrics-settings-configmapprometheus-collector-settings 下的任何字串。 如果叢集中不存在,您可以建立此 Configmap,或者如果叢集中已經存在,您則可以編輯。

新的標籤也顯示在 Grafana 儀表板的叢集參數下拉式清單中,而不是預設標籤。

注意

僅允許英數字元。 任何字元都會取代為 _。 這項變更為了確保取用此標籤的不同元件會遵守基本英數字元慣例。 如果您要啟用錄製和警示規則,請務必在規則上線範本的叢集名稱參數中使用叢集別名名稱,以利規則運作。

偵錯模式

警告

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

若要檢視為了偵錯而抓取的每個計量,可以將計量附加元件代理程式設定為在偵錯模式中執行,方法是將設定 enabled 更新為 configmap ama-metrics-settings-configmapdebug-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'

作業與執行個體重新指派標籤

您可根據來源標籤變更 jobinstance 標籤值,就像任何其他標籤一樣。

# 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 設定,請遵循步驟 -

  1. 在名為 ama-metrics-mtls-secretkube-system 命名空間中建立祕密

password1 的值是 base64encoded 索引鍵 password1 可以是任何內容,只要符合您的 scrapeconfig password_file filepath 即可。

apiVersion: v1
kind: Secret
metadata:
  name: ama-metrics-mtls-secret
  namespace: kube-system
type: Opaque
data:
  password1: <base64-encoded-string>

ama-metrics-mtls-secret 祕密會掛接至路徑 - /etc/prometheus/certs/ 上的 ama-metrics 容器,並可供正在抓取 prometheus 計量的程序使用。 上述範例中的索引鍵 (例如 password1) 會是檔案名稱,且值為 base64 解碼,並會新增至容器內檔案的內容,而 prometheus 抓取器會使用此檔案的內容來取得用來當作密碼的值,以用來抓取端點。

  1. 在自訂抓取設定的 configmap 中使用下列設定 -
basic_auth:
  username: admin
  password_file: /etc/prometheus/certs/password1

藉由提供上述 password_file 的路徑,prometheus 抓取器會使用路徑 /etc/prometheus/certs 中名為 password1 的檔案內容作為基本驗證型抓取的密碼值。

如果您使用基本身份驗證和 TLS 驗證,請參閱下列章節。 如需詳細資訊,請參閱下方的附註一節

TLS 型抓取

如果您有使用 TLS 提供的 Prometheus 執行個體,而且想要從中抓取計量,您必須將設定設定為 https,並在 Configmap 或個別 CRD 中設定 TLS 設定。 請按照下列步驟進行。

  1. 在名為 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 祕密會掛接至路徑 - /etc/prometheus/certs/ 上的 ama-metrics 容器,並可供正在抓取 prometheus 計量的程序使用。 上述範例中的索引鍵 (例如 certfile) 會是檔案名稱,且值為 base64 解碼,並會新增至容器內檔案的內容,而 prometheus 抓取器會使用此檔案的內容來取得用來當作密碼的值,以用來抓取端點。

  2. 以下是如何透過 Configmap 或 CRD 提供 TLS 組態設定的詳細資料。

  • 若要在 configmap 中提供 TLS 組態設定,請遵循下列範例。
tls_config:
    ca_file: /etc/prometheus/certs/<certfile> # since it is self-signed
    cert_file: /etc/prometheus/certs/<certfile>
    key_file: /etc/prometheus/certs/<keyfile>
    insecure_skip_verify: false

基本驗證和 TLS

如果您想要在 configmap/CRD 中使用基本和 TLS 驗證設定,只要確定祕密 ama-metrics-mtls-secret 包含資料區段底下的所有檔案 (索引鍵) 及其對應的基底 64 編碼值即可,如下所示。

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/ 中。

當祕密掛接為檔案時,代理程式 Pod 會自動將 base64 編碼值解碼。

請確定祕密名稱是 ama-metrics-mtls-secret,且位於 kube-system 命名空間中。

祕密應該會建立,然後在 kube-system 命名空間中建立 Configmap/CRD。 祕密建立的順序很重要。 當沒有秘密,但有效的 CRD/ Configmap 時,您會在收集器記錄檔中找到錯誤 ->no file found for cert....

若要深入了解 TLS 組態設定,請遵循此組態

下一步

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