Amazon CloudWatch
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

(可选)将 CloudWatch 代理设置为 StatsD 终端节点以将 StatsD 指标发送到 CloudWatch

本节介绍了如何在 Amazon EKS 集群或 Kubernetes 集群上将 CloudWatch 代理设置并配置为 StatsD 终端节点,以从容器中收集 StatsD 指标并将其发布到 CloudWatch。如果已使用 StatsD,您可能需要执行该操作。

可以使用三种方法在集群中将 CloudWatch 代理部署为 StatsD 终端节点:

将集群内的单个 CloudWatch 代理部署为服务

如果要在发布到 CloudWatch 之前聚合集群中的所有 StatsD 指标,我们建议使用该方法。此选项也可以很好地扩展,并且会比将代理部署为附加容器消耗更少的资源。

将 CloudWatch 代理作为 DaemonSet 部署到每个工作线程节点

如果您希望聚合跨 Kubernetes 工作线程节点的 StatsD 指标,或者您担心提供整个集群中所有 StatsD 指标的单个 CloudWatch 代理的可扩展性问题,我们建议使用该方法。与将代理部署为附加容器相比,它也消耗更少的资源。

这种方式的缺点是您无法在单个节点上扩展,因为每个节点上只运行一个容器。

将 CloudWatch 代理部署为附加容器

如果不希望跨各个 pod 聚合 StatsD 指标,我们建议您使用该选项。CPU、内存和网络等资源在 pod 级别隔离,因此客户可以灵活地将代理插入其 pod。

该方法的缺点包括资源消耗,例如,1000 个 pod 具有 1000 个 CloudWatch 代理容器。此外,无法聚合来自不同任务的指标。

步骤 1:为 CloudWatch 创建命名空间

可以使用以下步骤为 CloudWatch 创建名为 amazon-cloudwatch 的 Kubernetes 命名空间。如果已创建该命名空间,您可以跳过这些步骤。

为 CloudWatch 创建命名空间

  • 运行以下命令以将命名空间 YAML 下载到并应用于 kubectl 客户端主机。

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/k8s-yaml-templates/cloudwatch-namespace.yaml

步骤 2:为 StatsD 创建 ConfigMap

无论选择哪种方法,您都必须为 StatsD 创建 ConfigMap。

为 StatsD 创建 ConfigMap 以从集群中发送指标

  1. 运行以下命令以将 ConfigMap YAML 下载到 kubectl 客户端主机中:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/k8s-yaml-templates/cwagent-statsd/cwagent-statsd-configmap.yaml

    该 YAML 文件嵌入了 JSON 配置 blob。

  2. 编辑 JSON 配置 blob。在完成后,请确保 JSON blob 保留有效的 JSON 格式。

    1. 您可以在 statsd 部分中编辑 StatsD 项目。有关更多信息,请参阅使用 StatsD 检索自定义指标

    2. 您可以在 agent 部分中编辑常规项目。有关更多信息,请参阅 CloudWatch 代理配置文件:Agent 部分

      agent 部分中,我们建议您将 omit_hostname 设置为 true。否则,该代理将运行代理 pod 的工作线程节点的主机名添加为 StatsD 指标的维度。如果重新计划代理 pod 以在不同的工作线程节点中运行,将该主机名作为维度可能会使指标查看变得更加困难。

      默认情况下,CloudWatch 将指标发布到工作线程节点所在的 AWS 区域。要覆盖该区域,您可以将 region 字段添加到 agent 部分中。例如:"region":"us-west-2"

  3. 运行以下命令以在集群中创建 ConfigMap。

    kubectl apply -f cwagent-statsd-configmap.yaml

步骤 3:部署 CloudWatch 代理

要部署 CloudWatch 代理以发送 StatsD 指标,请使用以下几节之一中的步骤。

方法 1:在集群中部署单个 CloudWatch 代理

本节介绍了如何在集群中部署单个 CloudWatch 代理以将 StatsD 指标发送到 CloudWatch。在部署完成并且代理正在运行时,它将开始侦听 URL cloudwatch-agent-statsd.amazon-cloudwatch.svc:8125。集群中的应用程序可以将 StatsD 指标发出到该 URL。

在集群中部署单个 CloudWatch 代理

  1. 输入以下命令以下载和部署用于部署的 YAML。

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/k8s-yaml-templates/cwagent-statsd/cwagent-statsd-deployment.yaml
  2. 运行以下命令以验证部署。

    kubectl get pods -n amazon-cloudwatch

方法 2:将 CloudWatch 代理作为 DaemonSet 部署到每个工作线程节点中

该方法用于将 CloudWatch 代理作为 DaemonSet 部署到每个工作线程节点中。在部署完成并且代理正在运行时,它将开始侦听 NodeIP:8125。集群中的应用程序可以将 StatsD 指标发出到端口 8125(具有计划运行应用程序 pod 的节点的 IP)。

在每个工作线程节点上部署 CloudWatch 代理

  1. 运行以下命令以下载并部署 DaemonSet YAML。

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/k8s-yaml-templates/cwagent-statsd/cwagent-statsd-daemonset.yaml
  2. 运行以下命令以验证部署。

    kubectl get pods -n amazon-cloudwatch

方法 3:将 CloudWatch 代理部署为附加容器

本节介绍了如何将 CloudWatch 代理部署为附加容器。该代理从同一 pod 上运行的应用程序中收集 StatsD 指标。以下是一个示例 YAML 文件,它将 CloudWatch 代理作为 Amazon Linux 容器的附加容器启动。

apiVersion: v1 kind: Pod metadata: namespace: default name: amazonlinux spec: containers: - name: amazonlinux image: amazonlinux command: ["/bin/sh"] args: ["-c", "sleep 300"] - name: cloudwatch-agent image: amazon/cloudwatch-agent imagePullPolicy: Always resources: limits: cpu: 200m memory: 100Mi requests: cpu: 200m memory: 100Mi volumeMounts: - name: cwagentconfig mountPath: /etc/cwagentconfig volumes: - name: cwagentconfig configMap: name: cwagentstatsdconfig terminationGracePeriodSeconds: 60