菜单
文档面包屑箭头 Grafana Alloy面包屑箭头 参考面包屑箭头 组件面包屑箭头 prometheus面包屑箭头 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"

    discovery {
        type        = "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_region字符串调用 STS 获取帐户信息时使用的 AWS 区域。
fips_disabled布尔值禁用 FIPS 端点。在美国以外的区域运行时,设置为“true”。true
debug布尔值启用 CloudWatch 导出程序内部的调试日志。false
discovery_exported_tagsmap(list(string))每个服务(键)要导出的标签(值)列表,用于所有指标。例如,在 "AWS/EC2" 下定义 ["name", "type"] 将导出名称和类型标签及其值作为所有指标中的标签。影响所有发现作业。{}

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

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

注意

staticdiscovery 块标记为非必需,但您必须配置至少一个静态或发现作业。

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 区域列表。
type字符串CloudWatch 服务别名 ("alb""ec2" 等) 或命名空间名称 ("AWS/EC2""AWS/S3" 等)。有关完整列表,请参阅 支持的服务
custom_tagsmap(string)要添加为键/值对列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key}{}
search_tagsmap(string)用于标签过滤的键/值对列表(所有键/值对都必须匹配)。值可以是正则表达式。{}
dimension_name_requirementslist(string)要查询的指标维度的列表。在查询指标值之前,将过滤指标的完整列表,使其仅包含完全包含此维度列表的指标。空列表或未定义的列表会导致包含所有维度组合。{}
nil_to_zero布尔值true 时,NaN 指标值将转换为 0。各个指标可以在 指标 块中覆盖此值。true

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

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

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

metric 块

表示要抓取的 AWS 指标。要查看可用的指标,AWS 没有一个包含所有可用指标的文档页面。请按照 本指南了解如何浏览指标,以便轻松选择所需的指标。

名称类型描述默认值必需
name字符串指标名称。
statisticslist(string)要抓取的统计信息列表。例如,"Minimum""Maximum" 等。
period持续时间请参阅下面的 周期 部分。
length持续时间请参阅下面的 周期 部分。根据 period 计算得出。有关详细信息,请参阅 周期
nil_to_zero布尔值true 时,NaN 指标值将转换为 0。staticdiscovery 块中 nil_to_zero 的值。如果在父块中未设置,则为 true

周期和长度

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

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

An example of a CloudWatch multiple period and time model

role 块

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

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

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

decoupled_scraping 块

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

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

名称类型描述默认值必需
enabled布尔值控制是否启用分离式抓取功能。false
scrape_interval字符串控制异步收集新 CloudWatch 指标的频率。5m

导出字段

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

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

例如,targets 可以传递给discovery.relabel组件以重写目标的标签集,也可以传递给收集导出指标的prometheus.scrape组件。

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

组件健康状况

仅当prometheus.exporter.cloudwatch给出无效配置时,才会报告其不健康。在这些情况下,导出字段将保留其最后一次健康值。

调试信息

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

调试指标

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

示例

请参阅每个discoverystatic部分中描述的示例。

发现作业中支持的服务

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

  • 命名空间:CWAgent 或别名:cwagent
  • 命名空间:AWS/Usage 或别名:usage
  • 命名空间:AWS/CertificateManager 或别名:acm
  • 命名空间:AWS/ACMPrivateCA 或别名:acm-pca
  • 命名空间:AmazonMWAA 或别名:airflow
  • 命名空间:AWS/MWAA 或别名:mwaa
  • 命名空间:AWS/ApplicationELB 或别名:alb
  • 命名空间:AWS/AppStream 或别名:appstream
  • 命名空间:AWS/Backup 或别名:backup
  • 命名空间:AWS/ApiGateway 或别名:apigateway
  • 命名空间:AWS/AmazonMQ 或别名:mq
  • 命名空间:AWS/AppSync 或别名:appsync
  • 命名空间:AWS/Athena 或别名:athena
  • 命名空间:AWS/AutoScaling 或别名:asg
  • 命名空间:AWS/ElasticBeanstalk 或别名:beanstalk
  • 命名空间:AWS/Billing 或别名:billing
  • 命名空间:AWS/Cassandra 或别名:cassandra
  • 命名空间:AWS/CloudFront 或别名:cloudfront
  • 命名空间:AWS/Cognito 或别名:cognito-idp
  • 命名空间:AWS/DMS 或别名:dms
  • 命名空间:AWS/DDoSProtection 或别名:shield
  • 命名空间:AWS/DocDB 或别名:docdb
  • 命名空间:AWS/DX 或别名:dx
  • 命名空间:AWS/DynamoDB 或别名:dynamodb
  • 命名空间:AWS/EBS 或别名:ebs
  • 命名空间:AWS/ElastiCache 或别名:ec
  • 命名空间:AWS/MemoryDB 或别名:memorydb
  • 命名空间:AWS/EC2 或别名:ec2
  • 命名空间:AWS/EC2Spot 或别名:ec2Spot
  • 命名空间:AWS/ECS 或别名:ecs-svc
  • 命名空间:ECS/ContainerInsights 或别名:ecs-containerinsights
  • 命名空间:AWS/EFS 或别名:efs
  • 命名空间:AWS/ELB 或别名:elb
  • 命名空间:AWS/ElasticMapReduce 或别名:emr
  • 命名空间:AWS/EMRServerless 或别名:emr-serverless
  • 命名空间:AWS/ES 或别名:es
  • 命名空间:AWS/Firehose 或别名:firehose
  • 命名空间:AWS/FSx 或别名:fsx
  • 命名空间:AWS/GameLift 或别名:gamelift
  • 命名空间:AWS/GlobalAccelerator 或别名:ga
  • 命名空间:Glue 或别名:glue
  • 命名空间:AWS/IoT 或别名:iot
  • 命名空间:AWS/Kafka 或别名:kafka
  • 命名空间:AWS/KafkaConnect 或别名:kafkaconnect
  • 命名空间:AWS/Kinesis 或别名:kinesis
  • 命名空间:AWS/KinesisAnalytics 或别名:kinesis-analytics
  • 命名空间:AWS/Lambda 或别名:lambda
  • 命名空间:AWS/MediaConnect 或别名:mediaconnect
  • 命名空间:AWS/MediaConvert 或别名:mediaconvert
  • 命名空间:AWS/MediaLive 或别名:medialive
  • 命名空间:AWS/MediaTailor 或别名:mediatailor
  • 命名空间:AWS/Neptune 或别名:neptune
  • 命名空间:AWS/NetworkFirewall 或别名:nfw
  • 命名空间:AWS/NATGateway 或别名:ngw
  • 命名空间:AWS/NetworkELB 或别名:nlb
  • 命名空间:AWS/PrivateLinkEndpoints 或别名:vpc-endpoint
  • 命名空间:AWS/PrivateLinkServices 或别名:vpc-endpoint-service
  • 命名空间:AWS/Prometheus 或别名:amp
  • 命名空间:AWS/QLDB 或别名:qldb
  • 命名空间:AWS/RDS 或别名:rds
  • 命名空间:AWS/Redshift 或别名:redshift
  • 命名空间:AWS/Route53Resolver 或别名:route53-resolver
  • 命名空间:AWS/Route53 或别名:route53
  • 命名空间:AWS/S3 或别名:s3
  • 命名空间:AWS/SES 或别名:ses
  • 命名空间:AWS/States 或别名:sfn
  • 命名空间:AWS/SNS 或别名:sns
  • 命名空间:AWS/SQS 或别名:sqs
  • 命名空间:AWS/StorageGateway 或别名:storagegateway
  • 命名空间:AWS/TransitGateway 或别名:tgw
  • 命名空间:AWS/TrustedAdvisor 或别名:trustedadvisor
  • 命名空间:AWS/VPN 或别名:vpn
  • 命名空间:AWS/ClientVPN 或别名:clientvpn
  • 命名空间:AWS/WAFV2 或别名:wafv2
  • 命名空间:AWS/WorkSpaces 或别名:workspaces
  • 命名空间:AWS/AOSS 或别名:aoss
  • 命名空间:AWS/SageMaker 或别名:sagemaker
  • 命名空间:/aws/sagemaker/Endpoints 或别名:sagemaker-endpoints
  • 命名空间:/aws/sagemaker/TrainingJobs 或别名:sagemaker-training
  • 命名空间:/aws/sagemaker/ProcessingJobs 或别名:sagemaker-processing
  • 命名空间:/aws/sagemaker/TransformJobs 或别名:sagemaker-transform
  • 命名空间:/aws/sagemaker/InferenceRecommendationsJobs 或别名:sagemaker-inf-rec
  • 命名空间:AWS/Sagemaker/ModelBuildingPipeline 或别名:sagemaker-model-building-pipeline

兼容组件

prometheus.exporter.cloudwatch具有可被以下组件使用的导出功能。

注意

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