湊集其他 Prometheus 來源並匯入這些指標 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

湊集其他 Prometheus 來源並匯入這些指標

具有 Prometheus 監控的 CloudWatch 代理需要兩種配置來抓取 Prometheus 指標。其中一個是 Prometheus 文件的 <scrape_config> 中記錄的標準 Prometheus 湊集組態。另一個用於代 CloudWatch 理配置。

對於 Amazon ECS 叢集,組態會與的參數存放區整合 AWS Systems Manager 通過 Amazon ECS 任務定義中的秘密:

  • 秘密 PROMETHEUS_CONFIG_CONTENT 適用於 Prometheus 湊集組態。

  • 密碼CW_CONFIG_CONTENT是用於 CloudWatch 代理程式組態。

若要抓取其他 Prometheus 指標來源並將這些指標匯入 CloudWatch,請修改 Prometheus 抓取設定和代理程式組態,然後使用更新的組態重新部署 CloudWatch 代理程式。

VPC安全群組需求

Prometheus 工作負載的安全群組輸入規則必須向 CloudWatch 代理程式開啟 Prometheus 連接埠,以便透過私有 IP 擷取 Prometheus 度量。

代理程式的安全性群組輸出規則必須允許 CloudWatch 代理程式透過 CloudWatch 私有 IP 連線至 Prometheus 工作負載的連接埠。

Prometheus 湊集組態

該 CloudWatch 代理支持標準的 Prometheus 抓取配置,如 Prometheus 文檔https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config<scrape_config>中所述。您可以編輯此區段來更新已存在於此檔案中的組態,並新增其他 Prometheus 湊集目標。根據預設,範例組態檔案包含下列全域組態行:

global: scrape_interval: 1m scrape_timeout: 10s
  • scrape_interval— 定義湊集目標的頻率。

  • scrape_timeout— 定義湊集請求逾時之前要等待的時間。

您也可以在任務層級為這些設定定義不同的數值,以覆寫全域設定。

Prometheus 湊集任務

CloudWatch 代理程式YAML檔案已設定一些預設抓取工作。例如,在 Amazon 的YAML文件(例ECS如)中cwagent-ecs-prometheus-metric-for-bridge-host.yaml,在ecs_service_discovery本節中配置了默認抓取任務。

"ecs_service_discovery": { "sd_frequency": "1m", "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml", "docker_label": { }, "task_definition_list": [ { "sd_job_name": "ecs-appmesh-colors", "sd_metrics_ports": "9901", "sd_task_definition_arn_pattern": ".*:task-definition\/.*-ColorTeller-(white):[0-9]+", "sd_metrics_path": "/stats/prometheus" }, { "sd_job_name": "ecs-appmesh-gateway", "sd_metrics_ports": "9901", "sd_task_definition_arn_pattern": ".*:task-definition/.*-ColorGateway:[0-9]+", "sd_metrics_path": "/stats/prometheus" } ] }

這些預設目標中的每一個都會被抓取,並使用內嵌指標格式 CloudWatch 在日誌事件中將指標傳送至記錄事件中。如需詳細資訊,請參閱在日誌中內嵌指標

Amazon ECS 叢集中的日誌事件會儲存在 /aws/EC/容器洞察/cluster_name/Promethe us 日誌組。

每個湊集任務都包含在此日誌群組的不同日誌串流中。

要添加新的抓取目標,請在YAML文件的部分下的task_definition_list部分中添加一個新條目ecs_service_discovery。,然後重新啟動代理程序。如需此程序的範例,請參閱添加新的 Prometheus 抓取目標的教程:Prometheus 服務器指標 API

CloudWatch Prometheus 的代理程式組態

CloudWatch 代理配置文件在 Prometheus 抓metrics_collected取配置下有一個prometheus部分。其包含下列組態選項:

  • cluster_name— 指定要在日誌事件中新增為標籤的叢集名稱。此欄位為選用欄位。如果省略它,代理程式可以偵測 Amazon ECS 叢集名稱。

  • log_group_name— 為湊集的 Prometheus 指標指定日誌檔案群組名稱。此欄位為選用欄位。如果省略它,請 CloudWatch 使用 /aws/ecs/容器洞察力/cluster_name/代表來自亞馬Amazon 集群的日誌。ECS

  • prometheus_config_path— 指定 Prometheus 湊集組態檔案路徑。如果此欄位的值以 env: 為開頭,則將從容器的環境變數中擷取 Prometheus 湊集組態檔案內容。請不要變更此欄位。

  • ecs_service_discovery — 是指定 Amazon ECS Prometheus 目標自動探索功能組態的一節。支援兩種模式來探索 Prometheus 目標:根據容器的 docker 標籤進行探索,或根據 Amazon ECS 任務定義規則運算式進行探索。ARN您可以同時使用這兩種模式, CloudWatch 代理程式會根據以下項目去除探索到的目標的重複資料:{private_ip}: {連接埠}/{metrics_path}

    ecs_service_discovery 區段可以包含下列欄位:

    • sd_frequency 是發現 Prometheus Exporters 的頻率。指定數字和單位尾碼。例如:每分鐘一次 1m 或每 30 秒30s一次。有效的單位尾碼為nsusmssm 以及 h

      此欄位為選用欄位。預設值為 60 秒 (1 分鐘)。

    • sd_target_cluster是用於自動探索的目標 Amazon ECS 叢集名稱。此欄位為選用欄位。預設值為安裝 CloudWatch 代理程式的 Amazon ECS 叢集名稱。

    • sd_cluster_region是目標 Amazon ECS 群集的區域。此欄位為選用欄位。預設為安裝 CloudWatch代理程式的 Amazon ECS 叢集區域。

    • sd_result_file是 Prometheus 目標結果的YAML檔案路徑。Prometheus 湊集組態將參與此檔案。

    • docker_label 是選用區段,您可以用它來指定 Docker 標籤型服務探索的組態。如果您省略此區段,則不會使用 Docker 標籤型探索。此區段可以包含下列欄位:

      • sd_port_label 是容器的 Docker 標籤名稱,用於指定 Prometheus 指標的容器連接埠。預設值為 ECS_PROMETHEUS_EXPORTER_PORT。如果容器沒有此 docker 標籤,則 CloudWatch 代理程式會略過它。

      • sd_metrics_path_label 是容器的 Docker 標籤名稱,用於指定 Prometheus 指標路徑。預設值為 ECS_PROMETHEUS_METRICS_PATH。如果容器沒有此 Docker 標籤,則代理程式會假設預設路徑 /metrics

      • sd_job_name_label 是容器的 Docker 標籤名稱,用於指定 Prometheus 湊集任務名稱。預設值為 job。如果容器沒有此 docker 標籤,則 CloudWatch 代理程式會使用 Prometheus 抓取設定中的作業名稱。

    • task_definition_list 是選用區段,您可以用它來指定任務定義型服務探索的組態。如果您省略此區段,則不會使用任務定義型探索。此區段可以包含下列欄位:

      • sd_task_definition_arn_pattern是用來指定要探索之 Amazon ECS 任務定義的模式。這是規則表達式。

      • sd_metrics_ports列出 Promethe containerPort us 測量結果的。 containerPorts 用分號分隔。

      • sd_container_name_pattern指定 Amazon ECS 任務容器名稱。這是規則表達式。

      • sd_metrics_path 指定了 Prometheus 指標路徑。如果您省略此項,代理程式會假設預設路徑 /metrics

      • sd_job_name 指定了 Prometheus 湊集任務名稱。如果您省略此欄位, CloudWatch 代理程式會使用 Prometheus 抓取設定中的工作名稱。

    • service_name_list_for_tasks 是選用區段,您可以用它來指定服務名稱型探索的組態。如果您省略此區段,則不會使用服務名稱型探索。此區段可以包含下列欄位:

      • sd_service_name_pattern是用來指定要探索任ECS務之 Amazon 服務的模式。這是規則表達式。

      • sd_metrics_ports 列出了 Prometheus 指標的 containerPort。使用分號分隔多個 containerPorts

      • sd_container_name_pattern指定 Amazon ECS 任務容器名稱。這是規則表達式。

      • sd_metrics_path 指定了 Prometheus 指標路徑。如果您省略此項,代理程式會假設預設路徑 /metrics

      • sd_job_name 指定了 Prometheus 湊集任務名稱。如果您省略此欄位, CloudWatch 代理程式會使用 Prometheus 抓取設定中的工作名稱。

  • metric_declaration— 是以要產生之內嵌指標格式來指定日誌陣列的區段。根據預設, CloudWatch代理程式從中匯入的每個 Prometheus 來源都有metric_declaration區段。這些區段各包括下列欄位:

    • label_matcher 是一個規則表達式,會檢查 source_labels 中列出的標籤值。符合的量度會啟用以包含在傳送至的內嵌量度格式中 CloudWatch。

      如果您在 source_labels 中指定了多個標籤,我們建議您不要在 label_matcher 的規則表達式中使用 ^$ 字元。

    • source_labels 指定由 label_matcher 行檢查的標籤值。

    • label_separator 指定要在 label_matcher 行中使用的分隔符號 (如果指定多個 source_labels)。預設值為 ;。您可以在下面的範例中看到 label_matcher 行中使用此預設值。

    • metric_selectors是一個規則運算式,指定要收集並傳送至的測量結果 CloudWatch。

    • dimensions是要作為每個選取量度之 CloudWatch 維度使用的標籤清單。

請參閱以下 metric_declaration 範例。

"metric_declaration": [ { "source_labels":[ "Service", "Namespace"], "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system$", "dimensions":[ ["Service", "Namespace"] ], "metric_selectors":[ "^coredns_dns_request_type_count_total$" ] } ]

此範例會在符合下列條件時,設定內嵌指標格式區段,以作為日誌事件傳送:

  • Service 的數值包含 node-exporterkube-dns

  • Namespace 的值為 kube-system

  • Prometheus 指標 coredns_dns_request_type_count_total 包含 ServiceNamespace 標籤。

傳送的日誌事件包含下列反白顯示的區段:

{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"coredns_dns_request_type_count_total" } ], "Dimensions":[ [ "Namespace", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "Namespace":"kube-system", "Service":"kube-dns", "coredns_dns_request_type_count_total":2562, "eks_amazonaws_com_component":"kube-dns", "instance":"192.168.61.254:9153", "job":"kubernetes-service-endpoints", ... }