菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow prometheusbreadcrumb arrow prometheus.exporter.cloudwatch
开源

prometheus.exporter.cloudwatch

prometheus.exporter.cloudwatch 组件内嵌了 yet-another-cloudwatch-exporter,允许您收集 Amazon CloudWatch 指标,将其转换为 Prometheus 兼容格式并远程写入。

此组件允许您通过一组我们称为 作业 的配置来抓取 CloudWatch 指标。有两种类型的作业:发现静态

身份验证

Alloy 必须在具有访问 AWS 的环境中运行。导出器使用 AWS SDK for Go 并通过 AWS 的默认凭证链 提供身份验证。无论使用哪种方法获取凭证,导出器都需要一些权限才能运行。

"tag:GetResources",
"cloudwatch:GetMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics"

以下 IAM 权限对于使 Transit Gateway 附加 (tgwa) 指标正常工作所必需。

"ec2:DescribeTags",
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ec2:DescribeTransitGateway*"

以下 IAM 权限对于发现标记的 API Gateway REST API 所必需。

"apigateway:GET"

以下 IAM 权限对于发现标记的 Database Migration Service (DMS) 复制实例和任务所必需。

"dms:DescribeReplicationInstances",
"dms:DescribeReplicationTasks"

要使用所有集成功能,请使用以下 AWS IAM 策略

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1674249227793",
      "Action": [
        "tag:GetResources",
        "cloudwatch:GetMetricData",
        "cloudwatch:GetMetricStatistics",
        "cloudwatch:ListMetrics",
        "ec2:DescribeTags",
        "ec2:DescribeInstances",
        "ec2:DescribeRegions",
        "ec2:DescribeTransitGateway*",
        "apigateway:GET",
        "dms:DescribeReplicationInstances",
        "dms:DescribeReplicationTasks"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

用法

alloy
prometheus.exporter.cloudwatch "queues" {
    sts_region      = "us-east-2"
    aws_sdk_version_v2 = false
    discovery {
        type        = "AWS/SQS"
        regions     = ["us-east-2"]
        search_tags = {
            "scrape" = "true",
        }

        metric {
            name       = "NumberOfMessagesSent"
            statistics = ["Sum", "Average"]
            period     = "1m"
        }

        metric {
            name       = "NumberOfMessagesReceived"
            statistics = ["Sum", "Average"]
            period     = "1m"
        }
    }
}

参数

您可以使用以下参数来配置导出器的行为。省略的字段将使用默认值。

名称类型描述默认值必需
sts_regionstring在调用 STS 获取账户信息时使用的 AWS 区域。
aws_sdk_version_v2布尔值使用 AWS SDK 版本 2。no
fips_disabled布尔值禁用 FIPS 端点。在美国区域外运行时设置为 'true'。no
debug布尔值在 CloudWatch 导出器内部启用调试日志。no
discovery_exported_tagsmap(list(string))每个服务(键)的标签(值)列表,要在所有指标中导出。例如,在 "AWS/EC2" 下定义 ["name", "type"] 将导出名称和类型标签及其值作为所有指标中的标签。影响所有发现作业。{}no

您可以在 prometheus.exporter.cloudwatch 中使用以下块来配置收集器特定的选项

层次结构名称描述必需
发现发现配置发现作业。可以配置多个作业。no*
discovery > rolerole配置作业应该假设的 IAM 角色,以抓取指标。默认为在 Alloy 运行的环境中配置的角色。no
discovery > metricmetric配置作业应该抓取的指标列表。一个作业中可以定义多个指标。
静态静态配置静态作业。可以配置多个作业。no*
static > rolerole配置作业应该假设的 IAM 角色,以抓取指标。默认为在 Alloy 运行的环境中配置的角色。no
static > metricmetric配置作业应该抓取的指标列表。一个作业中可以定义多个指标。
custom_namespacecustom_namespace配置自定义命名空间作业。可以配置多个作业。no*
custom_namespace > rolerole配置作业应该假设的 IAM 角色,以抓取指标。默认为在 Alloy 运行的环境中配置的角色。no
custom_namespace > metricmetric配置作业应该抓取的指标列表。一个作业中可以定义多个指标。
decoupled_scrapingdecoupled_scraping配置解耦抓取功能,以按计划检索指标并返回缓存的指标。no

注意

虽然将 staticdiscoverycustom_namespace 块标记为非必需,但您必须至少配置一个静态、发现或自定义命名空间作业。

discovery 块

discovery 块允许组件仅使用 AWS 服务及其下的指标列表抓取 CloudWatch 指标。Alloy 将在指定的服务中找到要抓取这些指标的资源,对其进行适当的标记,并将它们导出到 Prometheus。例如,如果我们想从所有 AWS EC2 实例中抓取 CPU 利用率和网络流量指标

alloy
prometheus.exporter.cloudwatch "discover_instances" {
    sts_region = "us-east-2"

    discovery {
        type    = "AWS/EC2"
        regions = ["us-east-2"]

        metric {
            name       = "CPUUtilization"
            statistics = ["Average"]
            period     = "5m"
        }

        metric {
            name       = "NetworkPacketsIn"
            statistics = ["Average"]
            period     = "5m"
        }
    }
}

您可以为不同的服务或使用不同的 search_tags 配置一个或多个 discovery 块以抓取指标。

名称类型描述默认值必需
regionslist(string)AWS 区域列表。
typestringCloudWatch 服务别名(如 "alb""ec2" 等)或命名空间名称(如 "AWS/EC2""AWS/S3" 等)。有关完整列表,请参阅 支持的服务
custom_tagsmap(string)要添加为键/值对的列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式: custom_tag_{key}{}no
recently_active_only布尔值仅返回在过去 3 小时内活跃的指标。no
search_tagsmap(string)用于标签过滤的键/值对列表(必须全部匹配)。值可以是正则表达式。{}no
dimension_name_requirementslist(string)要查询的指标维度列表。在查询指标值之前,总指标列表将只过滤包含此维度列表的指标。空或未定义的列表会导致包含所有维度组合。{}no
nil_to_zero布尔值当设置为 true 时,NaN 指标值将被转换为 0。单个指标可以在 指标 块中覆盖此值。no

静态块

static 块配置组件以抓取特定的一组 CloudWatch 指标。指标需要使用以下规范完全限定

  1. namespace:例如,AWS/EC2AWS/EBS,如果是自定义指标则为 CoolApp 等。
  2. dimensions:CloudWatch 通过一组维度来识别指标,这些维度基本上是标签/值对。例如,所有 AWS/EC2 指标都通过 InstanceId 维度和标识符本身来识别。
  3. metric:指标名称和统计信息。

例如,如果您想在发现示例中抓取相同的指标,但针对特定的 AWS EC2 实例

alloy
prometheus.exporter.cloudwatch "static_instances" {
    sts_region = "us-east-2"

    static "instances" {
        regions    = ["us-east-2"]
        namespace  = "AWS/EC2"
        dimensions = {
            "InstanceId" = "i01u29u12ue1u2c",
        }

        metric {
            name       = "CPUUsage"
            statistics = ["Sum", "Average"]
            period     = "1m"
        }
    }
}

如上所示,static 块必须指定一个标签,这将在导出的指标中转换为 name 标签。

alloy
static "LABEL" {
    regions    = ["us-east-2"]
    namespace  = "AWS/EC2"
    // ...
}

您可以根据需要配置一个或多个 static 块以抓取具有不同 dimensions 集的指标。

名称类型描述默认值必需
regionslist(string)AWS 区域列表。
namespacestringCloudWatch 指标命名空间。
dimensionsmap(string)CloudWatch 指标维度,作为名称/值对的列表。必须在作业中唯一地定义所有指标。
custom_tagsmap(string)要添加为键/值对的列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式: custom_tag_{key}{}no
nil_to_zero布尔值当设置为 true 时,NaN 指标值将被转换为 0。单个指标可以在 指标 块中覆盖此值。no

抓取单个指标(如上例所示)时,必须指定所有维度。例如,AWS/Logs 指标需要指定 ResourceServiceClassType 维度。同样适用于 CloudWatch 自定义指标,所有附加到指标并在 CloudWatch 中保存的维度都是必需的。

custom_namespace 块

custom_namespace 块允许组件使用命名空间名称和该命名空间下的指标列表来抓取 CloudWatch 指标。例如

alloy
prometheus.exporter.cloudwatch "discover_instances" {
    sts_region = "eu-west-1"

    custom_namespace "customEC2Metrics" {
        namespace = "CustomEC2Metrics"
        regions   = ["us-east-1"]

        metric {
            name       = "cpu_usage_idle"
            statistics = ["Average"]
            period     = "5m"
        }

        metric {
            name       = "disk_free"
            statistics = ["Average"]
            period     = "5m"
        }
    }
}

如果需要从不同的命名空间抓取指标,则可以配置多个 custom_namespace 块。

名称类型描述默认值必需
regionslist(string)AWS 区域列表。
namespacestringCloudWatch 指标命名空间。
recently_active_only布尔值仅返回在过去 3 小时内活跃的指标。no
custom_tagsmap(string)要添加为键/值对的列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式: custom_tag_{key}{}no
dimension_name_requirementslist(string)要查询的指标维度列表。在查询指标值之前,总指标列表将只过滤包含此维度列表的指标。空或未定义的列表会导致包含所有维度组合。{}no
nil_to_zero布尔值当设置为 true 时,NaN 指标值将被转换为 0。单个指标可以在 指标 块中覆盖此值。no

metric 块

表示要抓取的 AWS 指标。要查看可用的指标,AWS 并不保留一个包含所有可用指标的文档页面。请参考 本指南 了解如何探索指标,以便轻松选择所需的指标。

名称类型描述默认值必需
namestring指标名称。
statisticslist(string)要抓取的统计信息列表。例如,"Minimum""Maximum" 等。
period持续时间请参阅下面的 周期和长度 部分。
length持续时间请参阅下面的 周期和长度 部分。根据 period 计算。请参阅 周期和长度 了解详细信息。no
nil_to_zero布尔值当设置为 true 时,NaN 指标值将被转换为 0。静态发现 块中 nil_to_zero 的值。如果未在父块中设置,则为 trueno

周期和长度

period 主要控制从 CloudWatch 收集的指标所使用的时桶宽度。length 控制每次 Alloy 抓取时考虑 CloudWatch 指标的时间跨度。如果配置了这两个设置,调用 CloudWatch API 时的时参数如下所示

An example of a CloudWatch period and length time model

如上所述,如果跨同一静态或发现作业下的多个指标,不同的 period 和/或 length,则配置所有周期中的最小值和所有长度中的最大值。

另一方面,如果没有配置 length,则将根据所需的 period 配置属性计算周期和长度设置。

如果作业(发现或静态)中的所有指标都配置了相同的 period 值,CloudWatch API 将请求从抓取时间到 period 秒前的指标。这些值将导出到 Prometheus。

An example of a CloudWatch single period and time model

另一方面,如果在一个单个作业下配置了不同周期的指标,则其工作方式不同。首先,通过聚合所有周期计算两个变量:length,取所有周期的最大值,以及新的周期值,取所有周期的最小值。然后,将请求CloudWatch API获取从now - lengthnow的指标,每个周期秒聚合一次。对于每个指标,最新的样本将被导出到CloudWatch。

An example of a CloudWatch multiple period and time model

角色块

表示一个AWS IAM 角色。如果省略,将使用环境中配置的凭证对应的AWS角色。

在单个凭证对下抓取来自不同AWS账户的指标时,多个角色可能会有用。在这种情况下,在调用AWS API之前,为Alloy配置了一个不同的角色。因此,系统中配置的凭证需要假设目标角色的权限。有关如何配置此内容的更多信息,请参阅AWS IAM文档中的授予用户切换角色的权限

名称类型描述默认值必需
role_arnstring导出器应假设执行AWS API调用所需的AWS IAM角色ARN。
external_idstring当调用STS AssumeRole API时使用的外部ID。有关更多信息,请参阅IAM 用户指南""no

decoupled_scraping块

配置了一个可选功能,该功能在计划的时间间隔内后台抓取CloudWatch指标。当启用此功能时,CloudWatch指标将在计划的时间间隔异步收集,而不是在抓取CloudWatch组件时同步收集。

解耦抓取功能减少了发送给AWS的API请求的数量。此功能还可以防止收集大量CloudWatch指标时的组件抓取超时。

名称类型描述默认值必需
enabled布尔值控制是否启用解耦抓取功能no
scrape_intervalstring控制异步收集新CloudWatch指标的频率5mno

导出字段

以下字段被导出,并可以被其他组件引用。

名称类型描述
targetslist(map(string))可以用来收集导出器指标的目标。

例如,targets可以传递给一个discovery.relabel组件来重写目标的标签集,或者传递给一个收集公开指标的prometheus.scrape组件。

导出的目标使用由run命令指定的配置的内存流量地址。

组件健康

prometheus.exporter.cloudwatch只有在给定无效配置的情况下才报告为不健康。在这些情况下,导出字段保留其最后健康的值。

调试信息

prometheus.exporter.cloudwatch不公开任何特定于组件的调试信息。

调试指标

prometheus.exporter.cloudwatch不公开任何特定于组件的调试指标。

示例

请参阅每个发现静态部分下描述的示例。

发现作业中支持的服务

以下是在cloudwatch_exporter发现作业中支持AWS服务列表。配置发现作业时,每个discovery_jobtype字段必须与所需的作业命名空间匹配。

  • 命名空间:CWAgent
  • 命名空间:AWS/Usage
  • 命名空间:AWS/CertificateManager
  • 命名空间:AWS/ACMPrivateCA
  • 命名空间:AmazonMWAA
  • 命名空间:AWS/MWAA
  • 命名空间:AWS/ApplicationELB
  • 命名空间:AWS/AppStream
  • 命名空间:AWS/Backup
  • 命名空间:AWS/ApiGateway
  • 命名空间:AWS/AmazonMQ
  • 命名空间:AWS/AppRunner
  • 命名空间:AWS/AppSync
  • 命名空间:AWS/Athena
  • 命名空间:AWS/AutoScaling
  • 命名空间:AWS/ElasticBeanstalk
  • 命名空间:AWS/Billing
  • 命名空间:AWS/Cassandra
  • 命名空间:AWS/CloudFront
  • 命名空间:AWS/Cognito
  • 命名空间:AWS/DataSync
  • 命名空间:AWS/DMS
  • 命名空间:AWS/DDoSProtection
  • 命名空间:AWS/DocDB
  • 命名空间:AWS/DX
  • 命名空间:AWS/DynamoDB
  • 命名空间:AWS/EBS
  • 命名空间:AWS/ElastiCache
  • 命名空间:AWS/MemoryDB
  • 命名空间:AWS/EC2
  • 命名空间:AWS/EC2Spot
  • 命名空间:AWS/EC2CapacityReservations
  • 命名空间:AWS/ECS
  • 命名空间:ECS/ContainerInsights
  • 命名空间:AWS/EFS
  • 命名空间:AWS/ELB
  • 命名空间:AWS/ElasticMapReduce
  • 命名空间:AWS/EMRServerless
  • 命名空间:AWS/ES
  • 命名空间:AWS/Firehose
  • 命名空间:AWS/FSx
  • 命名空间:AWS/GameLift
  • 命名空间:AWS/GatewayELB
  • 命名空间:AWS/GlobalAccelerator
  • 命名空间:Glue
  • 命名空间:AWS/IoT
  • 命名空间:AWS/Kafka
  • 命名空间:AWS/KafkaConnect
  • 命名空间:AWS/Kinesis
  • 命名空间:AWS/KinesisAnalytics
  • 命名空间:AWS/KMS
  • 命名空间:AWS/Lambda
  • 命名空间:AWS/Logs
  • 命名空间:AWS/MediaConnect
  • 命名空间:AWS/MediaConvert
  • 命名空间:AWS/MediaPackage
  • 命名空间:AWS/MediaLive
  • 命名空间:AWS/MediaTailor
  • 命名空间:AWS/Neptune
  • 命名空间:AWS/NetworkFirewall
  • 命名空间:AWS/NATGateway
  • 命名空间:AWS/NetworkELB
  • 命名空间:AWS/PrivateLinkEndpoints
  • 命名空间:AWS/PrivateLinkServices
  • 命名空间:AWS/Prometheus
  • 命名空间:AWS/QLDB
  • 命名空间:AWS/RDS
  • 命名空间:AWS/Redshift
  • 命名空间:AWS/Route53Resolver
  • 命名空间:AWS/Route53
  • 命名空间:AWS/RUM
  • 命名空间:AWS/S3
  • 命名空间:AWS/SecretsManager
  • 命名空间:AWS/SES
  • 命名空间:AWS/States
  • 命名空间:AWS/SNS
  • 命名空间:AWS/SQS
  • 命名空间:AWS/StorageGateway
  • 命名空间:AWS/TransitGateway
  • 命名空间:AWS/TrustedAdvisor
  • 命名空间:AWS/VPN
  • 命名空间:AWS/ClientVPN
  • 命名空间:AWS/WAFV2
  • 命名空间:AWS/WorkSpaces
  • 命名空间:AWS/AOSS
  • 命名空间:AWS/SageMaker
  • 命名空间:/aws/sagemaker/Endpoints
  • 命名空间:/aws/sagemaker/TrainingJobs
  • 命名空间:/aws/sagemaker/ProcessingJobs
  • 命名空间:/aws/sagemaker/TransformJobs
  • 命名空间:/aws/sagemaker/InferenceRecommendationsJobs
  • 命名空间:AWS/Sagemaker/ModelBuildingPipeline
  • 命名空间:AWS/IPAM
  • 命名空间:AWS/Bedrock
  • 命名空间:AWS/Events

兼容组件

prometheus.exporter.cloudwatch具有以下可以由以下组件消费的导出

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。请参阅链接文档以获取更多详细信息。