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

在 Amazon EKS 和 Kubernetes 集群上安装带有 Prometheus 指标收集功能的 CloudWatch 代理

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

  • Amazon App Mesh

  • NGINX

  • Memcached

  • Java/JMX

  • HAProxy

  • Fluent Bit

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

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

VPC 安全组要求

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

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

在 Amazon EKS 和 Kubernetes 集群上安装带有 Prometheus 指标收集功能的 CloudWatch 代理

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

  • Amazon App Mesh

  • NGINX

  • Memcached

  • Java/JMX

  • HAProxy

  • Fluent Bit

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

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

VPC 安全组要求

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

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

设置 IAM 角色

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

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

  • 将 IAM policy 添加到集群的 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 policy
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

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

  5. 在导航窗格中,选择角色

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

  7. 选择附加策略

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

安装 CloudWatch 代理以收集 Prometheus 指标

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

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

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

kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch

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

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

在 Amazon EKS 集群上安装具有 Prometheus 支持的 CloudWatch 代理
  1. 输入以下命令,检查是否已创建 amazon-cloudwatch 命名空间:

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

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

    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 启动类型的 Amazon EKS 集群上安装 CloudWatch 代理

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

在具有 Fargate 启动类型的 Amazon EKS 集群上安装具有 Prometheus 支持的 CloudWatch 代理
  1. 输入以下命令为 CloudWatch 代理创建 Fargate 配置文件,以便它可以在集群内运行。将 MyCluster 替换为集群的名称。

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

    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 -

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

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

验证代理是否正在运行

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

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

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

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