Amazon EKS 和 Kubernetes 上的 Container Insights 的快速入门设置 - Amazon CloudWatch

Amazon EKS 和 Kubernetes 上的 Container Insights 的快速入门设置

重要

如果您要在 Amazon EKS 集群上安装 Container Insights,我们建议您使用 Amazon CloudWatch Observability EKS 附加组件进行安装,而不是按照本部分中的说明进行安装。有关更多信息和说明,请参阅 安装 Amazon CloudWatch Observability EKS 附加组件

要完成 Container Insights 的设置,您可以按照本节中的快速入门说明进行操作。如果您要在 Amazon EKS 集群中进行安装,并且在 2023 年 11 月 6 日当天或之后按照本部分中的说明进行操作,则可以在集群中安装针对 Amazon EKS 增强了可观测性的 Container Insights。

重要

在完成本节中的步骤之前,您必须已对 IAM 权限等先决条件进行验证。有关更多信息,请参阅验证 先决条件

或者,您可以按照以下两节中的说明操作:设置 CloudWatch 代理以收集集群指标将日志发送到 CloudWatch Logs。这些章节提供有关 CloudWatch 代理如何与 Amazon EKS 和 Kubernetes 结合使用的更多配置详细信息,但需要您执行更多安装步骤。

在 Container Insights 的原始版本中,收集的指标和摄取的日志将作为自定义指标收费。借助针对 Amazon EKS 增强了可观测性的 Container Insights,Container Insights 指标和日志按每次观测收费,而不是按存储的指标或摄取的日志收费。有关 CloudWatch 定价的信息,请参阅 Amazon CloudWatch 定价

注意

Amazon 现已推出 Fluent Bit 作为 Container Insights 的默认日志解决方案,其性能显着提高。我们建议您使用 Fluent Bit 而不是 Fluentd。

使用 CloudWatch 代理和 Fluent Bit 快速入门

Fluent Bit 有两种配置:优化版本和更类似于 Fluentd 的体验的版本。快速入门配置使用优化版本。有关 Fluentd 兼容配置的详细信息,请参阅 将 Fluent Bit 设置为 DaemonSet 以将日志发送到 CloudWatch Logs

要使用快速入门部署 Container Insights,请输入以下命令。

ClusterName=<my-cluster-name> RegionName=<my-cluster-region> FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On' curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluent-bit-quickstart-enhanced.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/;s/{{region_name}}/'${RegionName}'/;s/{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

在此命令中,my-cluster-name 是 Amazon EKS 或 Kubernetes 集群的名称,my-cluster-region 是在其中发布日志的区域的名称。我们建议您使用在其中部署集群的同一个区域来降低 AWS 出站数据传输成本。

例如,要在名为 MyCluster 的集群上部署 Container Insights 并将日志和指标发布到美国西部(俄勒冈),请输入以下命令。

ClusterName='MyCluster' LogRegion='us-west-2' FluentBitHttpPort='2020' FluentBitReadFromHead='Off' [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On' [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On' curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluent-bit-quickstart-enhanced.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/;s/{{region_name}}/'${LogRegion}'/;s/{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

从 Fluentd 迁移

如果您已配置 Fluentd 并希望迁移到 Fluent Bit,则必须在安装 Fluent Bit 后删除 Fluentd 容器组(pod)。可以使用以下命令删除 Fluentd。

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluentd/fluentd.yaml | kubectl delete -f - kubectl delete configmap cluster-info -n amazon-cloudwatch

删除 Container Insights

如果您想使用快速入门设置删除 Container Insights,请输入以下命令。

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluent-bit-quickstart.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/;s/{{region_name}}/'${LogRegion}'/;s/{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl delete -f -

使用 CloudWatch 代理和 Fluentd 快速入门

如果您已在 Kubernetes 集群中使用 Fluentd,并希望将其扩展为 Container Insights 的日志解决方案,我们会为您提供 Fluentd 配置。

警告

Container Insights 对 Fluentd 的支持目前处于维护模式,这意味着 AWS 不会为 Fluentd 提供任何进一步的更新,我们计划在不久的将来将其弃用。此外,Container Insights 的当前 Fluentd 配置使用的是旧版本的 Fluentd 映像 fluent/fluentd-kubernetes-daemonset:v1.10.3-debian-cloudwatch-1.0,该版本没有最新的改进和安全补丁。有关开源社群支持的最新 Fluentd 映像,请参阅 fluentd-kubernetes-daemonset

如果可能,我们强烈建议您迁移以将 FluentBit 与 Container Insights 结合使用。使用 FluentBit 作为 Container Insights 的日志转发器,可显着提高性能。

有关更多信息,请参阅 将 Fluent Bit 设置为 DaemonSet 以将日志发送到 CloudWatch Logs 您在使用 Fluentd 时出现的差异

要使用快速入门部署 CloudWatch 代理和 Fluentd,请使用以下命令。以下设置包含由社区提供支持,并且 Amazon EKS 版本 1.24 及更高版本支持的 Fluentd 容器映像。只要符合 Fluentd 映像要求,您就可以将该镜像替换为您自己的 Fluentd 映像。有关更多信息,请参阅(可选)将 Fluentd 设置为 DaemonSet 以将日志发送到 CloudWatch Logs

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluentd-quickstart-enhanced.yaml | sed "s/{{cluster_name}}/cluster-name/;s/{{region_name}}/cluster-region/" | kubectl apply -f -

在此命令中,cluster-name 是 Amazon EKS 或 Kubernetes 集群的名称,cluster-region 是在其中发布日志的区域的名称。我们建议您使用在其中部署集群的同一个区域来降低 AWS 出站数据传输成本。

例如,要在名为 MyCluster 的集群上部署 Container Insights 并将日志和指标发布到美国西部(俄勒冈),请输入以下命令。

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluentd-quickstart.yaml | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/us-west-2/" | kubectl apply -f -

删除 Container Insights

如果您想使用快速入门设置删除 Container Insights,请输入以下命令。

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluentd-quickstart.yaml | sed "s/{{cluster_name}}/cluster-name/;s/{{region_name}}/cluster-region/" | kubectl delete -f -