kubectl logs和docker logs输出日志不同的问题

kubectl logs用来查询pod日志
docker logs用来查询容器日志

问题描述
但是近期在分析日志时发现一个问题,kubectl logs查询pod日志输出的不全,和对应容器docker logs查询输出的日志相去甚远,kubectl logs查询出来的日志比查询容器日志少了将近三分之一。
而且容器的日志也会出现丢失的现象,日志并不是从容器启动的那一刻开始记录的,貌似部分日志被清理了。

问题分析
首先,当看到kubectl logs输出的日志的时候,就觉得不对,开始时间就有问题,没有pod启动时的日志,日志最早的日期也就几天前,而pod启动了都几个周了。
于是通过kubectl describe pod查看pod具体的启动node和containerId,然后到具体的node节点上使用docker logs来查看容器的日志。
然后发现docker logs打印的日志的确比kubectl logs多一些,但是容器刚启动那个时间点的日志也没有。
于是我们就到/var/lib/docker/containers/{containerId}/这个具体的目录中查询具体情况,发现了3个json格式的日志文件,两个归档文件都是9.8M。
此时,才想起去看一下daemon.json的配置。

问题原因:
问题出现的原因是在/etc/docker/daemon.json的配置上,daemon.json可以配置docker容器标准输出日志文件个数和每个文件的大小的,配置如下:

{
...
 "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
...
}


上面的配置声明了docker容器标准输出只能保存3个文件,每个文件上限是10M,超过这个阈值的日志都会被清理。

明白了上面的配置声明后,再回头来看kubectl logs查询出来的日志比docker logs查询容器日志少的问题,这主要是docker容器标准输出分为3个文件,而超过10M后会进行归档,而kubectl logs查询时,无法显示另外两个归档文件中的日志。
而容器日志不是从容器启动那一刻开始记录的,只是因为日志的大小已经超过了3*10M的阈值了,日志被清理了,所以也就无法查询到容器刚启动那一刻的日志。

kubectlKubernetes的命令行工具,用于与Kubernetes集群进行交互和管理。下面是kubectl的一些常用命令及其详解: 1. kubectl get:用于获取资源的信息。例如,使用kubectl get pods可以获取当前集群中所有的Pod信息。 2. kubectl create:用于创建资源。例如,使用kubectl create deployment可以创建一个新的Deployment。 3. kubectl apply:用于应用配置文件或更新资源。例如,使用kubectl apply -f deployment.yaml可以应用一个Deployment的配置文件。 4. kubectl describe:用于查看资源的详细信息。例如,使用kubectl describe pod my-pod可以查看名为my-pod的Pod的详细信息。 5. kubectl delete:用于删除资源。例如,使用kubectl delete pod my-pod可以删除名为my-pod的Pod。 6. kubectl exec:用于在容器内执行命令。例如,使用kubectl exec my-pod -- ls可以在名为my-pod的Pod中执行ls命令。 7. kubectl logs:用于查看容器的日志。例如,使用kubectl logs my-pod可以查看名为my-pod的Pod中容器的日志。 8. kubectl port-forward:用于将本地端口与Pod或Service的端口进行转发。例如,使用kubectl port-forward my-pod 8080:80可以将本地的8080端口与名为my-pod的Pod中的80端口进行转发。 9. kubectl scale:用于调整资源的副本数。例如,使用kubectl scale deployment/my-deployment --replicas=3可以将名为my-deployment的Deployment的副本数调整为3。 10. kubectl rollout:用于管理资源的滚动更新。例如,使用kubectl rollout restart deployment/my-deployment可以重新启动名为my-deployment的Deployment。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值