prometheus.exporter.cloudwatch
prometheus.exporter.cloudwatch
组件嵌入了 yet-another-cloudwatch-exporter
,让您能够以 Prometheus 兼容格式收集 Amazon CloudWatch 指标。
此组件允许您在称为作业的一组配置中抓取 CloudWatch 指标。作业有两种类型:发现作业和静态作业。
认证
Alloy 必须运行在可以访问 AWS 的环境中。导出器使用 AWS SDK for Go,并通过 AWS 默认凭证链提供认证。无论使用何种方法获取凭证,导出器工作都需要一些权限。
"tag:GetResources",
"cloudwatch:GetMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics"
Transit Gateway 附件(tgwa
)指标需要以下 IAM 权限才能工作。
"ec2:DescribeTags",
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ec2:DescribeTransitGateway*"
发现带有标签的 API Gateway REST API 需要以下 IAM 权限
"apigateway:GET"
发现带有标签的 Database Migration Service (DMS) 复制实例和任务需要以下 IAM 权限
"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"
}
}
}
参数
您可以将以下参数与 prometheus.exporter.cloudwatch
一起使用
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
sts_region | string | 调用 STS 检索账户信息时使用的 AWS 区域。 | 是 | |
aws_sdk_version_v2 | bool | 使用 AWS SDK 版本 2。 | false | 否 |
fips_disabled | bool | 禁用 FIPS 端点的使用。在美国地区以外运行时设置为 'true'。 | true | 否 |
debug | bool | 在 CloudWatch exporter 内部启用调试日志记录。 | false | 否 |
discovery_exported_tags | map(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
块。
注意
static
、discovery
和custom_namespace
块标记为非必需,但您必须至少配置一个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} 。 | {} | 否 |
dimension_name_requirements | list(string) | 要查询的指标维度列表。在查询指标值之前,会过滤指标的总列表,只包含那些恰好包含此维度列表的指标。空列表或未定义的列表将包含所有维度组合。 | {} | 否 |
nil_to_zero | bool | 当为 true 时,NaN 指标值将被转换为 0。单个指标可以在 metric 块中覆盖此值。 | true | 否 |
recently_active_only | bool | 仅返回过去 3 小时内活跃的指标。 | false | 否 |
search_tags | map(string) | 用于标签过滤的键/值对列表(所有都必须匹配)。值可以是正则表达式。 | {} | 否 |
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
集的指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
dimensions | map(string) | CloudWatch 指标维度,作为名称/值对列表。必须唯一地定义此作业中的所有指标。 | 是 | |
namespace | string | CloudWatch 指标命名空间。 | 是 | |
regions | list(string) | AWS 区域列表。 | 是 | |
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
块多次,以从不同的命名空间抓取指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
namespace | string | CloudWatch 指标命名空间。 | 是 | |
regions | list(string) | AWS 区域列表。 | 是 | |
custom_tags | map(string) | 要添加的自定义标签,作为键/值对列表。当导出为 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key} 。 | {} | 否 |
dimension_name_requirements | list(string) | 要查询的指标维度列表。在查询指标值之前,会过滤指标的总列表,只包含那些恰好包含此维度列表的指标。空列表或未定义的列表将包含所有维度组合。 | {} | 否 |
nil_to_zero | bool | 当为 true 时,NaN 指标值将被转换为 0。单个指标可以在 metric 块中覆盖此值。 | true | 否 |
recently_active_only | bool | 仅返回过去 3 小时内活跃的指标。 | false | 否 |
metric
必需
表示要抓取的 AWS 指标。
可以多次指定 metric
块以定义多个目标指标。有关详细的指标信息,请参阅 Amazon CloudWatch 文档中的查看可用指标主题。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
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
,则配置所有 period 的最小值和所有 length 的最大值。
另一方面,如果未配置 length
,则 period 和 length 设置均根据必需的 period
配置属性计算得出。
如果作业(发现或静态)中的所有指标配置了相同的 period
值,则请求 CloudWatch API 获取从抓取时间到过去 period
秒的指标。这些值会导出到 Prometheus。

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

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