菜单
文档面包屑箭头 Grafana Alloy面包屑箭头 参考面包屑箭头 组件面包屑箭头 prometheus面包屑箭头 prometheus.exporter.cloudwatch
正式发布 (GA) 开源

prometheus.exporter.cloudwatch

prometheus.exporter.cloudwatch 组件嵌入了 yet-another-cloudwatch-exporter,让您能够以 Prometheus 兼容格式收集 Amazon CloudWatch 指标

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

认证

Alloy 必须运行在可以访问 AWS 的环境中。导出器使用 AWS SDK for Go,并通过 AWS 默认凭证链提供认证。无论使用何种方法获取凭证,导出器工作都需要一些权限。

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

Transit Gateway 附件(tgwa)指标需要以下 IAM 权限才能工作。

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

发现带有标签的 API Gateway REST API 需要以下 IAM 权限

text
"apigateway:GET"

发现带有标签的 Database Migration Service (DMS) 复制实例和任务需要以下 IAM 权限

text
"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"
        }
    }
}

参数

您可以将以下参数与 prometheus.exporter.cloudwatch 一起使用

名称类型描述默认值必需
sts_regionstring调用 STS 检索账户信息时使用的 AWS 区域。
aws_sdk_version_v2bool使用 AWS SDK 版本 2。false
fips_disabledbool禁用 FIPS 端点的使用。在美国地区以外运行时设置为 'true'。true
debugbool在 CloudWatch exporter 内部启用调试日志记录。false
discovery_exported_tagsmap(list(string))每个服务(键)要导出到所有指标的标签列表(值)。{}

如果您在 discovery_exported_tags 参数中定义 ["name", "type"]"AWS/EC2" 下,它会将 name 和 type 标签及其值作为所有指标中的标签导出。这会影响所有发现作业。

您可以将以下块与 prometheus.exporter.cloudwatch 一起使用

名称描述必需
discovery配置发现作业。您可以配置多个作业。否*
discovery > role配置作业应承担的 IAM 角色来抓取指标。默认为 Alloy 运行环境中配置的角色。
discovery > metric配置作业应抓取的指标列表。您可以在一个作业中定义多个指标。
static配置静态作业。您可以配置多个作业。否*
static > role配置作业应承担的 IAM 角色来抓取指标。默认为 Alloy 运行环境中配置的角色。
static > metric配置作业应抓取的指标列表。您可以在一个作业中定义多个指标。
custom_namespace配置自定义命名空间作业。您可以配置多个作业。否*
custom_namespace > role配置作业应承担的 IAM 角色来抓取指标。默认为 Alloy 运行环境中配置的角色。
custom_namespace > metric配置作业应抓取的指标列表。您可以在一个作业中定义多个指标。
decoupled_scraping配置解耦抓取功能,以按计划检索指标并返回缓存的指标。

> 符号表示更深的嵌套级别。例如,discovery > role 指的是在 discovery 块中定义的 role 块。

注意

staticdiscoverycustom_namespace 块标记为非必需,但您必须至少配置一个 staticdiscoverycustom_namespace 作业。

discovery

discovery 块允许组件仅使用 AWS 服务和该服务/命名空间下的指标列表来抓取 CloudWatch 指标。Alloy 会找到指定服务中的 AWS 资源,抓取指标,适当地为其添加标签,然后将它们导出到 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"
        }
    }
}

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

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

static

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 集的指标。

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

抓取单个指标时,必须指定所有维度,如上例所示。例如,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 块多次,以从不同的命名空间抓取指标。

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

metric

必需

表示要抓取的 AWS 指标。

可以多次指定 metric 块以定义多个目标指标。有关详细的指标信息,请参阅 Amazon CloudWatch 文档中的查看可用指标主题。

名称类型描述默认值必需
namestring指标名称。
statisticslist(string)要抓取的统计量列表。例如,"Minimum""Maximum" 等。
periodduration请参阅下面的period部分。
lengthduration请参阅下面的period部分。根据 period 计算。有关详细信息,请参阅period
nil_to_zerobool当为 true 时,NaN 指标值将被转换为 0。父级 staticdiscovery 块中 nil_to_zero 的值。如果在父级块中未设置,则为 true
add_cloudwatch_timestampbool当为 true 时,使用 CloudWatch 中的时间戳而不是抓取时间。false

periodlength

period 主要控制用于聚合从 CloudWatch 收集的指标的时间桶宽度。length 控制每次 Alloy 抓取时 CloudWatch 指标回溯的时间。如果同时配置了这两个设置,调用 CloudWatch API 时的时间参数如下

An example of a CloudWatch period and length time model

如果同一静态作业或发现作业下的多个指标具有不同的 periodlength,则配置所有 period 的最小值和所有 length 的最大值。

另一方面,如果未配置 length,则 period 和 length 设置均根据必需的 period 配置属性计算得出。

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

An example of a CloudWatch single period and time model

另一方面,如果单个作业下配置了具有不同 period 的指标,则情况不同。首先,计算两个变量来聚合所有 period:length,取所有 period 的最大值;以及新的 period 值,取所有 period 的最小值。然后,请求 CloudWatch API 获取从 now - lengthnow 的指标,将每个指标按 period 秒的时间聚合为样本。对于每个指标,将最新的样本导出到 CloudWatch。

An example of a CloudWatch multiple period and time model

role

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

当使用一对凭证从不同的 AWS 账户抓取指标时,多个角色会很有用。在这种情况下,为 Alloy 配置不同的角色,使其在调用 AWS API 之前承担该角色。因此,系统中配置的凭证需要具备 asumir 目标角色所需的权限。有关如何配置此功能的更多信息,请参阅 AWS IAM 文档中的授予用户切换角色的权限

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

decoupled_scraping

decoupled_scraping 块配置一个可选功能,用于按计划的间隔在后台抓取 CloudWatch 指标。启用此功能后,CloudWatch 指标会按计划的间隔异步收集,而不是在抓取 CloudWatch 组件时同步收集。

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

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

导出字段

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

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

例如,可以将 targets 传递给 discovery.relabel 组件来重写目标的标签集,或传递给 prometheus.scrape 组件来收集暴露的指标。

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

组件健康状态

只有在配置无效时,prometheus.exporter.cloudwatch 才会被报告为不健康。在这种情况下,导出字段会保留其上一个健康状态值。

调试信息

prometheus.exporter.cloudwatch 不会暴露任何组件特定的调试信息。

调试指标

prometheus.exporter.cloudwatch 不会暴露任何组件特定的调试指标。

示例

有关详细示例,请参阅发现作业静态作业部分。

发现作业中支持的服务

cloudwatch_exporter 发现作业支持以下 AWS 服务。配置发现作业时,请确保每个 discovery_jobtype 字段与所需的作业命名空间匹配。

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

兼容组件

prometheus.exporter.cloudwatch 具有可由以下组件使用的导出项

  • 使用 Targets 的组件

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关详细信息,请参阅链接文档。