

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EKS 中的記錄類型
<a name="log-types"></a>

在 Amazon EKS 中，記錄涉及擷取、儲存和分析 [Kubernetes](https://kubernetes.io/) 叢集不同元件所產生的各種日誌資料類型，包括：
+ **系統日誌**：基礎 [Amazon Elastic Compute Cloud (Amazon EC2)](https://aws.amazon.com/pm/ec2/) 執行個體或[AWS Fargate](https://aws.amazon.com/fargate/)節點的相關資訊
+ **Kubernetes 元件日誌**：來自核心 Kubernetes 元件的資料，例如 [API 伺服器](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/)、[排程器](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/)和[控制器管理員](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/)
+ **容器執行期日誌**：來自容器執行期的資訊，例如 [Docker](https://www.docker.com/blog/containerd-vs-docker/) 或 [containerd](https://containerd.io/)
+ **應用程式日誌**：來自容器化應用程式的輸出

若要有效管理 Amazon EKS 環境中的日誌，您通常會採用 AWS 服務第三方工具和最佳實務的組合。這可能包括使用 [Amazon 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 Bit](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html)：將 Fluent Bit 部署為 DaemonSet，以收集所有節點的日誌。將其設定為將日誌轉送至 [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 或其他集中式日誌系統。
+ [Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html)：在您的 EKS 叢集中啟用 Container Insights，以自動從 EC2 執行個體收集指標和日誌。
+ 自訂指令碼：開發自訂指令碼以收集特定日誌，並將其傳送至您偏好的日誌目的地。
+ [SSM 代理](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)程式：使用 AWS Systems Manager 代理程式 (SSM 代理程式） 收集日誌並將其轉送至 CloudWatch Logs。

若要在 Amazon EKS 中實作 Fargate 節點的記錄，請使用下列工具：
+ [Fargate 記錄](https://docs.aws.amazon.com/eks/latest/userguide/fargate-logging.html)：Fargate 會自動從您的容器收集 `stdout`和 `stderr` 日誌。設定 Fargate 設定檔，將這些日誌傳送至 CloudWatch Logs。
+ [適用於 Fargate 的 Fluent Bit](https://github.com/aws/aws-for-fluent-bit)： AWS 提供專門用於 Fargate 記錄的 Fluent Bit 映像。在 Fargate Pod 中將其部署為附屬容器，以收集和轉送日誌。
+ [適用於 Fargate 的 Container Insights](https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate)：啟用 Container Insights 以從 Fargate 節點收集指標和日誌。

## Kubernetes 元件日誌
<a name="kubernetes-logs"></a>

從 Amazon EKS 中的 API 伺服器、排程器和控制器管理員等 Kubernetes 元件收集日誌，需要稍微不同於應用程式記錄的方法。這些元件會做為由 管理的 Amazon EKS 控制平面的一部分執行 AWS。以下是您可以收集和存取這些日誌的方式：
+ **啟用控制平面記錄：**您可以透過 AWS 管理主控台、 [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 或基礎設施即程式碼 (IaC) 工具，例如 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)或 Terraform，為您的 EKS 叢集啟用控制平面記錄。當您啟用控制平面記錄時，日誌會傳送至 Amazon CloudWatch Logs。您可以在`/aws/eks/<cluster-name>/cluster`日誌群組的 CloudWatch 主控台中檢視它們。在此日誌群組中，每個控制平面元件都有自己的日誌串流，如下所示：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/amazon-eks-observability-best-practices/log-types.html)

  若要檢視特定元件的日誌，請導覽至叢集日誌群組，並依目標日誌串流名稱篩選。
+ **使用 CloudWatch Logs Insights**：您可以使用 [CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) 對日誌執行複雜的查詢。
+ **匯出日誌至 Amazon S3**：對於長期儲存或進一步分析，您可以將日誌匯出至 Amazon Simple Storage Service [(](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 代理程式以收集容器執行期日誌。
+ 啟用 Container Insights 以收集容器執行期指標和日誌。
+ 使用 Fargate。對於 Fargate 節點，容器執行期日誌會自動收集，並且可以透過 CloudWatch Logs 存取。
+ 使用 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 Logs 或 Elasticsearch)。
+ 使用 CloudWatch Container Insights：啟用 Container Insights 進行全面的記錄和監控。