本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
湊集其他 Prometheus 來源並匯入這些指標
具有 Prometheus 監控的 CloudWatch 代理程式需要兩種組態來湊集 Prometheus 指標。其中一個是 Prometheus 文件的 <scrape_config>
對於 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>
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
一次。有效的單位尾碼為ns
、us
、ms
、s
、m
以及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-exporter
或kube-dns
。 -
Namespace
的值為kube-system
。 -
Prometheus 指標
coredns_dns_request_type_count_total
包含Service
和Namespace
標籤。
傳送的日誌事件包含下列反白顯示的區段:
{ "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", ... }