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

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

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

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

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

  • 秘密 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 文件的 <scrape_config> 中所述。您可以編輯此區段來更新已存在於此檔案中的組態,並新增其他 Prometheus 湊集目標。根據預設,範例組態檔案包含下列全域組態行:

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

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

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

Prometheus 湊集任務

CloudWatch 代理程式 YAML 檔案已設定一些預設的湊集任務。例如,在 Amazon ECS 的 YAML 檔案中,例如 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/ecs/containerinsights/cluster_name/prometheus 日誌群組。

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

若要新增湊集目標,您可在 YAML 檔案的 ecs_service_discovery 區段下的 task_definition_list 區段中新增條目,然後重新啟動代理程式。如需此程序的範例,請參閱新增 Prometheus 湊集目標的教學課程:Prometheus API 伺服器指標

Prometheus 的 CloudWatch 代理程式組態

CloudWatch 代理程式組態檔案在 metrics_collected 下有一個 prometheus 區段可用於 Prometheus 湊集組態。其包含下列組態選項:

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

  • log_group_name— 為湊集的 Prometheus 指標指定日誌檔案群組名稱。此欄位為選用欄位。如果您省略此值,CloudWatch 會將 /aws/ecs/containerinsights/cluster_name/prometheus 用於來自 Amazon ECS 叢集的日誌。

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

  • ecs_service_discovery— 是指定 Amazon ECS Prometheus 目標自動探索功能組態的區段。支援兩種模式來探索 Prometheus 目標:根據容器的 Docker 標籤進行探索,或根據 Amazon ECS 任務定義 ARN 規則表達式進行探索。您可以同時使用這兩種模式,CloudWatch 代理程式會根據以下情況刪除重複的已搜索到的目標:{private_ip}:{port}/{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 列出了 Prometheus 指標的 containerPort。使用分號分隔 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 是用來指定要探索任務的 Amazon ECS 服務的模式。這是規則表達式。

      • 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", ... }