在 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/timeout 和 batch/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-namecluster-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 的更多信息,请参阅以下主题。
-
快速入门:Amazon EKS 上的 OTel Container Insights:设置 OTel Container Insights
-
设置指南(AWS CLI):设置 Classic Container Insights
-
迁移指南:在方法之间迁移
-
比较 Container Insights 方法:比较 Container Insights 方法