View a markdown version of this page

在 Amazon EKS 上排查 Container Insights - Amazon CloudWatch

在 Amazon EKS 上排查 Container Insights

本节介绍了在 Amazon EKS 上设置或运行 Container Insights 时可能遇到的常见问题。无论您使用 OTel 方法还是 Classic 方法,均可使用下表和诊断命令来识别和解决问题。

有关特定于方法的设置指南,请参阅快速入门:Amazon EKS 上的 OTel Container Insights设置指南(AWS CLI)。要比较方法,请参阅比较 Container Insights 方法

指标未显示在 CloudWatch 中

如果您在 ContainerInsights 命名空间中看不到指标,请使用下表来确定原因。

症状 原因 解决方案
ContainerInsights 命名空间中没有指标 IAM 角色缺少 cloudwatch:PutMetricData 权限 CloudWatchAgentServerPolicy 托管策略附加到代理 IAM 角色。
部分节点会显示指标,但一些节点不会显示 由于污点,未在所有节点上调度代理 DaemonSet 向代理 DaemonSet 添加容忍度以允许在污点节点上进行调度。
指标停止显示 代理容器组(pod)已被 OOMKilled 或者正在重启 在代理容器组(pod)资源规格中增加内存限制。
指标过时或为零 网络连接受阻 检查 VPC 安全组并验证 CloudWatch VPC 端点是否存在。
增强指标缺失 未为增强的可观测性配置代理 在代理配置中设置 enhancedObservability: true

代理容器组(pod)未启动

如果代理容器组(pod)无法启动或保持非运行状态,请使用下表来诊断问题。

症状 原因 解决方案
ImagePullBackOff 无法访问 Amazon ECR 或者映像标签不正确 验证映像 URI 并确认您的节点可以访问 Amazon ECR。
Pending 节点上的 CPU 或内存不足 在代理容器组(pod)规范中扩展节点组或减少资源请求。
CrashLoopBackOff 配置无效或缺少卷挂载 在受影响的容器组(pod)上运行 kubectl logs,查看容器组(pod)日志中是否存在配置错误。
FailedScheduling 节点亲和性或污点会阻碍调度 查看 DaemonSet 规范中的 nodeSelector 和容忍度。
退出代码 1 服务账户缺少 IRSA 注释 验证服务账户是否有 eks.amazonaws.com/role-arn 注释。

附加组件安装失败

如果 amazon-cloudwatch-observability 附加组件无法安装或报告运行状况不佳,请使用下表来排查问题。

症状 原因 解决方案
CREATE_FAILED 与先前安装的资源冲突 删除有冲突的资源,并在创建附加组件时使用 --resolve-conflicts OVERWRITE
未找到 OIDC 提供者 该集群不存在 IAM OIDC 身份提供者 通过运行 eksctl utils associate-iam-oidc-provider 创建提供程序。
版本冲突 附加组件版本与 Kubernetes 版本不兼容 通过运行 aws eks describe-addon-versions 列出兼容版本。
DEGRADED 状态 由于缺少权限,运行状况检查失败 检查容器组(pod)日志并验证 IRSA 角色是否已附加所需的策略。

日志传输问题

如果 Amazon CloudWatch Logs 中未显示容器日志,请使用下表确定原因。

症状 原因 解决方案
日志组不存在 缺少 logs:CreateLogGroup 权限 向代理 IAM 角色添加 Amazon CloudWatch Logs 权限。
日志组存在但为空 未为日志配置代理,或区域不匹配 验证代理配置是否包括日志收集,以及该区域是否与您的集群区域相匹配。
日志延迟超过 5 分钟 刷新间隔过高或节点负载过重 减少代理配置中的 force_flush_interval 值。
性能日志缺失 代理仅针对应用程序日志进行配置 验证代理配置中是否存在“Container Insights”性能日志部分。

迁移特定问题

如果您在 Container Insights 方法之间迁移时遇到问题,请使用下表。有关完整的迁移工作流程,请参阅迁移指南

症状 原因 解决方案
并行运行期间重复的指标 这两种方法均同时发布指标 此行为在并行运行过程中是符合预期的。验证新方法后,请禁用旧方法。
方法之间的指标值不同 不同的计算方法 预计会有微小的差异(小于 5%)。差异较大表示方法之间的配置不匹配。
回滚失败 未重新应用自定义配置 回滚时重新应用完整的配置值。
迁移过程中触发警报 切换周期的指标缺失 在受影响的警报上,暂时将缺失的数据处理设置为 notBreaching

OTel Container Insights 问题

以下问题是特定于 OTel Container Insights 方法的问题。有关一般指导,请参阅快速入门:Amazon EKS 上的 OTel Container Insights

症状 原因 解决方案
403 禁止导出错误 IAM 角色缺少 CloudWatch 权限 验证 CloudWatchAgentServerPolicy 是否已附加到代理角色。
指标端点的连接被拒绝 收集器无法到达 kubelet 验证hostNetwork: true 是否在容器组(pod)规范中进行了设置,或者确认服务账户是否具有所需的权限。
高内存使用量 批处理器队列太长 减少收集器配置中的 batch/timeoutbatch/send_batch_size 值。
自定义指标未显示 未为应用程序端点配置接收器 在收集器配置中添加一个以您的应用指标端口为目标的 Prometheus 接收器。

常规诊断命令

使用以下命令来收集有关 Container Insights 部署的信息。

要检查代理容器组(pod)状态,请运行以下命令。

kubectl get pods -n amazon-cloudwatch

要查看代理容器组(pod)日志,请运行以下命令。

kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=50

要检查代理的 DaemonSet 状态,请运行以下命令。

kubectl get daemonset -n amazon-cloudwatch

要在服务账户上创建 IAM 角色,请运行以下命令。

kubectl get serviceaccount -n amazon-cloudwatch -o yaml

要检查集群附加组件的状态,请运行以下命令。将 cluster-name 替换为 Amazon EKS 集群的名称。

aws eks describe-addon --cluster-name cluster-name --addon-name amazon-cloudwatch-observability

要列出 Container Insights 日志组,请运行以下命令。将 cluster-name 替换为 Amazon EKS 集群的名称。

aws logs describe-log-groups --log-group-name-prefix "/aws/containerinsights/cluster-name"

有关在 Amazon EKS 上设置和运行 Container Insights 的更多信息,请参阅以下主题。