Container Insights 问题排查 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Container Insights 问题排查

如果在使用 Container Insights 时遇到问题,以下部分可为您提供帮助。

在 Amazon EKS 或 Kubernetes 上部署失败

如果未在 Kubernetes 集群上正确部署该代理,请尝试执行以下操作:

  • 运行以下命令以获取 pod 列表。

    kubectl get pods -n amazon-cloudwatch
  • 运行以下命令并在输出底部检查事件。

    kubectl describe pod pod-name -n amazon-cloudwatch
  • 运行以下命令以检查日志。

    kubectl logs pod-name -n amazon-cloudwatch

未经授权的 panic:无法从 kubelet 检索 cadvisor 数据

如果您的部署失败,并显示错误 Unauthorized panic: Cannot retrieve cadvisor data from kubelet,则您的 kubelet 可能未启用 Webhook 授权模式。Container Insights 需要此模式。有关更多信息,请参阅验证 先决条件

在 Amazon ECS 上已删除和重新创建的集群上部署 Container Insights

如果删除未启用 Container Insights 的现有 Amazon ECS 集群,并使用相同名称重新创建它,则无法在重新创建此集群时在此新集群上启用 Container Insights。您可以通过重新创建来启用它,然后输入以下命令:

aws ecs update-cluster-settings --cluster myCICluster --settings name=containerInsights,value=enabled

端点无效错误

如果您看到类似于以下内容的错误消息,请检查以确保已将正在使用的命令中的所有占位符(例如 cluster-nameregion-name)替换为正确的部署信息。

"log": "2020-04-02T08:36:16Z E! cloudwatchlogs: code: InvalidEndpointURL, message: invalid endpoint uri, original error: &url.Error{Op:\"parse\", URL:\"https://logs.{{region_name}}.amazonaws.com/\", Err:\"{\"}, &awserr.baseError{code:\"InvalidEndpointURL\", message:\"invalid endpoint uri\", errs:[]error{(*url.Error)(0xc0008723c0)}}\n",

指标未显示在控制台中

如果您在 Amazon Web Services Management Console中未看到任何 Container Insights 指标,请确保已完成 Container Insights 的设置。在完全设置 Container Insights 之前,不会显示指标。有关更多信息,请参阅设置 Container Insights

升级集群后,Amazon EKS 或 Kubernetes 上缺少 Pod 指标

如果您将 CloudWatch 代理作为守护进程部署在新的或升级的集群上后丢失了全部或部分 pod 指标,或者您看到带有 W! No pod metric collected 消息的错误日志,则此节可能很有帮助。

这些错误可能是由容器运行时的更改引起的,例如 containerd 或 docker systemd cgroup 驱动程序。您通常可以通过更新部署清单来解决此问题,以便将主机的 containerd 套接字挂载到容器中。请参见以下示例:

# For full example see https://github.com/aws-samples/amazon-cloudwatch-container-insights/blob/master/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: cloudwatch-agent namespace: amazon-cloudwatch spec: template: spec: containers: - name: cloudwatch-agent # ... # Don't change the mountPath volumeMounts: # ... - name: dockersock mountPath: /var/run/docker.sock readOnly: true - name: varlibdocker mountPath: /var/lib/docker readOnly: true - name: containerdsock # NEW mount mountPath: /run/containerd/containerd.sock readOnly: true # ... volumes: # ... - name: dockersock hostPath: path: /var/run/docker.sock - name: varlibdocker hostPath: path: /var/lib/docker - name: containerdsock # NEW volume hostPath: path: /run/containerd/containerd.sock

使用 Bottlerocket for Amazon EKS 时没有 pod 指标

Bottlerocket 是一个基于 Linux 的开源操作系统,Amazon 专为运行容器而构建。

Bottlerocket 在主机上使用不同的 containerd 路径,因此您需要将卷更改为其位置。如果未这样设置,包含 W! No pod metric collected 的日志会显示错误。请参阅以下 示例。

volumes: # ... - name: containerdsock hostPath: # path: /run/containerd/containerd.sock # bottlerocket does not mount containerd sock at normal place # https://github.com/bottlerocket-os/bottlerocket/commit/91810c85b83ff4c3660b496e243ef8b55df0973b path: /run/dockershim.sock

将 containerd 运行时用于 Amazon EKS 或 Kubernetes 时,没有容器文件系统指标

这是一个已知问题,正在由社群贡献者解决。有关更多信息,请参阅 GitHub 上的 containerd 的磁盘使用指标containerd 的 cadvisor 不支持容器文件系统指标

收集 Prometheus 指标时,CloudWatch 代理的日志卷意外增加

这是 CloudWatch 代理的 1.247347.6b250880 版本中推出的回归。此回归已在代理的更新版本中得到修复。它的影响仅限于客户收集 CloudWatch 代理本身的日志并且仍在使用 Prometheus 的情况。有关更多信息,请参阅 GitHub 上的 [prometheus] 代理正在日志中打印所有收集的指标

未从 Dockerhub 找到发布说明中提到的最新 docker 镜像

在内部开始实际发布之前,我们会更新 Github 上的发布说明和标签。在 Github 上增加版本号后,通常需要 1 – 2 周才能在注册表上看到最新的 Docker 镜像。CloudWatch 代理容器镜像不会在夜间发布。您可以在以下位置直接从源代码构建镜像:https://github.com/aws/amazon-cloudwatch-agent/tree/master/amazon-cloudwatch-container-insights/cloudwatch-agent-dockerfile

CloudWatch 代理上的 CrashLoopBackoff 错误

如果您看到 CloudWatch 代理出现 CrashLoopBackOff 错误,请确保您的 IAM 权限设置正确。有关更多信息,请参阅验证 先决条件

CloudWatch 代理或 FluentD Pod 卡在待处理状态

如果您有一个 CloudWatch 代理或 FluentD pod 卡在 Pending 状态或出现 FailedScheduling 错误,请根据代理所需的内核数量和 RAM 量确定您的节点是否有足够的计算资源。使用以下命令描述此 pod:

kubectl describe pod cloudwatch-agent-85ppg -n amazon-cloudwatch