在 CloudWatch 和 Kubernetes 集群上安装具有 Prometheus 指标集合的 Amazon EKS 代理 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

在 CloudWatch 和 Kubernetes 集群上安装具有 Prometheus 指标集合的 Amazon EKS 代理

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

  • AWS App Mesh

  • NGINX

  • Memcached

  • Java/JMX

  • HAProxy

  • Fluent 位

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

在按照下面这些步骤安装 CloudWatch 代理来收集 Prometheus 指标之前,您必须有在 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启动类型)

要设置服务角色,请输入以下命令。Replace 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.amazonaws.cn/ec2/

  2. 在导航窗格中,选择实例.

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

  4. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

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

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

  7. 选择附加策略.

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

安装 CloudWatch 代理以收集 Prometheus 指标

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

删除具有 Prometheus 支持的 CloudWatch 代理的早期版本

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

kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch

在具有 EC2 启动类型的CloudWatch集群上安装 Amazon EKS 代理

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

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

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

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

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

    注意

    以下设置步骤默认以匿名用户身份从 Docker Hub 中提取容器映像。此拉取可能受速率限制的约束。有关更多信息,请参阅容器映像和下载速率限制.

    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

在具有 CloudWatch 启动类型的Amazon EKS集群上安装 Fargate 代理

要在具有 CloudWatch 启动类型的 Amazon EKS 集群上安装具有 Prometheus 支持的 Fargate 代理,请执行以下步骤。

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

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

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

    Replace region 替换为要将指标发送到的 区域的名称。例如,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 -

在 Kubernetes 集群上安装 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 -

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

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

验证代理是否正在运行

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

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

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

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