使用 Prometheus CloudWatch 导出器收集 AWS CloudWatch 指标

本文档介绍了如何使用开源 Prometheus CloudWatch 导出器 以及 Compute Engine 实例上运行的 Ops Agent,以收集 AWS CloudWatch 指标,并将其存储在 Google Cloud 项目中。

本文档适用于需要以下功能的开发者和系统管理员: 来收集 AWS CloudWatch 指标本文档介绍了如何设置 用于收集 AWS CloudWatch 指标的 Prometheus CloudWatch 导出器。

借助 Cloud Monitoring,您可以在与 Google Cloud 指标相同的上下文中查看 AWS 指标。例如,您可以创建一个信息中心 显示 Amazon EC2 实例的 CPU 利用率的图表 以及 Compute Engine 实例您还可以创建提醒 政策来监控 AWS 指标。如需了解详情,请参阅以下部分:

准备工作

如需使用 Prometheus CloudWatch 导出器收集 AWS CloudWatch 指标,您需要 需要以下内容:

  • 有权执行以下操作的 Google Cloud 项目:
    • 创建虚拟机
    • 将日志写入 Cloud Logging
    • 将指标写入 Cloud Monitoring
  • 拥有可供 用于提取指标的 Prometheus 导出器。 如需了解详情,请参阅运行 Prometheus 导出器

创建 Compute Engine 虚拟机

我们建议创建一个 Linux Compute Engine 虚拟机 用于运行 Ops Agent 和 Prometheus CloudWatch 导出器。此虚拟机充当 所有 AWS 指标的收集点

  1. 如需在创建好的可用区中创建一个名为 aws-exporter-test 的 Debian Linux 虚拟机, 指定,请运行以下命令:

    gcloud compute instances create \
      --image-project debian-cloud \
      --image-family debian-11 \
      --zone ZONE \
      aws-exporter-test
    

    按如下方式配置命令:

    • ZONE 替换为新虚拟机的可用区
    • 可选。将 aws-exporter-test 替换为虚拟机的其他名称。

    如需详细了解此命令,请查看 gcloud compute instances create 参考

  2. 访问您的虚拟机,以便安装 Prometheus CloudWatch 导出器和 您可以使用以下命令:

    gcloud compute ssh --zone ZONE  --project PROJECT_ID  aws-exporter-test
    

    按如下方式配置命令:

    • ZONE 替换为您在其中创建虚拟机的可用区
    • PROJECT_ID 替换为您的 Google Cloud 项目的 ID
    • 如果您创建了虚拟机,请将 aws-exporter-test 替换为 其他名称

    如需详细了解此命令,请查看 gcloud compute ssh 参考

设置 Prometheus CloudWatch 导出器

以下各部分介绍了下载、安装 并在 Compute Engine 虚拟机上配置 Prometheus CloudWatch 导出器。

下载 Prometheus 导出器和 JRE

如需运行 Prometheus CloudWatch Exporter,您需要下载该 Exporter 以及 Java 运行时环境 (JRE) 11 或更高版本。

  1. 如需下载包含 Prometheus CloudWatch Exporter 的 JAR 文件,请在 Compute Engine 实例上运行以下命令:

    curl -sSO https://github.com/prometheus/cloudwatch_exporter/releases/download/v0.15.1/cloudwatch_exporter-0.15.1-jar-with-dependencies.jar
    
  2. 如需安装 JRE,您可以使用如下命令:

    sudo apt install default-jre
    

配置 Prometheus 导出器

如需配置 Prometheus CloudWatch 导出器,您需要为要收集指标的 AWS 服务创建配置文件。如需了解一般信息,请参阅 Prometheus CloudWatch 导出器配置 文档

  • 迁移用户:如果要迁移现有的 AWS CloudWatch 并将指标发送到 Prometheus CloudWatch 导出器 在用于迁移的 Prometheus CloudWatch 导出器配置中。 这些配置文件旨在将现有指标复制为 但不会收集到所有可用指标 为 AWS 服务使用 Prometheus CloudWatch 导出器。

  • 新用户:如果您不迁移现有指标,我们建议您: 不使用迁移配置。请参阅 AWS CloudWatch 服务 文档 如何为其他服务定义导出器配置。您还可以 在 Prometheus CloudWatch 导出器中查找其他示例 GitHub 代码库

您可以将多项 AWS 服务的配置合并为一项 配置文件本文档中的示例假定您 配置文件名为 config.yml

运行 Prometheus 导出器

您必须先提供 包含凭据和授权的导出器 Prometheus CloudWatch 导出器使用 AWS Java, SDK,它提供了提供凭据的方式 使用以下环境变量:

  • AWS_ACCESS_KEY
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN(如果您使用的是临时凭据

如需详细了解如何向 SDK 提供凭据, 请参阅 AWS SDK for Java 2.x

您还必须具有使用 CloudWatch API 检索 您需要以下 AWS IAM CloudWatch 权限

  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricStatistics
  • cloudwatch:GetMetricData

若要使用 aws_tag_select 功能,还需要 tag:GetResources AWS IAM 权限。

如需详细了解如何授予对 AWS 服务的访问权限,请参阅 AWS Identity and Access Management

如需运行 Prometheus CloudWatch 导出器,请执行以下操作:

  1. 如需为导出程序提供凭据,请设置访问密钥环境变量:

    export AWS_ACCESS_KEY=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
    export AWS_SESSION_TOKEN=YOUR_SESSION_TOKEN
    

    YOUR_KEY 变量替换为您的访问密钥。 您只需设置 AWS_SESSION_TOKEN 环境变量 如果您使用的是临时凭据

  2. 如需测试配置,请启动导出器并加载配置 文件,请运行以下命令:

    java -jar cloudwatch_exporter-0.15.1-jar-with-dependencies.jar 9106 config.yml
    

    更改端口 (9106) 和配置文件 (config.yml) 值。

    如果您在导出器运行时修改 config.yml 文件, 那么您可以通过运行以下命令重新加载导出程序:

    curl -X POST localhost:9106/-/reload
    

    如需在生产环境中使用,您可以将导出器配置为在虚拟机重启时重启。例如,在 Debian 系统上 可以使用系统和服务管理器 systemd 来实现。

设置 Ops Agent

下面几部分将介绍如何安装配置,并启动 即 Ops Agent。这些部分提供了针对 Ops Agent,用于 Prometheus CloudWatch 导出器。 如需详细了解这些主题,请参阅 Ops Agent 概览

安装 Ops Agent

如需安装 Ops Agent,请使用以下命令下载并运行代理的安装脚本:

curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

配置 Ops Agent

如需配置 Ops Agent,您需要将配置元素添加到 代理的用户配置文件在 Linux 上,用户配置文件 为 /etc/google-cloud-ops-agent/config.yaml

将 Ops Agent 配置为从 Prometheus CloudWatch 导出器,您需要使用代理的 Prometheus 接收器。这个 文档介绍了 Ops Agent 的两种基本配置。 选择其中一个配置并将其添加到 用户配置文件:

sudo vim /etc/google-cloud-ops-agent/config.yaml

Ops Agent 的基本配置

以下配置为 Ops Agent 提供了最小配置。此配置会执行以下操作:

  • 创建一个名为 aws 且类型为 prometheus 的接收器。接收方为 配置为从 aws_exporter 作业抓取指标。通过 指定的端口必须与 Prometheus CloudWatch 导出器所在的端口一致 导出指标;请参阅运行 Prometheus 导出器

  • 创建名为 aws_pipeline 的流水线,该流水线使用 aws 指标接收器。

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

丢弃 JVM 指标的配置

以下配置会执行基本配置的所有操作 但它也添加了一项重新添加标签配置,该配置会导致 导出器生成的 JVM 指标。丢弃这些指标会导致 注入的指标数据,但可能会导致导出器出现更多问题 难以调试,因为您未获得导出器自己的指标:

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
            # Drop the exporter's own JVM metrics to reduce noise.
            metric_relabel_configs:
              - source_labels: [ __name__ ]
                regex: 'jvm_.*'
                action: drop
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

您可以为 Ops Agent 创建更复杂的配置。

重启 Ops Agent

如需将配置更改应用于 Ops Agent,您必须重启代理。

  1. 要重启代理,请在您的实例上运行以下命令:
    sudo service google-cloud-ops-agent restart
    
  2. 如需确认代理已重启,请运行以下命令并验证“Metrics Agent”和“Logging Agent”组件是否已启动:
    sudo systemctl status google-cloud-ops-agent"*"
    

在 Cloud Monitoring 中查看指标

在 Cloud Monitoring 中,您可以查询您的 AWS CloudWatch 指标, 像创建任何其他指标一样创建图表。通过 Metrics Explorer 界面,您可以使用 PromQL、Monitoring Query Language (MQL) 或查询构建器 界面。有关详情,请参阅使用 Metrics Explorer

如果您想保留已创建的图表,则可以将这些图表保存到 自定义信息中心如需了解详情,请参阅信息中心概览

下图显示了 AWS 虚拟机的 aws_ec2_cpuutilization_sum 指标:

该图表显示了使用 PromQL 提取 AWS VM 的 aws_ec2_cpuutilization_sum 统计信息的结果。

您可以使用 PromQL 查询 Cloud Monitoring 中的任何指标。对于 请参阅将 Cloud Monitoring 指标映射到 PromQL

您可以使用 PromQL 或使用 Cloud Monitoring 工具,例如 Monitoring Query Language (MQL)。时间 Prometheus 指标会注入到 Cloud Monitoring 中 使用标准的 OpenTelemetry 到 Prometheus 的转换 并映射到 Cloud Monitoring prometheus_target 受监控的资源类型。 转换包括以下更改:

  • 指标名称的前缀为字符串 prometheus.googleapis.com/
  • 指标名称中包含任何非字母数字字符,例如句点 (.) 已替换为下划线 (_)。
  • 指标名称的后缀是表示指标种类的字符串, 例如 /gauge/counter

使用以下命令查询 Prometheus aws_ec2_cpuutilization_sum 指标: MQL,请将该指标称为 prometheus.googleapis.com/aws_ec2_cpuutilization_sum/gauge和 指定 prometheus_target 受监控的资源类型:

fetch prometheus_target :: 'prometheus.googleapis.com/aws_ec2_cpuutilization_sum/gauge'

下图显示了 Prometheus aws_ec2_cpuutilization_sum 指标:

该图表显示了使用 MQL 提取 AWS 虚拟机的 aws_ec2_cpuutilization_sum 统计信息的结果。

针对指标行为的提醒

在 Cloud Monitoring 中,您可以创建[提醒政策][alert-intro]来监控 AWS CloudWatch 指标,并在指标值出现峰值、谷值或趋势时通知您。

监控多个区域

Prometheus CloudWatch 导出器的配置仅支持使用一个 区域。如果您需要监控多个区域, 我们建议您运行多个 Prometheus 导出器实例, 为您要监控的每个区域配置一个实例你可以 也可以将它们分布在多个虚拟机上在这种情况下,Prometheus 导出器 Docker 映像可能很有用。

您可以配置在 Compute Engine 虚拟机上运行的 Ops Agent 抓取多个 Prometheus 端点我们建议您 配置多个 Prometheus 导出器实例时, 使用不同的 job 为每项抓取配置命名,这样您就可以 以便在需要排查问题时区分导出器实例。

如需了解如何配置 Ops Agent 和 Prometheus 接收器,请参阅配置 Ops Agent

费用

Amazon 针对每个 CloudWatch API 请求或每个 CloudWatch 收费 您请求的指标;如需了解当前价格,请参阅 Amazon CloudWatch 价格。Prometheus CloudWatch 导出器 包含以下查询: 特征, 这会影响您的 Amazon 费用:

  • 使用 GetMetricStatistics 方法(默认)时,每个指标 需要一个 API 请求。每个请求可以包含多项统计信息。
  • 使用 aws_dimensions 时,导出器必须执行 API 请求 来确定要请求的指标维度请求的数量 与指标请求的数量相比,通常可以忽略不计。

Cloud Monitoring 通过 按样本数划分的 Prometheus 导出器 提取的内容如需了解当前价格,请参阅 Monitoring 价格 摘要

用于迁移的 Prometheus CloudWatch 导出器配置

本部分提供了一些配置,可尽可能复制 AWS 指标列表中记录的 AWS 服务指标。这些配置 文件是为要迁移到 旧版解决方案中的 Prometheus CloudWatch 导出器。如果您要设置 将 Prometheus CloudWatch 导出器作为新用户(而不是迁移用户), 使用这些配置就不必收集 Prometheus CloudWatch 导出器提供的指标。

如需查看 AWS CloudWatch 指标的示例配置文件,请展开一个 。