为什么`kubectl日志`只显示最近的日志行?

qxgroojn  于 2022-10-06  发布在  Kubernetes
关注(0)|答案(2)|浏览(244)

我有一个运行在Google Container引擎上的Kubernetes Pod。它已经运行了几天,写入日志,没有任何重启。

为什么命令kubectl logs只显示今天的日志行?

这种限制来自哪里?它是基于时间还是基于日志行数?

vpfxa7rd

vpfxa7rd1#

默认情况下,容器引擎VM上启用了LogRotate。您应该能够在下面的位置检查Conf以查找码头集装箱日志。

cat /etc/logrotate.d/docker-containers

因此,当您运行kubectl logs时,它会从当前日志文件中传输您的数据。过去的日志已经被压缩,而且根据logrotate配置,也只有N个压缩文件可用。

您可以检查位置/var/log/containers的所有容器日志文件,也可以检查链接到/var/lib/docker/containers/$containerId/的sym

您可能还想参考文档http://kubernetes.io/docs/user-guide/kubectl/kubectl_logs/,看看是否可以使用其他选项来解决问题。

6jjcrrmo

6jjcrrmo2#

我在使用Microk8寻找类似的答案时发现了这个问题。关于为什么会发生这种情况,请参考@Anupam的出色答案。查找其他Kubernetes版本的日志的过程非常相似,但有一些例外。

不幸的是,我找不到@Anupam的答案中提到的类似的logrotate配置文件(Microk8s使用containerd,而不是Docker),所以这里有一个更通用的指令集,应该适用于其他Kubernetes风格。

在容器主机上运行此命令,它将显示当前日志文件的链接位置:

ls -l /var/log/containers

这为我生成了类似以下内容的输出(将<namespace><pod><uuid><container>替换为需要从中获取日志的容器的信息):

lrwxrwxrwx 1 root root 173 Sep  2 18:30 <pod>_<namespace>_<container-id>.log -> /var/log/pods/<namespace>_<pod>_<uuid>/<container>/0.log

我使用链接目标的父文件夹更改目录:

cd /var/log/pods/<namespace>_<pod>_<uuid>/<container>/

使用ls -la查看此目录的内容显示如下:

drwxr-xr-x 2 root root     4096 Sep 30 22:27 .
drwxr-xr-x 3 root root     4096 Sep  2 18:30 ..
-rw-r----- 1 root root  4795001 Oct  3 12:27 0.log
-rw-r--r-- 1 root root   912950 Sep 19 12:26 0.log.20220913-182655.gz
-rw-r--r-- 1 root root  1058328 Sep 25 04:27 0.log.20220919-122656.gz
-rw-r--r-- 1 root root  1065468 Sep 30 22:27 0.log.20220925-042706.gz
-rw-r----- 1 root root 10490792 Sep 30 22:27 0.log.20220930-222723

0.log.后面的文件名部分表示日志轮换的日期。例如,如果您要查找2022年9月24日的日志,则可以使用以下命令(zcat用于显示压缩文件内容):

zcat 0.log.20220925-042706.gz

这将生成您正在寻找的日志。希望这篇文章能帮助那些在这个问题上遇到困难,并需要在正确方向上得到推动的人。

相关问题