应用把日志写到 /var/log/app/app.log,kubectl logs 返回空,采集器也一直没数据。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,kubectl logs 读的是容器主进程的 stdout 和 stderr,写到文件的内容不在这个流里。日志留在容器可写层,Pod 删除后一起消失。

「容器日志未走 stdout」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。报错里带路径的,先去看那个路径在不在、权限对不对。

kubectl logs -f deploy/api --tail=50
kubectl exec api-5c6d7e8f9-2m4nq -- ls -lh /var/log/app

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,把日志框架的 appender 改成 stdout 容器里不再落地文件;如果要保留文件 用 sidecar 或 hostPath 加轮转;确认 PID 1 是应用本身 别让启动脚本把输出吞掉;用 kubectl logs -f 看实时输出是否出现。

最后用这个标准收尾,kubectl logs 能看到新的请求日志 采集器对应的 Pod 日志面板出现数据。

作者 9823189