如何将外部Kubernetes集群的Prometheus指标发送至AWS CloudWatch?
将DigitalOcean Kubernetes集群的Prometheus指标发送至AWS CloudWatch
完全可以实现,以下是两种主流的落地方案,附带配置细节和注意事项:
方案一:使用Prometheus Remote Write + AWS CloudWatch指标适配器
这是AWS官方推荐的方式,通过中间适配器实现Prometheus指标到CloudWatch的转换与推送。
步骤1:部署AWS CloudWatch Prometheus适配器
可以通过Helm快速部署,或者手动部署YAML清单:
# 添加AWS可观测性Helm仓库 helm repo add aws-observability https://aws-observability.github.io/helm-charts # 部署适配器,替换为你的AWS区域和IAM角色ARN(如果用IRSA) helm install cloudwatch-adapter aws-observability/aws-cloudwatch-metrics-adapter \ --set aws.region=us-east-1 \ --set serviceAccount.create=true
如果DigitalOcean Kubernetes未配置IRSA(IAM角色绑定ServiceAccount),可以通过Secret挂载AWS密钥对:
# 创建存储密钥的Secret kubectl create secret generic aws-cloudwatch-credentials \ --from-literal=AWS_ACCESS_KEY_ID=your-access-key \ --from-literal=AWS_SECRET_ACCESS_KEY=your-secret-key # 在Helm部署时指定使用该Secret helm install cloudwatch-adapter aws-observability/aws-cloudwatch-metrics-adapter \ --set aws.region=us-east-1 \ --set aws.secretName=aws-cloudwatch-credentials
步骤2:配置Prometheus Remote Write
修改Prometheus的配置文件(或ConfigMap),添加remote_write块指向适配器的服务地址:
remote_write: - url: "http://cloudwatch-adapter.default.svc.cluster.local:9090/api/v1/write" # 可选:过滤需要发送的指标,控制CloudWatch成本 write_relabel_configs: - source_labels: [__name__] regex: "(node_cpu.*|node_memory.*|kube_pod.*|kube_node.*)" action: keep # 可选:移除不必要的标签,避免CloudWatch维度超限 - source_labels: [pod_template_hash] action: drop
更新Prometheus配置后,重启Pod使配置生效。
步骤3:配置IAM权限
确保适配器拥有CloudWatch写入权限,创建如下IAM策略并绑定到对应的IAM实体(角色或用户):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*", "Condition": { "StringEquals": { "cloudwatch:namespace": "Prometheus/DO-K8s" } } } ] }
方案二:使用社区工具prometheus-to-cloudwatch
这是一个轻量级的开源工具,直接拉取Prometheus指标并推送到CloudWatch。
步骤1:部署工具
创建Deployment清单,指定Prometheus地址、AWS区域和目标命名空间:
apiVersion: apps/v1 kind: Deployment metadata: name: prometheus-to-cloudwatch spec: replicas: 1 selector: matchLabels: app: prometheus-to-cloudwatch template: metadata: labels: app: prometheus-to-cloudwatch spec: containers: - name: prometheus-to-cloudwatch image: quay.io/prometheuscommunity/prometheus-to-cloudwatch:latest args: - --prometheus.url=http://prometheus.default.svc.cluster.local:9090 - --cloudwatch.namespace=Prometheus/DO-K8s - --cloudwatch.region=us-east-1 - --metrics.filter=^node_.*|^kube_.*$ env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: aws-cloudwatch-credentials key: AWS_ACCESS_KEY_ID - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: aws-cloudwatch-credentials key: AWS_SECRET_ACCESS_KEY
执行kubectl apply -f deployment.yaml完成部署。
关键注意事项
- 成本控制:CloudWatch按指标数量和存储时长收费,务必通过
write_relabel_configs或工具的过滤参数只发送核心指标。 - 指标命名与维度:CloudWatch指标名支持字母、数字、下划线和连字符,若Prometheus指标包含其他字符需通过重写规则转换;每个CloudWatch指标最多支持10个维度,需移除不必要的标签。
- 验证与调试:部署完成后,登录AWS CloudWatch控制台,在指定命名空间下查看指标是否正常显示;可通过查看适配器或工具的Pod日志排查推送失败问题。
内容的提问来源于stack exchange,提问作者tobias
相关产品推荐
相关产品推荐

