

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

# 登录 Amazon EKS
<a name="logging"></a>

日志记录是管理和维护在 Amazon EKS 上运行的应用程序的关键方面。Amazon EKS 环境中的有效日志记录可帮助开发人员、运营团队和系统管理员获得有关其容器化应用程序及其底层基础设施的行为、性能和运行状况的宝贵见解。

在 Amazon EKS 中实施强大的日志策略是必不可少的，原因有很多：
+ **故障排除**：日志有助于快速识别和诊断问题，从而减少停机时间并提高系统的整体可靠性。
+ **合规性**：许多行业都需要全面的日志记录以进行审计和监管。
+ **安全**：日志分析可以帮助您检测和调查潜在的安全威胁或漏洞。
+ **性能优化**：日志提供有关应用程序和系统性能的见解，因此您可以识别瓶颈并优化资源利用率。
+ **监控和警报**：日志数据可用于设置监控系统并触发针对特定事件或条件的警报。

**Topics**
+ [日志记录的类型](log-types.md)
+ [最佳实践](logging-best-practices.md)
+ [重要注意事项](logging-considerations.md)

# 亚马逊 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 容器见解：启用容器见解以进行全面的日志记录和监控。

# 登录 Amazon EKS 的最佳实践
<a name="logging-best-practices"></a>

以下最佳实践有助于为您的 Amazon EKS 环境创建强大、可扩展且高效的日志系统，并为您的 Kubernetes 集群提供更好的故障排除、监控和整体管理。
+ **集中日志收集**：使用集中式日志解决方案（例如 CloudWatch 日志、Elasticsearch 或第三方服务）来聚合来自所有组件的日志。这为日志分析提供了单一访问点并简化了管理。
+ **实现结构化**日志：使用 JSON 等结构化日志格式，以便更轻松地解析和搜索日志。包括相关的元数据，例如时间戳、日志级别和源标识符。
+ **适当使用日志级别**：在应用程序中实现适当的日志级别（例如`DEBUG``INFO``WARN`、、和`ERROR`）。将生产环境配置为在适当级别进行日志，以避免过多的日志记录。
+ **启用容器日志记录**：将您的容器配置为登录`stdout`和`stderr`。这允许 Kubernetes 捕获这些日志并将其转发到您选择的日志解决方案。
+ **启用应用程序日志记录**：将应用程序配置为向`stdout`日志写入日志，`stderr`而不是写入日志文件。这遵循 [12要素应用程序方法](https://12factor.net/logs)，并符合云原生最佳实践。
+ **使用 Kubernetes DaemonSets 进行日志收集**：部署日志收集代理（例如 Fluent Bit）， DaemonSets 以确保它们在集群中的每个节点上运行。
+ **实施保留策略**：定义和强制执行日志保留政策，以遵守法规并管理存储成本。
+ **安全日志数据**：对传输中的日志和静态日志进行加密。实施访问控制以限制谁可以查看和管理日志。
+ **监控日志摄取**：为日志提取失败或延迟设置警报，以确保持续记录。
+ **使用 Kubernetes 注释和标签**：使用 Kubernetes 注释和标签向日志添加元数据，以提高可搜索性和筛选性。
+ **实现分布式跟踪**：使用分布式跟踪工具（例如[AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html)或 Jaeger）在微服务之间关联日志。
+ **优化日志量**：对记录的内容要有选择性，以避免不必要的成本和性能问题。对大容量、低价值的日志使用采样。
+ **实现日志聚合**：使用 Logstash 等工具汇总来自多个来源的日志，然后再将其发送到中央日志系统。
+ **尽可能 AWS 服务 使用**： CloudWatch 日志和容器见解等服务可与其他服务无缝集成 AWS 服务。
+ **实现日志分析和可视化**：使用 CloudWatch 日志见解、带有 Kibana 的 Elasticsearch 或第三方解决方案等工具进行日志分析和可视化。
+ **实现自动日志分析**：使用机器学习和 AI 驱动的工具自动检测日志中的异常和模式。
+ **记录您的日志策略**：为团队保留关于日志架构、实践和工具的清晰文档。

# 登录 Amazon EKS 的重要注意事项
<a name="logging-considerations"></a>

本节讨论在 Amazon EKS 中实现登录时需要记住的重要注意事项。
+ **性能影响**：过多的日志记录可能会影响应用程序性能。请注意生成的日志的数量和频率。
+ **成本管理**：日志存储和处理可能会产生高昂的成本，尤其是在大规模的情况下。实施日志保留策略，并考虑使用日志聚合来降低成本。
+ **安全性与合规性**：确保日志不包含密码或个人数据等敏感信息。对传输中的日志和静态日志实施加密。在处理日志时，请考虑合规要求，例如《通用数据保护条例》(GDPR) 或《健康保险流通与责任法案》(HIPAA)。
+ **可扩展性**：确保您的日志解决方案可以根据集群大小和日志量进行扩展。考虑使用缓冲和批处理来传输日志。
+ **日志保留**：定义和实施适当的日志保留期。在合规性要求和存储成本之间取得平衡。
+ **访问控制**：为日志访问实施适当的 AWS Identity and Access Management (IAM) 角色和策略。遵循日志管理[的最低权限原则](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_permissions_least_privileges.html)。
+ **日志一致性**：在不同的应用程序和服务中使用一致的日志格式。使用结构化日志可以更轻松地进行解析和分析。
+ **时间同步**：同步所有节点的时间以在日志中获得一致的时间戳。
+ **资源分配**：为日志代理分配适当的资源（例如 CPU 和内存）。监控日志组件的资源使用情况。
+ **Fargate 注意事项**：Fargate 具有与基于 EC2 的节点不同的特定日志记录机制。了解 [Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate-logging.html) 日志记录的局限性和功能。
+ **多租户集群**：在多租户环境中，请确保租户之间的日志正确隔离。
+ **日志解析和分析**：考虑有效的日志分析所需的工具和技能。实现日志解析以提取结构化数据。
+ **监控日志系统**：设置对日志基础架构本身的监控。生成有关记录系统故障或积压的警报。
+ **网络影响**：注意日志传输使用的网络带宽。考虑对日志数据使用压缩。
+ **Kubernetes 事件**：不要忽视作为重要信息来源的 Kubernetes 事件。
+ **控制平面日志记录**：了解启用控制平面日志记录的含义和成本。
+ **调试功能**：确保您的日志解决方案便于调试和故障排除。
+ **与现有工具集成**：考虑一下您的 Amazon EKS 日志解决方案如何与现有监控和警报工具集成。
+ **测试**：定期测试您的日志设置，尤其是在集群升级之后。
+ **文档**：清晰地记录您的日志架构和实践。
+ **日志聚合延迟**：请注意日志聚合中的任何延迟以及它可能如何影响实时监控。