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

将 FluentD 设置为 DaemonSet 以将日志发送到 CloudWatch Logs

CloudWatch Container Insights isn't released yet. It's in preview and is subject to change. The preview is open to all AWS accounts. You do not need to request access.

在以下步骤中,您将 FluentD 设置为 DaemonSet 以将日志发送到 CloudWatch Logs。在完成该步骤时,FluentD 将创建以下日志组(如果尚不存在)。

日志组名称 日志源

/aws/containerinsights/Cluster_Name/application

/var/log/containers 中的所有日志文件

/aws/containerinsights/Cluster_Name/host

/var/log/dmesg/var/log/secure/var/log/messages 中的日志

/aws/containerinsights/Cluster_Name/dataplane

/var/log/journal 中的日志

步骤 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:安装 FluentD

下载 FluentD 以开始执行该过程。在完成这些步骤时,部署将在集群上创建以下资源:

  • amazon-cloudwatch 命名空间中名为 fluentd 的服务账户。该服务账户用于运行 FluentD DaemonSet。有关更多信息,请参阅《Kubernetes 参考》中的管理服务账户

  • amazon-cloudwatch 命名空间中名为 fluentd 的集群角色。该集群角色为 fluentd 服务账户授予有关 pod 日志的 getlistwatch 权限。有关更多信息,请参阅《Kubernetes 参考》中的 API 概述

  • amazon-cloudwatch 命名空间中的名为 fluentd-config 的 ConfigMap。该 ConfigMap 包含由 FluentD 使用的配置。有关更多信息,请参阅《Kubernetes 任务》文档中的配置 Pod 以使用ConfigMap

安装 FluentD

  1. 运行以下命令以下载 FluentD 部署配置。

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/fluentd/fluentd.yml
  2. 使用集群名称和日志将发送到的 AWS 区域创建一个名为 cluster-info 的 ConfigMap。运行以下命令,并使用您的集群和区域名称更新占位符。

    kubectl create configmap cluster-info \ --from-literal=cluster.name=cluster_name \ --from-literal=logs.region=region_name -n amazon-cloudwatch
  3. 运行以下命令以将 FluentD DaemonSet 部署到集群中。

    kubectl apply -f fluentd.yml
  4. 运行以下命令以验证部署。每个节点应具有一个名为 fluentd-cloudwatch-* 的 pod。

    kubectl get pods -n amazon-cloudwatch

步骤 3:验证 FluentD 设置

要验证您的 FluentD 设置,请使用以下步骤。

验证 Container Insights 的 FluentD 设置

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格中,选择 Logs。确保您位于将 FluentD 部署到您的容器的区域中。

    在该区域上的日志组列表中,您将会看到以下内容:

    • /aws/containerinsights/Cluster_Name/application

    • /aws/containerinsights/Cluster_Name/host

    • /aws/containerinsights/Cluster_Name/dataplane

    如果看到这些日志组,则已验证 FluentD 设置。

故障排除

如果您没有看到这些日志组并且查看的是正确区域,请检查 FluentD DaemonSet pod 日志以查找错误。

运行以下命令,并确保状态为 Running

kubectl get pods -n amazon-cloudwatch

在上一命令的结果中,记下以 fluentd-cloudwatch 开头的 pod 名称。在以下命令中使用该 pod 名称。

kubectl logs pod_name -n amazon-cloudwatch

如果日志具有与 IAM 权限相关的错误,请检查附加到集群节点的 IAM 角色。有关运行 Amazon EKS 集群所需的权限的更多信息,请参阅 Amazon EKS 用户指南 中的 Amazon EKS IAM 策略、角色和权限

如果 pod 状态为 CreateContainerConfigError,请运行以下命令以获取确切的错误。

kubectl describe pod pod_name -n amazon-cloudwatch