抓取其他 Prometheus 源并导入这些指标 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

抓取其他 Prometheus 源并导入这些指标

具有 Prometheus 监控的 CloudWatch 代理需要两个配置才能抓取 Prometheus 指标。其中一个用于 Prometheus 文档的 <scrape_config> 中记录的标准 Prometheus 配置。另一个用于 CloudWatch 代理配置。

对于 Amazon ECS 集群, Parameter Store 任务定义中的密钥将配置与 AWS Systems Manager Amazon ECS 的 集成:

  • 该密钥PROMETHEUS_CONFIG_CONTENT用于 Prometheus 抓取配置。

  • 该密钥CW_CONFIG_CONTENT用于 CloudWatch 代理配置。

要抓取其他 Prometheus 指标源并将这些指标导入 CloudWatch,请修改 Prometheus 抓取配置和 CloudWatch 代理配置,然后使用更新后的配置重新部署 代理。

VPC 安全组要求

Prometheus 工作负载的安全组的传入规则必须打开 Prometheus 端口到 CloudWatch 代理,以便按私有 IP 抓取 Prometheus 指标。

CloudWatch 代理的安全组的出口规则必须允许CloudWatch代理通过私有 IP 连接到 Prometheus 工作负载的端口。

Prometheus 抓取配置

CloudWatch 代理支持 Prometheus 文档的 <scrape_config> 中记录的标准 Prometheus 抓取配置。您可以编辑此部分以更新该文件中已有的配置,并添加其他 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。有关更多信息,请参阅采用 CloudWatch 嵌入式指标格式提取高基数日志并生成指标

来自 Amazon ECS 集群的日志事件存储在 /aws/ecs/containerinsights/cluster_name/prometheus 日志组。

每个抓取作业都包含在此日志组中的不同日志流中。

要添加新的抓取目标,请在 YAML 文件的 task_definition_list 部分下的 ecs_service_discovery 部分中添加一个新条目,然后重新启动代理。有关此过程的示例,请参阅 添加新的 Prometheus 抓取目标的教程:Prometheus API 服务器指标

CloudWatchPrometheus 的 代理配置

代理CloudWatch配置文件在 下有一个prometheus用于 Prometheus 抓取配置的 metrics_collected 部分。它包括以下配置选项:

  • cluster_name— 指定要在日志事件中作为标签添加的集群名称。此字段为可选项。如果省略它, 代理可以检测Amazon ECS集群名称。

  • log_group_name— 指定已抓取的 Prometheus 指标的日志组名称。此字段为可选项。如果省略它, CloudWatch 将使用 /aws/ecs/containerinsights/cluster_name适用于 集群中的日志的Amazon ECS /prometheus。

  • prometheus_config_path— 指定 Prometheus 抓取配置文件路径。如果此字段的值以 Prometheus 抓取配置文件内容开头env:,则将从容器的 环境变量中检索。请勿更改此字段。

  • ecs_service_discovery— 是指定 Amazon ECS Prometheus 目标自动发现函数的配置的部分。支持两种模式来发现 Prometheus 目标:基于容器的 Docker 标签的发现或基于Amazon ECS任务定义 ARN 正则表达式的发现。您可以将这两种模式一起使用CloudWatch,代理将根据 {private_ip}:{port}/{metrics_path} 取消发现的目标的重复复制。

    部分ecs_service_discovery可以包含以下字段:

    • sd_frequency 是发现 Prometheus 导出程序的频率。指定数字和单位后缀。例如, 1m 表示每分钟一次, 表示每 30 秒30s一次。有效的单位后缀为 nsusmssmh

      此字段为可选项。默认值为 60 秒(1 分钟)。

    • sd_target_cluster 是自动发现的目标Amazon ECS集群名称。此字段为可选项。默认值为在其中安装 Amazon ECS 代理的CloudWatch集群的名称。

    • sd_cluster_region 是目标Amazon ECS集群的区域。此字段为可选项。默认值为安装了 Amazon ECS 代理的 CloudWatch 集群的区域。

    • 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 是指定 Prometheus 指标路径的容器的 Docker 标签名称。默认值为 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— 是指定要生成的采用嵌入式指标格式的日志数组的部分。默认情况下,metric_declaration 代理从中进行导入的每个 Prometheus 源都有 CloudWatch 部分。这些部分各包括以下字段:

    • label_matcher 是一个正则表达式,用于检查 中列出的标签的值source_labels。启用匹配的指标以包含在发送到 的嵌入式指标格式中CloudWatch。

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