YACE:Prometheus 社区的官方 CloudWatch Exporter
概述
Yet Another Cloudwatch Exporter (YACE) 是一个用于从 AWS CloudWatch 检索指标并将其转换为 Prometheus 可以抓取的格式的开源工具。它已成为从 AWS 环境收集监控数据的关键组件。近期,YACE 项目已正式加入 Prometheus 社区,成为其官方的 Amazon CloudWatch exporter。这一举措极大地提升了该项目的可访问性、维护质量和社区参与度,使其成为 SRE 团队构建统一可观测性平台时不可或缺的一部分。
核心概念
- YACE (Yet Another Cloudwatch Exporter): 一个配置驱动的 exporter,负责将 AWS CloudWatch API 暴露的指标“翻译”成 Prometheus 的指标格式。其核心优势在于支持自动发现,能够动态检测 AWS 资源(如 EC2、RDS、ELB 等),无需在每次基础设施变更时手动更新配置。
- CloudWatch: AWS 的原生监控和管理服务,用于收集性能指标、日志和事件数据。它是 AWS 环境中事实上的监控数据源。
- Prometheus 生态系统: 以 Prometheus 为核心的时序数据收集、存储和告警工具链。将 YACE 纳入社区意味着它将得到更直接的维护、更紧密的集成,并被正式推荐用于 Prometheus 监控 AWS 环境。
- 自动发现 (Auto-discovery): YACE 的关键特性。它通过 AWS API 或标签来自动识别需要监控的服务和资源,这对于管理动态、弹性伸缩的云基础设施至关重要,避免了配置漂移和监控盲区。
实践
根据官方指引,使用 YACE 主要分为安装和配置两个步骤。
安装
您可以从其 官方 GitHub 仓库 的安装指南中找到详细的部署说明。通常推荐使用官方提供的 Docker 镜像或二进制文件进行部署。确保运行 YACE 的 IAM 角色具有对目标 AWS 资源的 cloudwatch:GetMetricData、cloudwatch:ListMetrics 以及适当的 EC2、RDS 等 Describe* 权限。
配置
YACE 的行为通过一个 YAML 配置文件定义。配置的主要部分是 discovery,用于定义自动发现规则。以下是一个简化的配置片段,用于发现并监控所有带有特定标签的 EC2 实例的 CPU 使用率:
discovery:
jobs:
- type: AWS/EC2
period: 60
length: 60
metrics:
- name: CPUUtilization
statistics: [ Average ]
period: 60
regions:
- us-east-1
searchTags:
- key: Environment
value: production
更多的配置示例(如监控 RDS、ALB)可以在仓库的 examples 目录中找到。配置完成后,启动 YACE 进程,Prometheus 即可通过配置的抓取端点获取数据。
SRE 要点
- 与可靠性的关联: YACE 是连接 AWS 环境与 Prometheus 监控栈的桥梁。通过将 CloudWatch 指标统一到 Prometheus,SRE 团队可以基于相同的工具链(如 PromQL、Grafana、Alertmanager)建立跨云的 SLI/SLO 体系。例如,可以结合 CloudWatch 的
HealthyHostCount和 Prometheus 的内部指标,全面评估负载均衡器的可靠性。 - 可观测性的提升: YACE 极大地增强了对 AWS 托管服务的可观测性。其自动发现能力确保了对动态扩展的资源(如 Auto Scaling Group 中的实例)的持续监控,避免了因资源变更导致的监控缺口,这是保障系统可靠性的基础。
- 最佳实践与常见反模式:
- 最佳实践:充分利用自动发现功能,减少手动配置;为 YACE 的抓取端点设置合理的抓取间隔(如 60s),以平衡数据新鲜度与 CloudWatch API 成本/限额;使用
searchTags和include/exclude标签进行细粒度控制。 - 反模式:为每个资源硬编码监控配置,这会导致配置膨胀和维护困难;忽略 CloudWatch API 的速率限制和成本,配置过多的指标或过短的周期;将 YACE 与 Prometheus 部署在不同 VPC 而没有配置适当的网络路由。
- 最佳实践:充分利用自动发现功能,减少手动配置;为 YACE 的抓取端点设置合理的抓取间隔(如 60s),以平衡数据新鲜度与 CloudWatch API 成本/限额;使用
- 相关指标 (SLI/SLO): 虽然 YACE 本身不定义业务 SLO,但它是获取用于定义 AWS 相关 SLI 的关键数据管道。例如:
- SLI:
avg_over_time(CloudWatch_aws_ec2_cpu_utilization[5m])作为 EC2 实例的平均 CPU 利用率。 - SLO: 针对某核心服务,可定义其依赖的 RDS 实例在 95% 的时间内查询延迟低于 100ms 的 SLO,此数据即通过 YACE 从 CloudWatch 获取。
- 监控 YACE 自身健康状况的指标(如
yace_cloudwatch_api_calls_total)对于确保监控管道的可靠性至关重要。
- SLI:
欲了解更多关于 Prometheus 可观测性实践的信息,可参考 prometheus 和 sre-principles 等页面。