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"
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_tags | map(list(string)) | 每个服务(键)要导出的标签(值)列表,用于所有指标。例如,在 "AWS/EC2" 下定义 ["name", "type"] 将导出名称和类型标签及其值作为所有指标中的标签。影响所有发现作业。 | {} | 否 |
块
您可以在 prometheus.exporter.cloudwatch
中使用以下块来配置收集器特定的选项
层次结构 | 名称 | 描述 | 必需 |
---|---|---|---|
发现 | 发现 | 配置发现作业。可以配置多个作业。 | 否* |
discovery > role | role | 配置作业应承担以抓取指标的 IAM 角色。默认为 Alloy 运行所在环境中配置的角色。 | 否 |
discovery > metric | metric | 配置作业应抓取的指标列表。可以在一个作业中定义多个指标。 | 是 |
static | static | 配置静态作业。可以配置多个作业。 | 否* |
static > role | role | 配置作业应承担以抓取指标的 IAM 角色。默认为 Alloy 运行所在环境中配置的角色。 | 否 |
static > metric | metric | 配置作业应抓取的指标列表。可以在一个作业中定义多个指标。 | 是 |
decoupled_scraping | decoupled_scraping | 配置解耦抓取功能,以便按计划检索指标并返回缓存的指标。 | 否 |
注意
static
和discovery
块标记为非必需,但您必须配置至少一个静态或发现作业。
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 | 字符串 | CloudWatch 服务别名 ("alb" 、"ec2" 等) 或命名空间名称 ("AWS/EC2" 、"AWS/S3" 等)。有关完整列表,请参阅 支持的服务。 | 是 | |
custom_tags | map(string) | 要添加为键/值对列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key} 。 | {} | 否 |
search_tags | map(string) | 用于标签过滤的键/值对列表(所有键/值对都必须匹配)。值可以是正则表达式。 | {} | 否 |
dimension_name_requirements | list(string) | 要查询的指标维度的列表。在查询指标值之前,将过滤指标的完整列表,使其仅包含完全包含此维度列表的指标。空列表或未定义的列表会导致包含所有维度组合。 | {} | 否 |
nil_to_zero | 布尔值 | 当 true 时,NaN 指标值将转换为 0。各个指标可以在 指标 块中覆盖此值。 | 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 | 字符串 | CloudWatch 指标命名空间。 | 是 | |
dimensions | map(string) | 作为名称/值对列表的 CloudWatch 指标维度。必须唯一地定义此作业中的所有指标。 | 是 | |
custom_tags | map(string) | 要添加为键/值对列表的自定义标签。导出到 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key} 。 | {} | 否 |
nil_to_zero | 布尔值 | 当 true 时,NaN 指标值将转换为 0。各个指标可以在 指标 块中覆盖此值。 | true | 否 |
抓取单个指标(如上例所示)时,必须指定所有维度。例如,AWS/Logs
指标需要指定 Resource
、Service
、Class
和 Type
维度。这同样适用于 CloudWatch 自定义指标,在 CloudWatch 中保存指标时附加的所有维度都是必需的。
metric 块
表示要抓取的 AWS 指标。要查看可用的指标,AWS 没有一个包含所有可用指标的文档页面。请按照 本指南了解如何浏览指标,以便轻松选择所需的指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
name | 字符串 | 指标名称。 | 是 | |
statistics | list(string) | 要抓取的统计信息列表。例如,"Minimum" 、"Maximum" 等。 | 是 | |
period | 持续时间 | 请参阅下面的 周期 部分。 | 是 | |
length | 持续时间 | 请参阅下面的 周期 部分。 | 根据 period 计算得出。有关详细信息,请参阅 周期。 | 否 |
nil_to_zero | 布尔值 | 当 true 时,NaN 指标值将转换为 0。 | 父 static 或 discovery 块中 nil_to_zero 的值。如果在父块中未设置,则为 true 。 | 否 |
周期和长度
period
主要控制用于聚合从 CloudWatch 收集的指标的时间存储桶的宽度。length
控制在每次 Alloy 抓取期间考虑 CloudWatch 指标的时间范围。如果同时配置了这两个设置,则调用 CloudWatch API 时的时间参数将按如下方式工作
如上所述,如果在同一静态或发现作业下的多个指标中,存在不同的 period
和/或 length
,则将配置所有周期的最小值和所有长度的最大值。
另一方面,如果未配置 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 | 字符串 | 导出器应假设的 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 | 否 |
导出字段
以下字段会被导出,并且可以被其他组件引用。
名称 | 类型 | 描述 |
---|---|---|
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
或别名: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
具有可被以下组件使用的导出功能。
- 使用目标的组件
注意
连接某些组件可能没有意义,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。