

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

# Amazon EKS 的日誌記錄
<a name="kubernetes-eks-logging"></a>

Kubernetes 記錄可以分為控制平面記錄、節點記錄和應用程式記錄。[Kubernetes 控制平面](https://kubernetes.io/docs/concepts/overview/components/#control-plane-components)是一組元件，可管理 Kubernetes 叢集並產生用於稽核和診斷目的的日誌。使用 Amazon EKS，您可以[開啟不同控制平面元件的日誌](https://docs.aws.amazon.com//eks/latest/userguide/control-plane-logs.html)，並將其傳送至 CloudWatch。

Kubernetes 也會在每個執行 Pod 的 Kubernetes 節點`kube-proxy`上執行系統元件，例如 `kubelet`和 。這些元件會在每個節點內寫入日誌，您可以設定 CloudWatch 和 Container Insights 來擷取每個 Amazon EKS 節點的這些日誌。

容器會在 Kubernetes 叢集內分組為 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/)，並排程在您的 Kubernetes 節點上執行。大多數容器化應用程式會寫入標準輸出和標準錯誤，而容器引擎會將輸出重新導向至記錄驅動程式。在 Kubernetes 中，容器日誌位於節點的 `/var/log/pods`目錄中。您可以設定 CloudWatch 和 Container Insights 來擷取每個 Amazon EKS Pod 的這些日誌。

## Amazon EKS 控制平面記錄
<a name="eks-control-plane-logging"></a>

Amazon EKS 叢集包含 Kubernetes 叢集的高可用性、單一租用戶控制平面，以及執行容器的 Amazon EKS 節點。控制平面節點會在 管理的 帳戶中執行 AWS。Amazon EKS 叢集控制平面節點已與 CloudWatch 整合，您可以開啟特定控制平面元件的記錄。

日誌會針對每個 Kubernetes 控制平面元件執行個體提供。 會 AWS 管理控制平面節點的運作狀態，並提供 [Kubernetes 端點的服務層級協議 (SLA)](https://aws.amazon.com//eks/sla/)。

## Amazon EKS 節點和應用程式記錄
<a name="eks-node-application-logging"></a>

我們建議您使用 [CloudWatch Container Insights](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs.html) 來擷取 Amazon EKS 的日誌和指標。Container Insights 使用 CloudWatch 代理程式和 Fluent Bit 或 Fluentd 實作叢集、節點和 Pod 層級指標，以將日誌擷取至 CloudWatch。Container Insights 也提供自動儀表板，其中包含所擷取 CloudWatch 指標的分層檢視。Container Insights 部署為在每個 Amazon EKS 節點上執行的 CloudWatch DaemonSet 和 Fluent Bit DaemonSet。Container Insights 不支援 Fargate 節點，因為節點是由 管理 AWS 且不支援 DaemonSets。本指南會分別介紹 Amazon EKS 的 Fargate 記錄。

 下表顯示由 Amazon EKS 預設 Fluentd 或 Fluent Bit 日誌擷取組態擷取的 CloudWatch 日誌群組和日誌。 [https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html)


|  |  | 
| --- |--- |
| /aws/containerinsights/Cluster\$1Name/application | 中的所有日誌檔案/var/log/containers。此目錄提供/var/log/pods目錄結構中所有 Kubernetes 容器日誌的符號連結。這會擷取寫入 stdout或 的應用程式容器日誌stderr。它還包含 Kubernetes 系統容器的日誌aws-vpc-cni-init，例如 kube-proxy、 和 coreDNS。 | 
| /aws/containerinsights/Cluster\$1Name/host | 來自 /var/log/dmesg、 /var/log/secure和 的日誌/var/log/messages。 | 
| /aws/containerinsights/Cluster\$1Name/dataplane | /var/log/journal 中適用於 kubelet.service、kubeproxy.service 和 docker.service 的日誌。 | 

如果您不想使用 Container Insights 搭配 Fluent Bit 或 Fluentd 進行記錄，您可以使用安裝在 Amazon EKS 節點上的 CloudWatch 代理程式來擷取節點和容器日誌。Amazon EKS 節點是 EC2 執行個體，這表示您應該將其包含在 Amazon EC2 的標準系統層級記錄方法中。如果您使用 Distributor 和 State Manager 安裝 CloudWatch 代理程式，Amazon EKS 節點也會包含在 CloudWatch 代理程式安裝、組態和更新中。

下表顯示 Kubernetes 特有的日誌，如果您未使用 Container Insights 搭配 Fluent Bit 或 Fluentd 進行記錄，則必須擷取這些日誌。


|  |  | 
| --- |--- |
| /var/log/containers | 此目錄提供/var/log/pods目錄結構下所有 Kubernetes 容器日誌的符號連結。這可有效擷取寫入 stdout或 的應用程式容器日誌stderr。這包括 Kubernetes 系統容器的日誌aws-vpc-cni-init，例如 kube-proxy、 和 coreDNS。重要：如果您使用 Container Insights，則不需要這樣做。 | 
| var/log/aws-routed-eni/ipamd.log/var/log/aws-routed-eni/plugin.log | 您可以在此處找到 L-IPAM 協助程式的日誌 | 

您必須確保 Amazon EKS 節點安裝並設定 CloudWatch 代理程式，以傳送適當的系統層級日誌和指標。不過，Amazon EKS 最佳化 AMI 不包含 Systems Manager 代理程式。透過使用[啟動範本](https://docs.aws.amazon.com//eks/latest/userguide/launch-templates.html)，您可以自動化 Systems Manager 代理程式安裝和預設 CloudWatch 組態，以透過使用者資料區段實作的啟動指令碼擷取重要的 Amazon EKS 特定日誌。Amazon EKS 節點使用 Auto Scaling 群組做為[受管節點群組](https://docs.aws.amazon.com//eks/latest/userguide/managed-node-groups.html)或[自我管理節點](https://docs.aws.amazon.com//eks/latest/userguide/worker.html)進行部署。

使用受管節點群組，您可以提供[啟動範本](https://docs.aws.amazon.com//eks/latest/userguide/launch-templates.html)，其中包含使用者資料區段，以自動化 Systems Manager 代理程式安裝和 CloudWatch 組態。您可以自訂並使用 [amazon\$1eks\$1managed\$1node\$1group\$1launch\$1config.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/eks/amazon_eks_managed_node_group_launch_config.yaml) CloudFormation 範本來建立啟動範本，以安裝 Systems Manager 代理程式、CloudWatch 代理程式，也可以將 Amazon EKS 特定記錄組態新增至 CloudWatch 組態目錄。此範本可用於使用infrastructure-as-code(IaC) 方法更新 Amazon EKS 受管節點群組啟動範本。範本的每次更新都會 CloudFormation 佈建新版本的啟動範本。然後，您可以更新節點群組以使用新的範本版本，並讓[受管生命週期程序](https://docs.aws.amazon.com//eks/latest/userguide/managed-node-update-behavior.html)更新您的節點，而不會停機。確定套用至受管節點群組的 IAM 角色和執行個體描述檔包含 `CloudWatchAgentServerPolicy`和 `AmazonSSMManagedInstanceCore` AWS 受管政策。

透過自我管理節點，您可以直接佈建和管理 Amazon EKS 節點的生命週期和更新策略。自我管理節點可讓您在 Amazon EKS 叢集和 [Bottlerocket](https://aws.amazon.com//bottlerocket/) 上執行 Windows 節點，以及其他[選項](https://docs.aws.amazon.com//eks/latest/userguide/eks-compute.html)。您可以使用 CloudFormation 將自我管理節點部署到 Amazon EKS 叢集，這表示您可以使用 Amazon EKS 叢集的 IaC 和受管變更方法。 AWS 提供 [amazon-eks-nodegroup.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/eks/amazon-eks-nodegroup.yaml) CloudFormation 範本，您可以依原狀使用或自訂。範本為叢集中的 Amazon EKS 節點佈建所有必要的資源 （例如，單獨的 IAM 角色、安全群組、Amazon EC2 Auto Scaling 群組和啟動範本）。[amazon-eks-nodegroup.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/eks/amazon-eks-nodegroup.yaml) CloudFormation 範本是更新版本，可安裝所需的 Systems Manager 代理程式、CloudWatch 代理程式，並將 Amazon EKS 特定的記錄組態新增至 CloudWatch 組態目錄。

## Fargate 上的 Amazon EKS 記錄
<a name="eks-fargate-logging"></a>

使用 Fargate 上的 Amazon EKS，您可以部署 Pod，而無需配置或管理您的 Kubernetes 節點。這樣就不需要擷取 Kubernetes 節點的系統層級日誌。若要從 Fargate Pod 擷取日誌，您可以使用 Fluent Bit 將日誌直接轉送至 CloudWatch。這可讓您自動將日誌路由到 CloudWatch，而無需進一步設定，或 Fargate 上 Amazon EKS Pod 的附屬容器。如需詳細資訊，請參閱 Amazon EKS 文件中的 [Fargate 記錄](https://docs.aws.amazon.com//eks/latest/userguide/fargate-logging.html)，以及 AWS 部落格上的[適用於 Amazon EKS 的 Fluent Bit](https://aws.amazon.com//blogs/containers/fluent-bit-for-amazon-eks-on-aws-fargate-is-here/)。此解決方案會從容器擷取 `STDOUT` 和`STDERR`輸入/輸出 (I/O) 串流，並根據 Fargate 上為 Amazon EKS 叢集建立的 Fluent Bit 組態，透過 Fluent Bit 將其傳送至 CloudWatch。