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 | 布尔值 | 使用 AWS SDK 版本 2。 | 否 | no |
fips_disabled | 布尔值 | 禁用 FIPS 端点。在美国区域外运行时设置为 'true'。 | 是 | no |
debug | 布尔值 | 在 CloudWatch 导出器内部启用调试日志。 | 否 | no |
discovery_exported_tags | map(list(string)) | 每个服务(键)的标签(值)列表,要在所有指标中导出。例如,在 "AWS/EC2" 下定义 ["name", "type"] 将导出名称和类型标签及其值作为所有指标中的标签。影响所有发现作业。 | {} | no |
块
您可以在 prometheus.exporter.cloudwatch
中使用以下块来配置收集器特定的选项
层次结构 | 名称 | 描述 | 必需 |
---|---|---|---|
发现 | 发现 | 配置发现作业。可以配置多个作业。 | no* |
discovery > role | role | 配置作业应该假设的 IAM 角色,以抓取指标。默认为在 Alloy 运行的环境中配置的角色。 | no |
discovery > metric | metric | 配置作业应该抓取的指标列表。一个作业中可以定义多个指标。 | 是 |
静态 | 静态 | 配置静态作业。可以配置多个作业。 | no* |
static > role | role | 配置作业应该假设的 IAM 角色,以抓取指标。默认为在 Alloy 运行的环境中配置的角色。 | no |
static > metric | metric | 配置作业应该抓取的指标列表。一个作业中可以定义多个指标。 | 是 |
custom_namespace | custom_namespace | 配置自定义命名空间作业。可以配置多个作业。 | no* |
custom_namespace > role | role | 配置作业应该假设的 IAM 角色,以抓取指标。默认为在 Alloy 运行的环境中配置的角色。 | no |
custom_namespace > metric | metric | 配置作业应该抓取的指标列表。一个作业中可以定义多个指标。 | 是 |
decoupled_scraping | decoupled_scraping | 配置解耦抓取功能,以按计划检索指标并返回缓存的指标。 | no |
注意
虽然将static
、discovery
和custom_namespace
块标记为非必需,但您必须至少配置一个静态、发现或自定义命名空间作业。
discovery 块
该 discovery
块允许组件仅使用 AWS 服务及其下的指标列表抓取 CloudWatch 指标。Alloy 将在指定的服务中找到要抓取这些指标的资源,对其进行适当的标记,并将它们导出到 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"
}
}
}
您可以为不同的服务或使用不同的 search_tags
配置一个或多个 discovery
块以抓取指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
regions | list(string) | AWS 区域列表。 | 是 | |
type | string | CloudWatch 服务别名(如 "alb" 、"ec2" 等)或命名空间名称(如 "AWS/EC2" 、"AWS/S3" 等)。有关完整列表,请参阅 支持的服务。 | 是 | |
custom_tags | map(string) | 要添加为键/值对的列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式: custom_tag_{key} 。 | {} | no |
recently_active_only | 布尔值 | 仅返回在过去 3 小时内活跃的指标。 | 否 | no |
search_tags | map(string) | 用于标签过滤的键/值对列表(必须全部匹配)。值可以是正则表达式。 | {} | no |
dimension_name_requirements | list(string) | 要查询的指标维度列表。在查询指标值之前,总指标列表将只过滤包含此维度列表的指标。空或未定义的列表会导致包含所有维度组合。 | {} | no |
nil_to_zero | 布尔值 | 当设置为 true 时,NaN 指标值将被转换为 0。单个指标可以在 指标 块中覆盖此值。 | 是 | no |
静态块
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} 。 | {} | no |
nil_to_zero | 布尔值 | 当设置为 true 时,NaN 指标值将被转换为 0。单个指标可以在 指标 块中覆盖此值。 | 是 | no |
抓取单个指标(如上例所示)时,必须指定所有维度。例如,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 | 布尔值 | 仅返回在过去 3 小时内活跃的指标。 | 否 | no |
custom_tags | map(string) | 要添加为键/值对的列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式: custom_tag_{key} 。 | {} | no |
dimension_name_requirements | list(string) | 要查询的指标维度列表。在查询指标值之前,总指标列表将只过滤包含此维度列表的指标。空或未定义的列表会导致包含所有维度组合。 | {} | no |
nil_to_zero | 布尔值 | 当设置为 true 时,NaN 指标值将被转换为 0。单个指标可以在 指标 块中覆盖此值。 | 是 | no |
metric 块
表示要抓取的 AWS 指标。要查看可用的指标,AWS 并不保留一个包含所有可用指标的文档页面。请参考 本指南 了解如何探索指标,以便轻松选择所需的指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
name | string | 指标名称。 | 是 | |
statistics | list(string) | 要抓取的统计信息列表。例如,"Minimum" ,"Maximum" 等。 | 是 | |
period | 持续时间 | 请参阅下面的 周期和长度 部分。 | 是 | |
length | 持续时间 | 请参阅下面的 周期和长度 部分。 | 根据 period 计算。请参阅 周期和长度 了解详细信息。 | no |
nil_to_zero | 布尔值 | 当设置为 true 时,NaN 指标值将被转换为 0。 | 父 静态 或 发现 块中 nil_to_zero 的值。如果未在父块中设置,则为 true 。 | no |
周期和长度
period
主要控制从 CloudWatch 收集的指标所使用的时桶宽度。length
控制每次 Alloy 抓取时考虑 CloudWatch 指标的时间跨度。如果配置了这两个设置,调用 CloudWatch API 时的时参数如下所示
如上所述,如果跨同一静态或发现作业下的多个指标,不同的 period
和/或 length
,则配置所有周期中的最小值和所有长度中的最大值。
另一方面,如果没有配置 length
,则将根据所需的 period
配置属性计算周期和长度设置。
如果作业(发现或静态)中的所有指标都配置了相同的 period
值,CloudWatch API 将请求从抓取时间到 period
秒前的指标。这些值将导出到 Prometheus。
另一方面,如果在一个单个作业下配置了不同周期
的指标,则其工作方式不同。首先,通过聚合所有周期计算两个变量:length
,取所有周期的最大值,以及新的周期
值,取所有周期的最小值。然后,将请求CloudWatch API获取从now - length
到now
的指标,每个周期
秒聚合一次。对于每个指标,最新的样本将被导出到CloudWatch。
角色块
表示一个AWS IAM 角色。如果省略,将使用环境中配置的凭证对应的AWS角色。
在单个凭证对下抓取来自不同AWS账户的指标时,多个角色可能会有用。在这种情况下,在调用AWS API之前,为Alloy配置了一个不同的角色。因此,系统中配置的凭证需要假设目标角色的权限。有关如何配置此内容的更多信息,请参阅AWS IAM文档中的授予用户切换角色的权限。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
role_arn | string | 导出器应假设执行AWS API调用所需的AWS IAM角色ARN。 | 是 | |
external_id | string | 当调用STS AssumeRole API时使用的外部ID。有关更多信息,请参阅IAM 用户指南。 | "" | no |
decoupled_scraping块
配置了一个可选功能,该功能在计划的时间间隔内后台抓取CloudWatch指标。当启用此功能时,CloudWatch指标将在计划的时间间隔异步收集,而不是在抓取CloudWatch组件时同步收集。
解耦抓取功能减少了发送给AWS的API请求的数量。此功能还可以防止收集大量CloudWatch指标时的组件抓取超时。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
enabled | 布尔值 | 控制是否启用解耦抓取功能 | 否 | no |
scrape_interval | string | 控制异步收集新CloudWatch指标的频率 | 5m | no |
导出字段
以下字段被导出,并可以被其他组件引用。
名称 | 类型 | 描述 |
---|---|---|
targets | list(map(string)) | 可以用来收集导出器指标的目标。 |
例如,targets
可以传递给一个discovery.relabel
组件来重写目标的标签集,或者传递给一个收集公开指标的prometheus.scrape
组件。
组件健康
prometheus.exporter.cloudwatch
只有在给定无效配置的情况下才报告为不健康。在这些情况下,导出字段保留其最后健康的值。
调试信息
prometheus.exporter.cloudwatch
不公开任何特定于组件的调试信息。
调试指标
prometheus.exporter.cloudwatch
不公开任何特定于组件的调试指标。
示例
发现作业中支持的服务
以下是在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
具有以下可以由以下组件消费的导出
- 消费目标的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。请参阅链接文档以获取更多详细信息。