在亚马逊 EKS 和库贝内特群集上安装具有 Prometheus 指标收集功能的 CloudWatch 代理 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在亚马逊 EKS 和库贝内特群集上安装具有 Prometheus 指标收集功能的 CloudWatch 代理

本节介绍如何在运行亚马逊 EKS 或 Kubernetes 的集群中设置具有 Prometheus 监控功能的 CloudWatch 代理。执行此操作后,代理会自动抓取并导入该群集中运行的以下工作负载的指标。

  • Amazon App Mesh

  • NGINX

  • Memcached

  • Java/JMX

  • HAProxy

  • 流利比特率

您还可以将代理配置为抓取和导入其他 Prometheus 工作负载和源。

在按照下面这些步骤安装用于 Prometheus 指标收集的 CloudWatch 代理之前,您必须有在 Amazon EKS 上运行的集群或者在 Amazon EC2 实例上运行的 Kubernetes 集群。

VPC 安全组要求

Prometheus 工作负载的安全组的入口规则必须打开 Prometheus 端口到 CloudWatch 代理,以便通过私有 IP 抓取 Prometheus 指标。

CloudWatch 代理的安全组的出口规则必须允许 CloudWatch 代理通过私有 IP 连接到 Prometheus 工作负载的端口。

设置 IAM 角色

第一步是在集群中设置必要的 IAM 角色。有两种方法:

  • 为服务账户设置 IAM 角色,也称为服务角色。此方法适用于 EC2 启动类型和 Fargate 启动类型。

  • 将 IAM 策略添加到用于集群的 IAM 角色。这仅适用于 EC2 启动类型。

设置服务角色(EC2 启动类型和 Fargate 启动类型)

要设置服务角色,请输入以下命令。将 MyCluster 替换为集群的名称。

eksctl create iamserviceaccount \ --name cwagent-prometheus \ --namespace amazon-cloudwatch \ --cluster MyCluster \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --approve \ --override-existing-serviceaccounts

将策略添加到集群的 IAM 角色(仅限 EC2 启动类型)

在集群中为 Prometheus 支持设置 IAM 策略

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Instances

  3. 您需要查找集群的 IAM 角色名称的前缀。为此,请选中集群中实例名称旁边的复选框,然后选择操作实例设置附加/替换 IAM 角色。然后复制 IAM 角色的前缀,例如eksctl-dev303-workshop-nodegroup

  4. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  5. 在导航窗格中,选择 Roles

  6. 使用搜索框查找您在此过程前面复制的前缀,然后选择该角色。

  7. 选择附加策略。​

  8. 使用搜索框查找 CloudWatchAgentServerPolicy。选中 CloudWatchAgentServerPolicy 旁边的复选框,然后选择附加策略

安装 CloudWatch 代理以收集 Prometheus 指标

您必须在集群中安装 CloudWatch 代理才能收集指标。Amazon EKS 集群和 Kubernetes 集群的安装方式有所不同。

删除具有 Prometheus 支持的以前版本的 CloudWatch 代理

如果您的集群中已安装了具有 Prometheus 支持的 CloudWatch 代理版本,则必须通过输入以下命令删除该版本。这仅对具有 Prometheus 支持的以前版本的代理是必要的。您无需删除启用了没有 Prometheus 支持的 Container Insights 的 CloudWatch 代理。

kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch

使用 EC2 启动类型在亚马逊 EKS 集群上安装 CloudWatch 代理

要在 Amazon EKS 集群上安装具有 Prometheus 支持的 CloudWatch Watch 代理,请按照下列步骤操作。

在 Amazon EKS 集群上安装具有 Prometheus 支持的 CloudWatch 代理

  1. 输入以下命令,检查是否已创建 amazon-cloudwatch 命名空间:

    kubectl get namespace
  2. 如果结果中未显示 amazon-cloudwatch,请输入以下命令来创建它:

    kubectl create namespace amazon-cloudwatch
  3. 要使用默认配置部署代理并使其将数据发送到所在的 Amazon 区域,请输入以下命令:

    注意

    以下安装步骤默认情况下,将以匿名用户身份从 Docker Hub 中提取容器映像。此拉动可能会受到费率限制的限制。有关更多信息,请参阅CloudWatch 代理容器映像

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml

    要让代理将数据发送到不同的区域,请按照下列步骤操作:

    1. 输入以下命令,下载代理的 YAML 文件:

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
    2. 使用文本编辑器打开文件,然后搜索文件的 cwagentconfig.json 块。

    3. 添加突出显示的行,并指定所需的区域:

      cwagentconfig.json: | { "agent": { "region": "us-east-2" }, "logs": { ...
    4. 保存文件并使用更新后的文件部署代理。

      kubectl apply -f prometheus-eks.yaml

使用 Fargate 启动类型在亚马逊 EKS 群集上安装 CloudWatch 代理

要在具有 Fargate 启动类型的 Amazon EKS 集群上安装具有 Prometheus 支持的 CloudWatch 代理,请按照下列步骤操作。

在具有 Fargate 启动类型的亚马逊 EKS 集群上安装具有 Prometheus 支持的 CloudWatch 代理

  1. 输入以下命令为 CloudWatch 代理创建 Fargate 配置文件,以便它可以在群集内部运行。将 MyCluster 替换为集群的名称。

    eksctl create fargateprofile --cluster MyCluster \ --name amazon-cloudwatch \ --namespace amazon-cloudwatch
  2. 要安装 CloudWatch 代理,请输入以下命令。将 MyCluster 替换为集群的名称。此名称在存储代理收集的日志事件的日志组名称中使用,也用作代理收集的指标的维度。

    Replace区域替换为要将指标发送到的区域的名称。例如:us-west-1

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | kubectl apply -f -

在库贝内特群集上安装 CloudWatch 代理

要在运行 Kubernetes 的集群上安装具有 Prometheus 支持的 CloudWatch 代理,请输入以下命令:

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | kubectl apply -f -

MyCluster 替换为集群的名称。此名称在存储代理收集的日志事件的日志组名称中使用,也用作代理收集的指标的维度。

region 替换为要将指标发送到的 Amazon 区域的名称。例如:us-west-1

验证代理是否正在运行

在 Amazon EKS 和 Kubernetes 集群上,您可以输入以下命令以确认代理正在运行。

kubectl get pod -l "app=cwagent-prometheus" -n amazon-cloudwatch

如果结果包含单个 CloudWatch 代理窗格中的Running状态下,代理会运行并收集 Prometheus 指标。默认情况下,CloudWatch 代理每分钟收集 App Mesh、NGINX、Memcached、Java/JMX 和 HAProxy 的指标。有关这些指标的更多信息,请参阅 云监视代理收集的 Prometheus 指标。有关如何在 CloudWatch 中查看 Prometheus 指标的说明,请参阅查看 Prometheus 指标

您还可以将 CloudWatch 代理配置为从其他 Prometheus 导出程序收集指标。有关更多信息,请参阅抓取其他 Prometheus 源并导入这些指标