

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

# Amazon EKS 中的日志记录和监控
<a name="amazon-eks-logging-monitoring"></a>

亚马逊 Elastic Kubernetes Service（亚马逊 EKS） CloudWatch 与 Kubernetes 控制平面的日志集成。控制平面由 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) 将你的容器日志发送到 Logs。 CloudWatch 

CloudWatch Container Insights 为集群、节点、容器、任务和服务级别的 Amazon EKS 提供了全面的指标监控解决方案。Amazon EKS 还支持使用 [Promethe](https://prometheus.io/) us 捕获指标的多种选项。Amazon EKS 控制平面[提供了一个以 Prometheus 格式公开指标的指标终端节点](https://docs.aws.amazon.com//eks/latest/userguide/prometheus.html)。您可以将 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 代理，方法与使用分销商和状态管理器的 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 容器见解以捕获每个 Amazon EKS 节点的这些日志。

容器被分组为 Kubernetes 集群中的 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/)，并计划在你的 Kubernetes 节点上运行。大多数容器化应用程序写入标准输出和标准错误，容器引擎将输出重定向到日志驱动程序。在 Kubernetes 中，容器日志位于节点上的`/var/log/pods`目录中。您可以配置 CloudWatch 和容器见解来捕获每个 Amazon EKS 容器的这些日志。

## 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容器见解](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs.html)来捕获 Amazon EKS 的日志和指标。Container Insights 使用 CloudWatch 代理实现集群、节点和 pod 级别的指标，以及用于日志捕获的 Fluent Bit 或 Fluentd。 CloudWatch容器见解还提供自动仪表板，其中包含您捕获的 CloudWatch 指标的分层视图。容器见解部署为 CloudWatch DaemonSet 在每个 Amazon EKS 节点上运行 DaemonSet 的 Fluent Bit。Container Insights 不支持 Fargate 节点，因为这些节点由管理 AWS 且不支持。 DaemonSets本指南中单独介绍了 Amazon EKS 的 Fargate 日志记录。

 下表显示了 Amazon E CloudWatch KS 的[默认 Fluentd 或 Fluent Bit 日志捕获配置捕获的日志](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html)组和日志。


|  |  | 
| --- |--- |
| /aws/containerinsights/Cluster\$1Name/application | 所有日志文件都已输入/var/log/containers。该目录提供了指向目录结构中所有 Kubernetes 容器日志的/var/log/pods符号链接。这将捕获写入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 | kubelet.service、kubeproxy.service 和 docker.service 的 /var/log/journal 中的日志。 | 

如果您不想使用带有 Fluent Bit 或 Fluentd 的 Container Insights 进行日志记录，则可以使用安装在 Amazon EKS 节点上的 CloudWatch 代理来捕获节点和容器日志。Amazon EKS 节点是 EC2 实例，这意味着您应该将它们包含在适用于 Amazon EC2 的标准系统级日志记录方法中。如果您使用分销商和状态管理器安装代理，则 CloudWatch 代理的安装、配置和更新中还包括 Amazon EKS 节点。 CloudWatch 

下表显示了特定于 Kubernetes 的日志，如果您没有使用带有 Fluent Bit 或 Fluentd 的容器见解进行日志记录，则必须捕获这些日志。


|  |  | 
| --- |--- |
| /var/log/containers | 该目录提供了指向目录结构下所有 Kubernetes 容器日志的/var/log/pods符号链接。这可以有效地捕获写入stdout或的应用程序容器日志stderr。这包括 Kubernetes 系统容器的日志aws-vpc-cni-init，例如、kube-proxy和。coreDNS重要：如果您使用的是容器见解，则不需要这样做。 | 
| var/log/aws-routed-eni/ipamd.log/var/log/aws-routed-eni/plugin.log | L-IPAM 守护程序的日志可以在这里找到 | 

您必须确保 Amazon EKS 节点安装并配置 CloudWatch 代理以发送相应的系统级日志和指标。但是，亚马逊 EKS 优化的 AMI 不包括 Systems Manager 代理。通过使用[启动模板](https://docs.aws.amazon.com//eks/latest/userguide/launch-templates.html)，您可以自动安装 Systems Manager 代理并使用通过用户数据部分实现的启动脚本来捕获重要的 Amazon EKS 特定日志的默认 CloudWatch 配置。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)，以自动安装和 CloudWatch 配置 Systems Manager 代理。您可以自定义并使用 ama [zon\$1eks\$1managed\$1node\$1group\$1launch\$1config.yaml CloudFormation 模板来创建启动模板，该模板用于安装 Systems Manager 代 CloudWatch 理、代理，还可以将 Amaz](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/eks/amazon_eks_managed_node_group_launch_config.yaml) on 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 集群和 [Bottlerock](https://aws.amazon.com//bottlerocket/) et 上运行 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 上登录亚马逊 EKS
<a name="eks-fargate-logging"></a>

借助 Fargate 上的 Amazon EKS，您无需分配或管理 Kubernetes 节点即可部署 Pod。这样就无需为 Kubernetes 节点捕获系统级日志。要从 Fargate 吊舱中捕获日志，你可以使用 Fluent Bit 将日志直接转发到。 CloudWatch这使您 CloudWatch 无需进一步配置即可自动将日志路由到 Fargate 上的 Amazon EKS 容器，也无需为 Fargate 上的 Amazon EKS 容器设置边车容器。有关这方面的更多信息，请参阅亚马逊 EKS 文档中的 [Fargate 登录](https://docs.aws.amazon.com//eks/latest/userguide/fargate-logging.html)和博客上的 Fr [uent Bit for Amazon EKS](https://aws.amazon.com//blogs/containers/fluent-bit-for-amazon-eks-on-aws-fargate-is-here/)。 AWS 此解决方案基于在 Farg `STDOUT` ate 上为 Amazon EKS 集群建立的 Fluent Bit 配置，捕获容器中的和 `STDERR` input/output (I/O) 流，并 CloudWatch 通过 Fruent Bit 将其发送到。

# 亚马逊 EKS 和 Kubernetes 的指标
<a name="kubernetes-eks-metrics"></a>

Kubernetes 提供了一个指标 API，允许您访问资源使用率指标（例如，节点和 Pod 的 CPU 和内存使用情况），但该 API 仅提供 point-in-time信息，不提供历史指标。[Kubernetes 指标服务器通常用于 Amazon EKS](https://github.com/kubernetes-sigs/metrics-server) [和 Kubernetes 部署，以汇总指标，提供有关指标的短期历史信息，并支持横向 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 还可以将容器见解配置为为您的 Amazon EKS 节点和 pod 提供全面的指标捕获、分析和警报。

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

Kubernetes 使用 HTTP API 端点以 Prometheus 格式公开控制平面指标。`/metrics`[你应该在你的 Kubernetes 集群中安装 Prometheus，以便使用网络浏览器绘制和查看这些指标。](https://prometheus.io/)你也可以将 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 指标[服务器容器，你可以在 Kubernetes 集群](https://github.com/kubernetes-sigs/metrics-server)上[部署和运行这些容器，以获取集群、节点和](https://docs.aws.amazon.com//eks/latest/userguide/metrics-server.html) pod 级别的 CPU 和内存统计信息。这些指标用于[水平吊舱自动扩缩器和[垂直](https://docs.aws.amazon.com/eks/latest/userguide/vertical-pod-autoscaler.html)吊舱自动扩缩器](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)。 CloudWatch 也可以提供这些指标。

如果您使用 Kubernetes [控制面板或水平和垂直容器自动扩缩器，则应安装 Kubernetes](https://github.com/kubernetes/dashboard) 指标服务器。Kubernetes 控制面板可帮助您浏览和配置 Kubernetes 集群、节点、容器和相关配置，并从 Kubernetes 指标服务器查看 CPU 和内存指标。

Kubernetes 指标服务器提供的指标不能用于非自动扩展目的（例如，监控）。这些指标用于 point-in-time分析，而不是历史分析。Kubernetes 控制面板部署用于在短时间内存储`dashboard-metrics-scraper`来自 Kubernetes 指标服务器的指标。

Container Insights 使用在 Kubernetes 中运行的 CloudWatch 代理的容器化版本 DaemonSet 来发现集群中所有正在运行的容器并提供节点级指标。它收集性能堆栈每一层的性能数据。您可以使用快速入门中的 AWS 快速入门或单独配置容器见解。Quick Start 使用 CloudWatch 代理设置指标监控和使用 Fluent Bit 进行日志记录，因此您只需要部署一次即可进行日志记录和监控。

由于 Amazon EKS 节点是 EC2 实例，因此除了容器洞察捕获的指标外，您还应使用您为 Amazon EC2 定义的标准来捕获系统级指标。您可以使用本指南[为 CloudWatch 代理部署和配置设置状态管理器和分发服务器](install-cloudwatch-systems-manager.md#set-up-systems-manager-distributor)部分中的相同方法为您的 Amazon EKS 集群安装和配置 CloudWatch 代理。您可以更新您的 Amazon EKS 特定 CloudWatch配置文件以包含指标以及您的 Amazon EKS 特定日志配置。

[支持 Prometheus 的 CloudWatch 代理可以自动从支持的容器化工作负载和系统中发现和抓取 Prometheus 指标。](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus.html)它会将它们作为嵌入式指标格式的 CloudWatch 日志摄取，以便使用 L CloudWatch ogs Insights 进行分析，并自动创建 CloudWatch指标。

**重要**  
您必须[部署 CloudWatch 代理的专用版本](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup.html#ContainerInsights-Prometheus-Setup-install-agent)才能收集 Prometheus 指标。这是与为 Container Insights 部署的 CloudWatch 代理不同的代理。您可以使用 [prometheus\$1jmx 示例 J](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/tree/main/examples/eks/prometheus_jmx) ava 应用程序（其中包括代理 CloudWatch 和 Amazon EKS 容器部署的部署和配置文件）来演示 Prometheus 指标发现。有关更多信息，请参阅文档中的[在 Amazon EKS 和 Kubernetes 上设置 Java/JMX 示例工作负载](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Sample-Workloads-javajmx.html)。 CloudWatch您还可以将 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 容器中的边车容器](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Generation_CloudWatch_Agent.html)。 CloudWatch 代理配置存储为 Kubernetes， ConfigMap 并由您的 CloudWatch 代理 sidecar 容器读取以启动嵌入式指标格式端点。

您还可以将应用程序设置为 Prometheus 目标，并在支持 Prometheus 的支持下配置 CloudWatch代理，以发现、抓取和提取您的指标。 CloudWatch例如，您可以将[开源 JMX 导出器与 J](https://github.com/prometheus/jmx_exporter) ava 应用程序一起使用，公开 JMX Beans 供代理使用 Prometheus。 CloudWatch 

如果您不想使用嵌入式指标格式，也可以使用 [AWS API](https://docs.aws.amazon.com//AmazonCloudWatch/latest/APIReference/Welcome.html) 或 [AWS SDK](https://aws.amazon.com/developer/tools/) 创建和更新 CloudWatch指标。但是，我们不建议使用这种方法，因为它将监控和应用程序逻辑混为一谈。

## Fargate 上亚马逊 EKS 的指标
<a name="metrics-fargate-eks-workloads"></a>

Fargate 会自动配置 Amazon EKS 节点来运行你的 Kubernetes pod，因此你无需监控和收集节点级指标。但是，您必须监控在 Fargate 上的 Amazon EKS 节点上运行的 Pod 的指标。Fargate 上的 Amazon EKS 目前不支持容器见解，因为它需要以下目前不支持的功能：
+ DaemonSets 目前不支持。Container Insights 是通过 DaemonSet 在每个集群节点上以身份运行 CloudWatch 代理来部署的。
+ 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 节点的吊舱级别指标。由于 Prometheus 需要永久存储，因此如果您使用亚马逊弹性文件系统 (Amazon EFS) 进行永久存储，则可以在 Fargate 上部署 Prometheus。您也可以在亚马逊 EC2 支持的节点上部署 Prometheus。有关更多信息，请参阅博[客上关于 AWS Fargate 使用 Prometheus 和 Grafana 的监控 Amazon EKS。](https://aws.amazon.com//blogs/containers/monitoring-amazon-eks-on-aws-fargate-using-prometheus-and-grafana/) AWS 