

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

# 亚马逊 EKS 中的登录类型
<a name="log-types"></a>

在 Amazon EKS 中，日志包括捕获、存储和分析由 [Kubernetes](https://kubernetes.io/) 集群的不同组件生成的各种类型的日志数据，包括：
+ **系统日志**：有关底层[亚马逊弹性计算云 (Amazon EC2) 实例](https://aws.amazon.com/pm/ec2/)或节点的信息 [AWS Fargate](https://aws.amazon.com/fargate/)
+ **Kubernetes 组件日志** [https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/)
+ **容器运行时日志**[：来自容器运行时的信息，例如 [Docker](https://www.docker.com/blog/containerd-vs-docker/) 或 containerd](https://containerd.io/)
+ **应用程序日志**：容器化应用程序的输出

为了有效地管理 Amazon EKS 环境中的日志，您通常会结合使用第三方工具和最佳实践。 AWS 服务这可能包括使用[亚马逊 CloudWatch](https://aws.amazon.com/cloudwatch/)、[Fluent Bit](https://fluentbit.io/)、[Elasticsearch](https://www.elastic.co/elasticsearch)、[Kibana](https://www.elastic.co/kibana) 以及其他日志和分析工具来收集、存储和可视化日志数据。

以下各节探讨了 Amazon EKS 中日志记录的各个方面，包括在 Kubernetes 集群中实施全面日志策略的最佳实践、工具和技术。 AWS

## 系统日志
<a name="system-logs"></a>

在 Amazon EKS 中记录底层 EC2 实例或 Fargate 节点涉及不同的方法，具体取决于节点类型。

要在 Amazon EKS 中实现 EC2 实例的日志记录，您可以使用以下工具：
+ [CloudWatch 代理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance.html)：在您的 EC2 实例上安装和配置 CloudWatch 代理。将其配置为收集系统日志，例如`/var/log/messages`和`/var/log/secure`。您可以使用用户数据脚本或配置管理工具来自动执行此过程。
+ [Fluent Bi](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) t：将 Fluent Bit 部署 DaemonSet 为从所有节点收集日志。将其配置为将日志转发到[CloudWatch 日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)或其他集中式日志系统。
+ [容器见解](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html)：在 EKS 集群中启用容器见解，自动收集来自 EC2 实例的指标和日志。
+ 自定义脚本：开发自定义脚本以收集特定日志并将其发送到您的首选日志目的地。
+ [SSM 代理](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)：使用 AWS Systems Manager 代理（SSM 代理）收集日志并将其转发到日志。 CloudWatch 

要在 Amazon EKS 中实现 Fargate 节点的日志记录，请使用以下工具：
+ [Fargate 日志记录](https://docs.aws.amazon.com/eks/latest/userguide/fargate-logging.html)：Fargate 会自动从您的容器中收集`stdout`和`stderr`记录日志。配置您的 Fargate 个人资料以将这些日志发送到日志。 CloudWatch 
+ [Fargate 的 Fluent Bit： AWS 提供专门用于 Fargat](https://github.com/aws/aws-for-fluent-bit) e 日志的 Fluent Bit 图片。将其作为边车容器部署在 Fargate 吊舱中，以收集和转发日志。
+ [Fargate 容器见解](https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate)：启用容器洞察以收集来自 Fargate 节点的指标和日志。

## Kubernetes 组件日志
<a name="kubernetes-logs"></a>

从 Amazon EKS 中的 API 服务器、调度程序和控制器管理器等 Kubernetes 组件收集日志，需要采用与应用程序日志稍微不同的方法。这些组件作为 Amazon EKS 控制平面的一部分运行，该控制平面由管理 AWS。您可以通过以下方式收集和访问这些日志：
+ **启用控制平面日志记录：**您可以通过 AWS 管理控制台、() 或基础设施即代码 (IaC [AWS CLI) 工具AWS Command Line Interface （](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)例如[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)或 Terraform）为 EKS 集群启用控制平面日志记录。启用控制平面日志记录后，日志将发送到 Amazon CloudWatch Logs。您可以在 CloudWatch 控制台的`/aws/eks/<cluster-name>/cluster`日志组中查看它们。在此日志组中，每个控制平面组件都有自己的日志流，如下所示：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-eks-observability-best-practices/log-types.html)

  要查看特定组件的日志，请导航到集群日志组并按目标日志流名称进行筛选。
+ **使用 CloudWatch 日志见解**：您可以使用 [CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) 对日志执行复杂查询。
+ **将日志导出到 Amazon S3**：为了进行长期存储或进一步分析，您可以将日志导出到亚马逊简单存储服务 [(](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)Amazon S3[)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)。
+ **使用第三方工具**：您可以使用诸如 Fluent Bit 之类的工具来收集这些日志，并将其转发到其他日志系统，例如 Elasticsearch 或 Splunk。
+ **使用 AWS CloudTrail**：该[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)服务可以提供对您的 EKS 集群进行的 API 调用的更多见解。

## 容器运行日志
<a name="runtime-logs"></a>

在 Amazon EKS 中记录容器运行时日志涉及从容器运行时捕获和管理日志，这通常`containerd`适用于 Amazon EKS。以下是在 Amazon EKS 中记录容器运行时日志的方法：
+ 直接访问 Amazon EC2 节点上的日志。对于自行管理的 EC2 节点，您可以从以下位置直接访问主机上的容器运行时日志：
  + `containerd`日志：`/var/log/containers/`
  + Docker 日志（如果你使用的是 Docker 运行时）：`/var/log/docker.log`
+ 使用 DaemonSet 进行日志收集。
+ 将日志收集代理（例如 Fluent Bit）部署 DaemonSet 为，从所有节点收集日志。
+ 将 CloudWatch 代理配置为收集容器运行时日志。
+ 启用 “容器见解” 以收集容器运行时指标和日志。
+ 使用 Fargate。对于 Fargate 节点，容器运行时日志会自动收集，并且可以通过日志进行访问。 CloudWatch 
+ 使用 Fluent Bit 或 Logstash 等工具实现自定义日志解决方案。设置[CloudWatch警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)或使用诸如 Prometheus 之类的工具来监控容器运行时日志中的特定模式或问题。考虑使用与 Kubernetes 和 Amazon EKS 很好地集成的第三方日志解决方案，例如 Datadog、Splunk 或 Elastic Stack（ELK Stack）。使用日志聚合工具从多个来源收集日志，并将其转发到集中式日志系统。

## 应用程序日志
<a name="app-logs"></a>

Amazon EKS 中的应用程序日志是维护应用程序和排除应用程序故障的关键部分。要在 Amazon EKS 中实现应用程序日志记录，您可以从以下选项中进行选择：
+ 将日志写入`stdout`/`stderr`：处理应用程序日志的最简单、最基于 Kubernetes 的方法是将它们写入和。`stdout` `stderr`Kubernetes 会自动捕获这些流。
+ 实现日志聚合：使用诸如 Fluent Bit 之类的日志聚合器从所有 pod 中收集日志。
+ 配置日志路由：配置您的日志聚合器以将日志路由到所需的目的地（例如 CloudWatch 日志或 Elasticsearch）。
+ 使用 CloudWatch 容器见解：启用容器见解以进行全面的日志记录和监控。