You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将外部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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:37