View a markdown version of this page

Amazon EKS 中的記錄類型 - AWS 方案指引

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

Amazon EKS 中的記錄類型

在 Amazon EKS 中,記錄涉及擷取、儲存和分析 Kubernetes 叢集不同元件所產生的各種日誌資料類型,包括:

若要有效管理 Amazon EKS 環境中的日誌,您通常會採用 AWS 服務第三方工具和最佳實務的組合。這可能包括使用 Amazon CloudWatchFluent BitElasticsearchKibana 和其他記錄和分析工具來收集、存放和視覺化日誌資料。

以下各節探討在 Amazon EKS 中記錄的各種層面,包括實作 Kubernetes 叢集中完整記錄策略的最佳實務、工具和技術 AWS。

系統日誌

Amazon EKS 中基礎 EC2 執行個體或 Fargate 節點的記錄涉及不同的方法,具體取決於節點類型。

若要在 Amazon EKS 中實作 EC2 執行個體的記錄,您可以使用下列工具:

  • CloudWatch 代理程式:在您的 EC2 執行個體上安裝和設定 CloudWatch 代理程式。將其設定為收集系統日誌,例如 /var/log/messages/var/log/secure。您可以使用使用者資料指令碼或組態管理工具來自動化此程序。

  • Fluent Bit:將 Fluent Bit 部署為 DaemonSet,以收集所有節點的日誌。將其設定為將日誌轉送至 CloudWatch Logs 或其他集中式日誌系統。

  • Container Insights:在您的 EKS 叢集中啟用 Container Insights,以自動從 EC2 執行個體收集指標和日誌。

  • 自訂指令碼:開發自訂指令碼以收集特定日誌,並將其傳送至您偏好的日誌目的地。

  • SSM 代理程式:使用 AWS Systems Manager 代理程式 (SSM 代理程式) 收集日誌並將其轉送至 CloudWatch Logs。

若要在 Amazon EKS 中實作 Fargate 節點的記錄,請使用下列工具:

  • Fargate 記錄:Fargate 會自動從您的容器收集 stdoutstderr 日誌。設定 Fargate 設定檔,將這些日誌傳送至 CloudWatch Logs。

  • 適用於 Fargate 的 Fluent Bit: AWS 提供專門用於 Fargate 記錄的 Fluent Bit 映像。在 Fargate Pod 中將其部署為附屬容器,以收集和轉送日誌。

  • 適用於 Fargate 的 Container Insights:啟用 Container Insights 以從 Fargate 節點收集指標和日誌。

Kubernetes 元件日誌

從 Amazon EKS 中的 API 伺服器、排程器和控制器管理員等 Kubernetes 元件收集日誌,需要稍微不同於應用程式記錄的方法。這些元件會做為由 管理的 Amazon EKS 控制平面的一部分執行 AWS。以下是您可以收集和存取這些日誌的方式:

  • 啟用控制平面記錄:您可以透過 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 或基礎設施即程式碼 (IaC) 工具,例如 AWS CloudFormation或 Terraform,為您的 EKS 叢集啟用控制平面記錄。當您啟用控制平面記錄時,日誌會傳送至 Amazon CloudWatch Logs。您可以在/aws/eks/<cluster-name>/cluster日誌群組的 CloudWatch 主控台中檢視它們。在此日誌群組中,每個控制平面元件都有自己的日誌串流,如下所示:

    串流名稱 Description
    kube-apiserver Kubernetes API 伺服器日誌
    kube-scheduler 排程器決策日誌
    kube-controller-manager 控制器管理員日誌
    驗證器 IAM 驗證器日誌
    audit Kubernetes 稽核日誌 (必須明確啟用)

    若要檢視特定元件的日誌,請導覽至叢集日誌群組,並依目標日誌串流名稱篩選。

  • 使用 CloudWatch Logs Insights:您可以使用 CloudWatch Logs Insights 對日誌執行複雜的查詢。

  • 匯出日誌至 Amazon S3:對於長期儲存或進一步分析,您可以將日誌匯出至 Amazon Simple Storage Service (Amazon S3)

  • 使用第三方工具:您可以使用 Fluent Bit 等工具收集這些日誌,並將其轉送至 Elasticsearch 或 Splunk 等其他日誌系統。

  • 使用 AWS CloudTrailAWS CloudTrail服務可以提供對 EKS 叢集進行 API 呼叫的其他洞見。

容器執行期日誌

在 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 警示或使用 Prometheus 等工具來監控容器執行期日誌中的特定模式或問題。請考慮使用與 Kubernetes 和 Amazon EKS 完美整合的第三方記錄解決方案,例如 Datadog、Splunk 或 Elastic Stack (ELK Stack)。使用日誌彙總工具從多個來源收集日誌,並將其轉送至集中式日誌系統。

應用程式記錄

Amazon EKS 中的應用程式日誌是維護和疑難排解應用程式的重要部分。若要在 Amazon EKS 中實作應用程式記錄,您可以從下列選項中選擇:

  • 將日誌寫入 stdout/stderr:處理應用程式日誌最簡單且最原生的 Kubernetes 方法是將日誌寫入 stdoutstderr。Kubernetes 會自動擷取這些串流。

  • 實作日誌彙總:使用 Fluent Bit 等日誌彙總器,從您的所有 Pod 收集日誌。

  • 設定日誌路由:設定您的日誌彙總器,將日誌路由到所需的目的地 (例如 CloudWatch Logs 或 Elasticsearch)。

  • 使用 CloudWatch Container Insights:啟用 Container Insights 進行全面的記錄和監控。