首页 > 解决方案 > Kubectl logs 命令无法打印输出

问题描述

我有一个我的 kafka_consumer 代码的 docker 映像,它正在使用来自某个主题的消息。现在我所做的是我从我的 docker 镜像中创建了一个 pod,它运行成功。当我发出命令 kubectl logs 它只打印前三行日志然后退出。当我运行 docker 映像时,它会为我提供完整的输出,其中消费者记录会被打印多次。那么 kubernetes 日志有什么问题呢?

我尝试使用kubectl logs <pod-name>which 只返回 3 行日志。

我希望输出显示正确的详细消息,如下所示:

log4j:WARN No appenders could be found for logger (org.apache.kafka.clients.consumer.ConsumerConfig).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

ConsumerRecord(topic = tt, partition = 0, offset = 399219, CreateTime = 1565941033699, serialized key size = 3, serialized value size = 6, headers = RecordHeaders(headers = [], isReadOnly = false), key = key, value = hello )

当我使用 kubectl 时,我只得到 log4j 的前三行而不是 ConsumerRecord。

标签: dockerkubernetesapache-kafka

解决方案


当您kubectl logs访问任何 pod 时,您正在查询stdout/stderr发送到节点日志文件( /var/log/*) 的流,这又取决于底层主机操作系统 logrotate。

kubectl logs您可以尝试通过比较来自日志与发送到日志后端的日志(如果有,例如FluentdELK 堆栈)或直接通过SSH 连接到节点并直接在日志中定位它们来确定这是否是问题所在小路。

关于如何运行 Kubernetes 集群的详细信息并不多,但提供的信息强烈表明这是一个节点级别的问题,特定于内部管理 pod 日志的方式。

最后,使用的方法kubectl exec <podname> -- /bin/bash是确定容器是否在本地存储这些日志以及问题是何时将它们发送到主机节点是一个好主意。


推荐阅读