我找不到我 Amazon Elastic Container Service (Amazon ECS) 任务或 Amazon Elastic Kubernetes Service (Amazon EKS) Pod 的容器日志了。
简短描述
当您执行以下操作时,您的容器化应用程序不会写入部分或全部日志:
- 在 Amazon ECS 中的容器实例上运行“docker logs yourContainerName”命令。
- 为 Amazon ECS 中的任务使用 awslogs 日志驱动程序。
- 针对 Amazon EKS 集群运行“kubectl logs yourPodName”命令。
当出现以下情形时,您可能会遇到问题:
- 主机实例存在问题。
- 因为您的容器化应用程序没有写入正确的位置,所以您的日志不会在 Docker 守护程序中显示。
解决方法
查找您的 Amazon ECS 任务的日志
要确认您的任务已正确配置,以便找到您的日志,请注意以下事项:
如果您的任务使用的是 awslogs 日志驱动程序,则满足以下条件:
- 日志会流式传输到 Amazon CloudWatch Logs。这些日志绝不会写入容器实例。
- “docker logs yourContainerName”命令会返回以下错误消息:“Error response from daemon: configured logging driver does not support reading”。
要允许 EC2 启动类型流式传输到 CloudWatch Logs,请为您的容器实例使用的 IAM 角色授予权限。
要允许 AWS Fargate 启动类型流式传输到 CloudWatch Logs,请为您任务使用的任务执行角色授予权限。
如果您仍未找到自己的日志,请完成对容器进行问题排查部分的步骤。
在 Amazon EKS 上查找您的 Kubernetes Pod 的日志
要返回从 Pod 容器生成的日志文件,请运行以下 kubectl 命令:
kubectl logs yourPodName
注意:kubelet 会在 Pod 退出后自动删除日志文件。有关详细信息,请参阅 Kubernetes 网站上的容器回收。要延长日志文件在工作节点上的保留时间,请配置 kubelet 以降低运行垃圾回收的频率。
如果您仍未找到自己的日志,请完成对容器进行问题排查部分的步骤。
对容器进行问题排查
对于您的应用程序,请注意以下选项:
- 在容器构建期间,将您的应用程序设置为相应的日志级别。
注意:您的应用程序可能需要通过环境变量或者在配置文件设置日志记录。
- 让您的应用程序成为容器的 ENTRYPOINT。有关详细信息,请参阅 Docker 文档网站上的 ENTRYPOINT。
注意:Docker 文件中的 ENTRYPOINT 是在 Docker Docs 网站上记录记录 STDOUT 和 STDERR I/O 流的进程。有关更多信息,请参阅 Docker Docs 网站上的查看容器或服务的日志。
- 使用链接到 STDOUT 和 STDERR 的应用程序日志文件构建您的容器,或者将您的应用程序配置为直接记录到 /proc/1/fd/1 (stdout) 和 /proc/1/fd/2 (stderr)。有关示例,请查看 Docker Hub 网站上的 nginx 和 httpd 容器镜像。
注意:如果可能,请将您的应用程序进程设置为容器中的父进程。如果您的容器将 Shell 脚本作为 ENTRYPOINT 使用,则请配置该脚本以运行时初始化您的容器数据。有关详细信息,请参阅 Docker 文档网站上的 ENTRYPOINT。