菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow prometheusbreadcrumb arrow 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"
    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_regionstring调用 STS 以检索帐户信息时要使用的 AWS 区域。
aws_sdk_version_v2bool使用 AWS SDK 版本 2。false
fips_disabledbool禁用 FIPS 端点的使用。在美国区域外部运行时设置为“true”。true
debugbool在 CloudWatch 导出器内部启用调试日志记录。false
discovery_exported_tagsmap(list(string))要在所有指标中导出的每个服务(键)的标签(值)列表。例如,在 "AWS/EC2" 下定义 ["name", "type"] 将导出名称和类型标签及其值作为所有指标中的标签。影响所有发现作业。{}

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

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

注意

staticdiscoverycustom_namespace 块标记为非必需,但您必须至少配置一个静态、发现或自定义命名空间作业。

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 区域列表。
typestringCloudWatch 服务别名("alb""ec2" 等)或命名空间名称("AWS/EC2""AWS/S3" 等)。有关完整列表,请参阅 supported-services
custom_tagsmap(string)要添加为键/值对列表的自定义标签。导出为 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key}{}
recently_active_onlybool仅返回最近 3 小时内处于活动状态的指标。false
search_tagsmap(string)用于标签过滤的键/值对列表(所有都必须匹配)。值可以是正则表达式。{}
dimension_name_requirementslist(string)要查询的指标维度列表。在查询指标值之前,将过滤指标总列表,仅保留那些包含完全此维度列表的指标。空列表或未定义的列表会导致包含所有维度组合。{}
nil_to_zerobool当为 true 时,NaN 指标值将转换为 0。单个指标可以在 metric 块中覆盖此值。true

static 块

static 块配置组件以抓取一组特定的 CloudWatch 指标。指标需要使用以下规范完全限定

  1. namespace:例如,AWS/EC2AWS/EBSCoolApp(如果是自定义指标等)。
  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 区域列表。
namespacestringCloudWatch 指标命名空间。
dimensionsmap(string)CloudWatch 指标维度,作为名称/值对的列表。必须唯一地定义此作业中的所有指标。
custom_tagsmap(string)要添加为键/值对列表的自定义标签。导出为 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key}{}
nil_to_zerobool当为 true 时,NaN 指标值将转换为 0。单个指标可以在 metric 块中覆盖此值。true

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

custom_namespace 块

custom_namespace 块允许组件仅使用命名空间名称和该命名空间下的指标列表从自定义命名空间抓取 CloudWatch 指标。例如

alloy
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 块。

名称类型描述默认值必需
regionslist(string)AWS 区域列表。
namespacestringCloudWatch 指标命名空间。
recently_active_onlybool仅返回最近 3 小时内处于活动状态的指标。false
custom_tagsmap(string)要添加为键/值对列表的自定义标签。导出为 Prometheus 格式时,标签名称遵循以下格式:custom_tag_{key}{}
dimension_name_requirementslist(string)要查询的指标维度列表。在查询指标值之前,将过滤指标总列表,仅保留那些包含完全此维度列表的指标。空列表或未定义的列表会导致包含所有维度组合。{}
nil_to_zerobool当为 true 时,NaN 指标值将转换为 0。单个指标可以在 metric 块中覆盖此值。true

metric 块

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

名称类型描述默认值必需
namestring指标名称。
statisticslist(string)要抓取的统计信息列表。例如,"Minimum""Maximum" 等。
periodduration请参阅下面的 period 部分。
lengthduration请参阅下面的 period 部分。基于 period 计算。有关详细信息,请参阅 period
nil_to_zerobool当为 true 时,NaN 指标值将转换为 0。staticdiscovery 块中 nil_to_zero 的值。如果未在父块中设置,则为 true
add_cloudwatch_timestampbool当为 true 时,使用 CloudWatch 中的时间戳而不是抓取时间。false

period 和 length

period 主要控制用于聚合从 CloudWatch 收集的指标的时间桶的宽度。length 控制在每次 Alloy 抓取期间考虑 CloudWatch 指标回溯的时间长度。如果同时配置了这两个设置,则调用 CloudWatch API 时的时序参数如下所示

An example of a CloudWatch period and length time model

如上所述,如果在同一静态或发现作业下的多个指标中,存在不同的 period 和/或 length,则配置所有周期的最小值和所有长度的最大值。

另一方面,如果未配置 length,则 period 和 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_arnstring导出器应承担以执行 AWS API 调用的 AWS IAM 角色 ARN。
external_idstring调用 STS AssumeRole API 时使用的外部 ID。有关更多信息,请参阅 IAM 用户指南""

decoupled_scraping 块

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

解耦抓取功能减少了发送到 AWS 的 API 请求数量。当您收集大量 CloudWatch 指标时,此功能还可以防止组件抓取超时。

名称类型描述默认值必需
enabledbool控制是否启用解耦抓取功能false
scrape_intervalstring控制异步收集新 CloudWatch 指标的频率5 分钟

导出的字段

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

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

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

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

组件健康状况

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

调试信息

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

调试指标

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

示例

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

发现作业中支持的服务

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

  • 命名空间: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 具有可以被以下组件使用的导出

注意

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