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 策略
{
"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": "*"
}
]
}
用法
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_region | string | 调用 STS 以检索帐户信息时要使用的 AWS 区域。 | 是 | |
aws_sdk_version_v2 | bool | 使用 AWS SDK 版本 2。 | false | 否 |
fips_disabled | bool | 禁用 FIPS 端点的使用。在美国区域外部运行时设置为“true”。 | true | 否 |
debug | bool | 在 CloudWatch 导出器内部启用调试日志记录。 | false | 否 |
discovery_exported_tags | map(list(string)) | 要在所有指标中导出的每个服务(键)的标签(值)列表。例如,在 "AWS/EC2" 下定义 ["name", "type"] 将导出名称和类型标签及其值作为所有指标中的标签。影响所有发现作业。 | {} | 否 |
块
您可以在 prometheus.exporter.cloudwatch
中使用以下块来配置收集器特定的选项
层级 | 名称 | 描述 | 必需 |
---|---|---|---|
discovery | discovery | 配置发现作业。可以配置多个作业。 | 否* |
discovery > role | role | 配置作业应承担以抓取指标的 IAM 角色。默认为 Alloy 运行的环境中配置的角色。 | 否 |
discovery > metric | metric | 配置作业应抓取的指标列表。可以在一个作业内定义多个指标。 | 是 |
static | static | 配置静态作业。可以配置多个作业。 | 否* |
static > role | role | 配置作业应承担以抓取指标的 IAM 角色。默认为 Alloy 运行的环境中配置的角色。 | 否 |
static > metric | metric | 配置作业应抓取的指标列表。可以在一个作业内定义多个指标。 | 是 |
custom_namespace | custom_namespace | 配置自定义命名空间作业。可以配置多个作业。 | 否* |
custom_namespace > role | role | 配置作业应承担以抓取指标的 IAM 角色。默认为 Alloy 运行的环境中配置的角色。 | 否 |
custom_namespace > metric | metric | 配置作业应抓取的指标列表。可以在一个作业内定义多个指标。 | 是 |
decoupled_scraping | decoupled_scraping | 配置解耦抓取功能,以按计划检索指标并返回缓存的指标。 | 否 |
注意
static
、discovery
和custom_namespace
块标记为非必需,但您必须至少配置一个静态、发现或自定义命名空间作业。
discovery 块
discovery
块允许组件仅使用 AWS 服务和该服务/命名空间下的指标列表来抓取 CloudWatch 指标。Alloy 将在指定的服务中查找 AWS 资源,以抓取这些指标,对其进行适当标记,并将其导出到 Prometheus。例如,如果我们想从所有 AWS EC2 实例中抓取 CPU 利用率和网络流量指标
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
抓取指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
regions | list(string) | AWS 区域列表。 | 是 | |
type | string | CloudWatch 服务别名("alb" 、"ec2" 等)或命名空间名称("AWS/EC2" 、"AWS/S3" 等)。有关完整列表,请参阅 supported-services。 | 是 | |
custom_tags | map(string) | 要添加为键/值对列表的自定义标签。导出为 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key} 。 | {} | 否 |
recently_active_only | bool | 仅返回最近 3 小时内处于活动状态的指标。 | false | 否 |
search_tags | map(string) | 用于标签过滤的键/值对列表(所有都必须匹配)。值可以是正则表达式。 | {} | 否 |
dimension_name_requirements | list(string) | 要查询的指标维度列表。在查询指标值之前,将过滤指标总列表,仅保留那些包含完全此维度列表的指标。空列表或未定义的列表会导致包含所有维度组合。 | {} | 否 |
nil_to_zero | bool | 当为 true 时,NaN 指标值将转换为 0。单个指标可以在 metric 块中覆盖此值。 | true | 否 |
static 块
static
块配置组件以抓取一组特定的 CloudWatch 指标。指标需要使用以下规范完全限定
namespace
:例如,AWS/EC2
、AWS/EBS
、CoolApp
(如果是自定义指标等)。dimensions
:CloudWatch 通过一组维度(本质上是标签/值对)来标识指标。例如,所有AWS/EC2
指标都由InstanceId
维度和标识符本身标识。metric
:指标名称和统计信息。
例如,如果您想抓取发现示例中的相同指标,但针对特定的 AWS EC2 实例
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
标签。
static "LABEL" {
regions = ["us-east-2"]
namespace = "AWS/EC2"
// ...
}
您可以配置一次或多次 static
块,以使用不同的 dimensions
集抓取指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
regions | list(string) | AWS 区域列表。 | 是 | |
namespace | string | CloudWatch 指标命名空间。 | 是 | |
dimensions | map(string) | CloudWatch 指标维度,作为名称/值对的列表。必须唯一地定义此作业中的所有指标。 | 是 | |
custom_tags | map(string) | 要添加为键/值对列表的自定义标签。导出为 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key} 。 | {} | 否 |
nil_to_zero | bool | 当为 true 时,NaN 指标值将转换为 0。单个指标可以在 metric 块中覆盖此值。 | true | 否 |
当抓取单个指标(如上面的示例)时,必须指定所有维度。例如,AWS/Logs
指标需要指定 Resource
、Service
、Class
和 Type
维度。这同样适用于 CloudWatch 自定义指标,保存在 CloudWatch 中时附加到指标的所有维度都是必需的。
custom_namespace 块
custom_namespace
块允许组件仅使用命名空间名称和该命名空间下的指标列表从自定义命名空间抓取 CloudWatch 指标。例如
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
块。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
regions | list(string) | AWS 区域列表。 | 是 | |
namespace | string | CloudWatch 指标命名空间。 | 是 | |
recently_active_only | bool | 仅返回最近 3 小时内处于活动状态的指标。 | false | 否 |
custom_tags | map(string) | 要添加为键/值对列表的自定义标签。导出为 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key} 。 | {} | 否 |
dimension_name_requirements | list(string) | 要查询的指标维度列表。在查询指标值之前,将过滤指标总列表,仅保留那些包含完全此维度列表的指标。空列表或未定义的列表会导致包含所有维度组合。 | {} | 否 |
nil_to_zero | bool | 当为 true 时,NaN 指标值将转换为 0。单个指标可以在 metric 块中覆盖此值。 | true | 否 |
metric 块
表示要抓取的 AWS 指标。要查看可用指标,AWS 没有维护包含所有可用指标的文档页面。请按照本指南了解如何浏览指标,以便轻松选择您需要的指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
name | string | 指标名称。 | 是 | |
statistics | list(string) | 要抓取的统计信息列表。例如,"Minimum" 、"Maximum" 等。 | 是 | |
period | duration | 请参阅下面的 period 部分。 | 是 | |
length | duration | 请参阅下面的 period 部分。 | 基于 period 计算。有关详细信息,请参阅 period。 | 否 |
nil_to_zero | bool | 当为 true 时,NaN 指标值将转换为 0。 | 父 static 或 discovery 块中 nil_to_zero 的值。如果未在父块中设置,则为 true 。 | 否 |
add_cloudwatch_timestamp | bool | 当为 true 时,使用 CloudWatch 中的时间戳而不是抓取时间。 | false | 否 |
period 和 length
period
主要控制用于聚合从 CloudWatch 收集的指标的时间桶的宽度。length
控制在每次 Alloy 抓取期间考虑 CloudWatch 指标回溯的时间长度。如果同时配置了这两个设置,则调用 CloudWatch API 时的时序参数如下所示

如上所述,如果在同一静态或发现作业下的多个指标中,存在不同的 period
和/或 length
,则配置所有周期的最小值和所有长度的最大值。
另一方面,如果未配置 length
,则 period 和 length 设置都将根据所需的 period
配置属性计算。
如果作业(发现或静态)中的所有指标都配置了相同的 period
值,则将请求 CloudWatch API 获取从抓取时间到过去 period
秒的指标。这些值将导出到 Prometheus。

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

role 块
表示 AWS IAM 角色。如果省略,将使用与环境中配置的凭证对应的 AWS 角色。
当使用单个凭证对从不同的 AWS 账户抓取指标时,多个角色可能很有用。在这种情况下,为 Alloy 配置了不同的角色,以便在调用 AWS API 之前承担该角色。因此,系统中配置的凭证需要有权承担目标角色。有关如何配置此内容的更多信息,请参阅 AWS IAM 文档中的 授予用户切换角色的权限。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
role_arn | string | 导出器应承担以执行 AWS API 调用的 AWS IAM 角色 ARN。 | 是 | |
external_id | string | 调用 STS AssumeRole API 时使用的外部 ID。有关更多信息,请参阅 IAM 用户指南。 | "" | 否 |
decoupled_scraping 块
decoupled_scraping
块配置了一个可选功能,该功能在计划的时间间隔内在后台抓取 CloudWatch 指标。启用此功能后,CloudWatch 指标将按计划的时间间隔异步收集,而不是在抓取 CloudWatch 组件时同步收集。
解耦抓取功能减少了发送到 AWS 的 API 请求数量。当您收集大量 CloudWatch 指标时,此功能还可以防止组件抓取超时。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
enabled | bool | 控制是否启用解耦抓取功能 | false | 否 |
scrape_interval | string | 控制异步收集新 CloudWatch 指标的频率 | 5 分钟 | 否 |
导出的字段
以下字段已导出,可以被其他组件引用。
名称 | 类型 | 描述 |
---|---|---|
targets | list(map(string)) | 可用于收集导出器指标的目标。 |
例如,targets
可以传递给 discovery.relabel
组件以重写目标的标签集,也可以传递给 prometheus.scrape
组件以收集公开的指标。
组件健康状况
仅当 prometheus.exporter.cloudwatch
获得无效配置时,才会报告为不健康。在这些情况下,导出的字段会保留其最后一次健康值。
调试信息
prometheus.exporter.cloudwatch
不会公开任何组件特定的调试信息。
调试指标
prometheus.exporter.cloudwatch
不会公开任何组件特定的调试指标。
示例
请参阅在每个 discovery 和 static 部分下描述的示例。
发现作业中支持的服务
以下是在 cloudwatch_exporter
发现作业中支持的 AWS 服务列表。配置发现作业时,每个 discovery_job
的 type
字段必须与所需的作业命名空间匹配。
- 命名空间:
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
具有可以被以下组件使用的导出
- 使用 Targets 的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。