我有一个运行在Google Container引擎上的Kubernetes Pod。它已经运行了几天,写入日志,没有任何重启。
为什么命令kubectl logs只显示今天的日志行?
kubectl logs
这种限制来自哪里?它是基于时间还是基于日志行数?
vpfxa7rd1#
默认情况下,容器引擎VM上启用了LogRotate。您应该能够在下面的位置检查Conf以查找码头集装箱日志。
cat /etc/logrotate.d/docker-containers
因此,当您运行kubectl logs时,它会从当前日志文件中传输您的数据。过去的日志已经被压缩,而且根据logrotate配置,也只有N个压缩文件可用。
您可以检查位置/var/log/containers的所有容器日志文件,也可以检查链接到/var/lib/docker/containers/$containerId/的sym
/var/log/containers
/var/lib/docker/containers/$containerId/
您可能还想参考文档http://kubernetes.io/docs/user-guide/kubectl/kubectl_logs/,看看是否可以使用其他选项来解决问题。
6jjcrrmo2#
我在使用Microk8寻找类似的答案时发现了这个问题。关于为什么会发生这种情况,请参考@Anupam的出色答案。查找其他Kubernetes版本的日志的过程非常相似,但有一些例外。
不幸的是,我找不到@Anupam的答案中提到的类似的logrotate配置文件(Microk8s使用containerd,而不是Docker),所以这里有一个更通用的指令集,应该适用于其他Kubernetes风格。
logrotate
containerd
在容器主机上运行此命令,它将显示当前日志文件的链接位置:
ls -l /var/log/containers
这为我生成了类似以下内容的输出(将<namespace>、<pod>、<uuid>和<container>替换为需要从中获取日志的容器的信息):
<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查看此目录的内容显示如下:
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用于显示压缩文件内容):
0.log.
zcat
zcat 0.log.20220925-042706.gz
这将生成您正在寻找的日志。希望这篇文章能帮助那些在这个问题上遇到困难,并需要在正确方向上得到推动的人。
2条答案
按热度按时间vpfxa7rd1#
默认情况下,容器引擎VM上启用了LogRotate。您应该能够在下面的位置检查Conf以查找码头集装箱日志。
因此,当您运行
kubectl logs
时,它会从当前日志文件中传输您的数据。过去的日志已经被压缩,而且根据logrotate配置,也只有N个压缩文件可用。您可以检查位置
/var/log/containers
的所有容器日志文件,也可以检查链接到/var/lib/docker/containers/$containerId/
的sym您可能还想参考文档http://kubernetes.io/docs/user-guide/kubectl/kubectl_logs/,看看是否可以使用其他选项来解决问题。
6jjcrrmo2#
我在使用Microk8寻找类似的答案时发现了这个问题。关于为什么会发生这种情况,请参考@Anupam的出色答案。查找其他Kubernetes版本的日志的过程非常相似,但有一些例外。
不幸的是,我找不到@Anupam的答案中提到的类似的
logrotate
配置文件(Microk8s使用containerd
,而不是Docker),所以这里有一个更通用的指令集,应该适用于其他Kubernetes风格。在容器主机上运行此命令,它将显示当前日志文件的链接位置:
这为我生成了类似以下内容的输出(将
<namespace>
、<pod>
、<uuid>
和<container>
替换为需要从中获取日志的容器的信息):我使用链接目标的父文件夹更改目录:
使用
ls -la
查看此目录的内容显示如下:0.log.
后面的文件名部分表示日志轮换的日期。例如,如果您要查找2022年9月24日的日志,则可以使用以下命令(zcat
用于显示压缩文件内容):这将生成您正在寻找的日志。希望这篇文章能帮助那些在这个问题上遇到困难,并需要在正确方向上得到推动的人。