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

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

CloudWatch Container Insights is in open preview. The preview is open to all AWS accounts and you do not need to request access. Features may be added or changed before announcing General Availability. Don’t hesitate to contact us with any feedback or let us know if you would like to be informed when updates are made by emailing us at containerinsightsfeedback@amazon.com

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

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

  • 方法1:在集群中部署单个 CloudWatch 代理。如果要在发布到 CloudWatch 之前聚合集群中的所有 StatsD 指标,我们建议使用该方法。

  • 方法 2:将 CloudWatch 代理作为 DaemonSet 部署到每个工作线程节点中。如果您希望聚合 Kubernetes 工作线程节点中的 StatsD 指标,或者您担心提供整个集群中的所有 StatsD 指标的单个 CloudWatch 代理的可扩展性问题,我们建议使用该方法。

    如果您选择该方法,并希望 CloudWatch 代理作为 StatsD 侦听器并收集 Kubernetes 指标,请按照设置 CloudWatch 代理以收集集群指标中的步骤进行操作,并确保执行可选的步骤以设置 StatsD。如果这样做,您可以跳过本节的其余部分。

  • 方法 3:将 CloudWatch 代理部署为附加容器。如果不希望在 pod 之间聚合 StatsD 指标,我们建议您使用该方法。

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

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

为 CloudWatch 创建命名空间

  1. 运行以下命令以将命名空间 YAML 下载到 kubectl 客户端主机中。

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/kubernetes-monitoring/cloudwatch-namespace.yaml
  2. 运行以下命令以创建 amazon-cloudwatch 命名空间。

    kubectl apply -f cloudwatch-namespace.yaml

步骤 2:为 StatsD 创建 ConfigMap

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

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

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

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/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。

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/statsd/cwagent-statsd-deployment.yaml
  2. 运行以下命令以部署 CloudWatch 代理。

    kubectl apply -f cwagent-statsd-deployment.yaml
  3. 运行以下命令以验证部署。

    kubectl get pods -n amazon-cloudwatch

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

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

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

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

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/statsd/cwagent-statsd-daemonset.yaml
  2. 运行以下命令以部署 CloudWatch 代理。

    kubectl apply -f cwagent-statsd-daemonset.yaml
  3. 运行以下命令以验证部署。

    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