

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

# 在 Amazon EKS 上記錄和監控
<a name="amazon-eks-logging-monitoring"></a>

Amazon Elastic Kubernetes Service (Amazon EKS) 與 Kubernetes 控制平面的 CloudWatch Logs 整合。控制平面由 Amazon EKS 做為受管服務提供，您可以[開啟記錄功能，而無需安裝 CloudWatch 代理程式](https://docs.aws.amazon.com//eks/latest/userguide/control-plane-logs.html)。也可以部署 CloudWatch 代理程式來擷取 Amazon EKS 節點和容器日誌。[Fluent Bit 和 Fluentd](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) 也支援將您的容器日誌傳送至 CloudWatch Logs。

CloudWatch Container Insights 在叢集、節點、Pod、任務和服務層級為 Amazon EKS 提供全面的指標監控解決方案。Amazon EKS 也支援使用 [Prometheus](https://prometheus.io/) 擷取指標的多個選項。Amazon EKS 控制平面[提供指標端點](https://docs.aws.amazon.com//eks/latest/userguide/prometheus.html)，以 Prometheus 格式公開指標。您可以將 Prometheus 部署至 Amazon EKS 叢集，以使用這些指標。

除了使用其他 [Prometheus 端點之外，您也可以設定 CloudWatch 代理程式來抓取 Prometheus 指標](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup-configure.html)並建立 CloudWatch 指標。[Prometheus 的 Container Insights 監控](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus.html)也可以自動從支援的容器化工作負載和系統探索和擷取 Prometheus 指標。

您可以在 Amazon EKS 節點上安裝和設定 CloudWatch 代理程式，方法類似於搭配 Distributor 和 State Manager 用於 Amazon EC2 的方法，讓您的 Amazon EKS 節點與您的標準系統記錄和監控組態保持一致。

# 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。

# Amazon EKS 和 Kubernetes 的指標
<a name="kubernetes-eks-metrics"></a>

Kubernetes 提供指標 API，可讓您存取資源用量指標 （例如節點和 Pod 的 CPU 和記憶體用量），但 API 僅提供point-in-time資訊，不提供歷史指標。[Kubernetes 指標伺服器](https://github.com/kubernetes-sigs/metrics-server)通常用於 Amazon EKS 和 Kubernetes 部署，以彙總指標、提供有關指標的短期歷史資訊，以及支援 [Horizontal Pod Autoscaler ](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)等功能。

Amazon EKS 透過 Kubernetes API 伺服器以 [ Prometheus 格式公開控制平面指標，](https://docs.aws.amazon.com//eks/latest/userguide/prometheus.html)CloudWatch 可以擷取和擷取這些指標。CloudWatch 和 Container Insights 也可以設定為為您的 Amazon EKS 節點和 Pod 提供全面的指標擷取、分析和警示。

## Kubernetes 控制平面指標
<a name="kubernetes-control-plane-metrics"></a>

Kubernetes 使用 `/metrics` HTTP API 端點，以 Prometheus 格式公開控制平面指標。您應該在 Kubernetes 叢集中安裝 [Prometheus](https://prometheus.io/)，以使用 Web 瀏覽器繪製和檢視這些指標。您也可以將 Kubernetes API 伺服器[公開的指標擷取](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup-configure.html#ContainerInsights-Prometheus-Setup-new-exporters)至 CloudWatch。

## Kubernetes 的節點和系統指標
<a name="kubernetes-node-system-metrics"></a>

Kubernetes 提供 Prometheus [指標伺服器](https://github.com/kubernetes-sigs/metrics-server) Pod，您可以在叢集、節點和 Pod 層級 CPU 和記憶體統計資料的 Kubernetes 叢集上[部署和執行](https://docs.aws.amazon.com//eks/latest/userguide/metrics-server.html)。這些指標會與 [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) 和 [Vertical Pod Autoscaler ](https://docs.aws.amazon.com/eks/latest/userguide/vertical-pod-autoscaler.html)搭配使用。CloudWatch 也可以提供這些指標。

如果您使用 Kubernetes Dashboard [或水平和垂直 Pod 自動擴展器，則應安裝 Kubernetes](https://github.com/kubernetes/dashboard) Metrics Server。Kubernetes Dashboard 可協助您瀏覽和設定 Kubernetes 叢集、節點、Pod 和相關組態，並從 Kubernetes Metrics Server 檢視 CPU 和記憶體指標。

Kubernetes Metrics Server 提供的指標無法用於非自動擴展目的 （例如監控）。這些指標適用於point-in-time分析，而非歷史分析。Kubernetes Dashboard 會部署 `dashboard-metrics-scraper`，以在短時間內從 Kubernetes Metrics Server 存放指標。

Container Insights 使用在 Kubernetes DaemonSet 中執行的 CloudWatch 代理程式的容器化版本，來探索叢集中的所有執行中容器，並提供節點層級指標。它會收集效能堆疊每一層的效能資料。您可以使用 Quick Starts 中的 AWS Quick Start 或分別設定 Container Insights。Quick Start 會使用 CloudWatch 代理程式設定指標監控，並使用 Fluent Bit 記錄，因此您只需要部署一次即可記錄和監控。

由於 Amazon EKS 節點是 EC2 執行個體，除了 Container Insights 擷取的指標之外，您應該使用為 Amazon EC2 定義的標準來擷取系統層級指標。您可以從本指南的 [設定 CloudWatch 代理程式部署和組態的 State Manager 和 Distributor](install-cloudwatch-systems-manager.md#set-up-systems-manager-distributor)區段使用相同的方法來安裝和設定 Amazon EKS 叢集的 CloudWatch 代理程式。您可以更新 Amazon EKS 特定的 CloudWatch 組態檔案，以包含指標以及 Amazon EKS 特定的日誌組態。

具有 Prometheus 支援的 CloudWatch 代理程式可以自動從[支援的容器化工作負載和系統中探索和](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus.html)抓取 Prometheus 指標。它以內嵌指標格式將其擷取為 CloudWatch Logs Insights 進行分析，並自動建立 CloudWatch 指標。

**重要**  
您必須[部署 CloudWatch 代理程式的專用版本](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup.html#ContainerInsights-Prometheus-Setup-install-agent)，才能收集 Prometheus 指標。 CloudWatch 這是與針對 Container Insights 部署的 CloudWatch 代理程式不同的代理程式。您可以使用 [prometheus\$1jmx](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/tree/main/examples/eks/prometheus_jmx) 範例 Java 應用程式，其中包含 CloudWatch 代理程式和 Amazon EKS Pod 部署的部署和組態檔案，以示範 Prometheus 指標探索。如需詳細資訊，請參閱 CloudWatch 文件中的在 [Amazon EKS 和 Kubernetes 上設定 Java/JMX 範例工作負載](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Sample-Workloads-javajmx.html)。您也可以設定 CloudWatch 代理程式，從 Amazon EKS 叢集中執行的其他 Prometheus 目標擷取指標。

## 應用程式指標
<a name="application-metrics-eks"></a>

您可以使用 [CloudWatch 內嵌指標格式建立自己的自訂指標。](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html)若要擷取內嵌指標格式陳述式，您需要將內嵌指標格式項目傳送至內嵌指標格式端點。CloudWatch 代理程式可以設定為 [Amazon EKS Pod 中的附屬容器](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Generation_CloudWatch_Agent.html)。CloudWatch 代理程式組態會儲存為 Kubernetes ConfigMap，並由 CloudWatch 代理程式附屬容器讀取，以啟動內嵌指標格式端點。

您也可以將應用程式設定為 Prometheus 目標，並透過 Prometheus 支援設定 CloudWatch 代理程式，以探索、抓取指標並將其擷取至 CloudWatch。例如，您可以將[開放原始碼 JMX 匯出工具](https://github.com/prometheus/jmx_exporter)與 Java 應用程式搭配使用，公開 CloudWatch 代理程式用於 Prometheus 消耗的 JMX Beans。

如果您不想使用內嵌指標格式，也可以使用 [AWS API](https://docs.aws.amazon.com//AmazonCloudWatch/latest/APIReference/Welcome.html) 或 [AWS SDK](https://aws.amazon.com/developer/tools/) 建立和更新 CloudWatch 指標。不過，我們不建議使用此方法，因為它會混合監控和應用程式邏輯。

## Fargate 上的 Amazon EKS 指標
<a name="metrics-fargate-eks-workloads"></a>

Fargate 會自動佈建 Amazon EKS 節點來執行 Kubernetes Pod，因此您不需要監控和收集節點層級指標。不過，您必須監控 Fargate 上 Amazon EKS 節點上執行的 Pod 指標。Container Insights 目前不適用於 Fargate 上的 Amazon EKS，因為它需要目前不支援的下列功能：
+ 目前不支援 DaemonSets。Container Insights 透過在每個叢集節點上執行 CloudWatch 代理程式做為 DaemonSet 部署。
+ 不支援 HostPath 持久性磁碟區。CloudWatch 代理程式容器使用 hostPath 持久性磁碟區做為收集容器指標資料的先決條件。
+ Fargate 可防止特權容器和主機資訊的存取。

您可以使用 [Fargate 的內建日誌路由器](https://docs.aws.amazon.com//eks/latest/userguide/fargate-logging.html)，將內嵌指標格式陳述式傳送至 CloudWatch。日誌路由器使用 Fluent Bit，其具有可設定為支援內嵌指標格式陳述式的 CloudWatch 外掛程式。

您可以在 Amazon EKS 叢集中部署 Prometheus 伺服器，以從 Fargate 節點收集指標，藉此擷取和擷取 Fargate 節點的 Pod 層級指標。由於 Prometheus 需要持久性儲存，如果您使用 Amazon Elastic File System (Amazon EFS) 進行持久性儲存，則可以在 Fargate 上部署 Prometheus。您也可以在 Amazon EC2 支援的節點上部署 Prometheus。如需詳細資訊，請參閱部落格上的 AWS [AWS Fargate 使用 Prometheus 和 Grafana 監控 上的 Amazon EKS](https://aws.amazon.com//blogs/containers/monitoring-amazon-eks-on-aws-fargate-using-prometheus-and-grafana/)。