Share via


在 Azure 監視器中建立及驗證 Prometheus 計量的自訂設定檔

除了 Azure 監視器 Prometheus 代理程式預設抓取的預設抓取目標之外,請執行下列步驟以使用 configmap 將更多抓取設定提供給代理程式。 Azure 監視器 Prometheus 代理程式無法了解或處理操作員適用於抓取設定的 CRD (英文),而是使用在 Prometheus 設定 (英文) 中定義的原生 Prometheus 設定。

可用於自訂目標抓取的三個 configmap 為 -

  • ama-metrics-prometheus-config (建議使用) - 建立具有此名稱的 configmap 時,會從叢集中執行的 Azure 監視器計量複本 Pod 執行其中定義的抓取作業。
  • ama-metrics-prometheus-config-node (進階) - 建立具有此名稱的 configmap 時,會從叢集中執行的每個 Linux DaemonSet Pod 執行其中定義的抓取作業。 如需詳細資訊,請參閱進階設定
  • ama-metrics-prometheus-config-node-windows (進階) - 建立具有此名稱的 configmap 時,會從每個 Windows DaemonSet 執行其中定義的抓取作業。 如需詳細資訊,請參閱進階設定

建立 Prometheus 設定檔

撰寫 Prometheus 抓取設定作業的一個更簡單方式:

  • 步驟 1: 使用設定檔 (yaml) 來撰寫/定義抓取作業
  • 步驟 2: 使用自訂工具 (如本文中所指定) 驗證抓取設定檔,然後將該設定檔轉換為 configmap
  • 步驟 3: 將抓取設定檔以 configmap 形式部署到您的叢集。

這樣做可讓您更輕鬆地撰寫 yaml 設定 (這是對空間非常敏感的作業),並透過直接在 configmap 中撰寫抓取,而不會增加非預期的空間。

建立名為 prometheus-config 的 Prometheus 抓取設定檔。 如需詳細資訊,請參閱設定提示與範例,其中提供了有關如何為 Prometheus 撰寫抓取設定的詳細資料。 您也可以參考 Prometheus.io (英文) 抓取設定參考 (英文)。 您的設定檔會列出 scrape_configs 區段底下的抓取設定,而且可以選擇性地使用全域區段來設定全域 scrape_intervalscrape_timeoutexternal_labels

提示

對全域區段進行變更會影響預設設定和自訂設定。

以下是範例 Prometheus 抓取設定檔:

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']

- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

驗證抓取設定檔

代理程式會使用自訂 promconfigvalidator 工具來驗證透過 configmap 提供給代理程式的 Prometheus 設定。 如果設定無效,則附加元件代理程式會拒絕指定的自訂設定。 一旦您有 Prometheus 設定檔,您可以選擇性地使用 promconfigvalidator 工具來驗證您的設定,再建立代理程式取用的 configmap。

promconfigvalidator 工具隨附於 Azure 監視器計量附加元件 Pod 內。 您可以使用您叢集 kube-system 命名空間中的任何 ama-metrics-node-* Pod 來下載工具以進行驗證。 使用 kubectl cp 來下載工具及其設定:

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

複製可執行檔和 yaml 之後,找出您撰寫的 Prometheus 設定檔路徑。 然後,取代命令中的 <config path> 並使用下列命令執行驗證程式:

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

如果選擇性的 output 參數未提供路徑,則執行驗證程式會產生合併的設定檔 merged-otel-config.yaml。 請勿將此自動產生的合併檔案作為計量收集器代理程式的設定使用,因為其僅用於工具驗證和偵錯用途。

將設定檔部署為 configmap

您的自訂 Prometheus 設定檔會以 kube-system 命名空間中計量附加元件 configmap ama-metrics-prometheus-config (或) ama-metrics-prometheus-config-node (或) ama-metrics-prometheus-config-node-windows 內名為 prometheus-config 的欄位形式加以取用。 您可以從上述的抓取設定檔建立 configmap,做法是將 Prometheus 設定檔重新命名為 prometheus-config (不含副檔名),然後根據您想要為自訂抓取作業設定建立的 configmap 執行下列一或多個命令。

例如,若要建立 configmap 以供複本集使用

kubectl create configmap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

這會在 kube-system 命名空間中建立名為 ama-metrics-prometheus-config 的 configmap。 Azure 監視器計量複本 Pod 會在 30-60 秒內重新啟動,以套用新的設定。若要查看設定驗證、處理或合併是否有任何問題,您可以查看 ama-metrics 複本 Pod

例如,若要建立 configmap 以供 Linux DaemonSet 使用

kubectl create configmap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

這會在 kube-system 命名空間中建立名為 ama-metrics-prometheus-config-node 的 configmap。 每個 Azure 監視器計量 Linux DaemonSet Pod 都會在 30-60 秒內重新啟動,以套用新的設定。若要查看設定驗證、處理或合併是否有任何問題,您可以查看 ama-metrics-node Linux DeamonSet Pod

例如,若要建立 configmap 以供 Windows DaemonSet 使用

kubectl create configmap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

這會在 kube-system 命名空間中建立名為 ama-metrics-prometheus-config-node-windows 的 configmap。 每個 Azure 監視器計量 Windows DaemonSet Pod 都會在 30-60 秒內重新啟動,以套用新的設定。若要查看設定驗證、處理或合併是否有任何問題,您可以查看 ama-metrics-win-node Windows DeamonSet Pod

「在執行下列命令之前,請先確定 Prometheus 設定檔已名為 prometheus-config,因為檔案名稱會作為 configmap 設定名稱使用。」

這會在 kube-system 命名空間中建立名為 ama-metrics-prometheus-config 的 configmap。 Azure 監視器計量 Pod 會重新啟動,以套用新的設定。若要查看設定驗證、處理或合併是否有任何問題,您可以查看 ama-metrics Pod。

這裡 (英文) 提供一個 ama-metrics-prometheus-config configmap 的範例。

疑難排解

如果您已在 kube-system 命名空間中成功建立 configmap (ama-metrics-prometheus-config 或 ama-metrics-prometheus-config-node),但仍看不見系統抓取自訂目標,請使用 kubectl logsama-metrics-prometheus-config configmap 的複本 Pod 記錄中檢查錯誤,或是在 ama-metrics-prometheus-config-node configmap 的DaemonSet pod 中檢查錯誤,並確定 Start Merging Default and Custom Prometheus Config 區段中沒有具有 prometheus-config-merger 前置詞的任何錯誤

注意

進階設定: 設定 DaemonSet 的自訂 Prometheus 抓取作業

ama-metrics 複本 Pod 會取用自訂的 Prometheus 設定,並抓取指定的目標。 對於具有大量節點和 Pod 的叢集,以及要抓取的大量計量,某些適用的自訂抓取目標可以從單一 ama-metrics 複本 Pod 卸載至 ama-metrics DaemonSet Pod。

ama-metrics-prometheus-config-node configmap,類似複本集 configmap,建立後可以在每個節點上指定靜態抓取設定。 抓取設定應該只以單一節點為目標,不應使用服務探索/Pod 註釋。 否則,每個節點都會嘗試抓取所有目標,並向 Kubernetes API 伺服器發出許多呼叫。

自訂抓取目標可以利用 static_configs 與目標來遵循相同格式,搭配使用 $NODE_IP 環境變數並指定要抓取的連接埠。 每個 DaemonSet Pod 將採用設定、抓取計量,並為該節點傳送計量。

範例: 下列 node-exporter 設定是 DaemonSet Pod 的其中一個預設目標。 它會使用 $NODE_IP 環境變數,該變數已針對每個 ama-metrics 附加元件容器設定,以節點上的特定連接埠為目標。

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

下一步