docker - 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。
解决方案
当您kubectl logs
访问任何 pod 时,您正在查询stdout/stderr
发送到节点日志文件( /var/log/*
) 的流,这又取决于底层主机操作系统 logrotate。
kubectl logs
您可以尝试通过比较来自日志与发送到日志后端的日志(如果有,例如Fluentd或ELK 堆栈)或直接通过SSH 连接到节点并直接在日志中定位它们来确定这是否是问题所在小路。
关于如何运行 Kubernetes 集群的详细信息并不多,但提供的信息强烈表明这是一个节点级别的问题,特定于内部管理 pod 日志的方式。
最后,使用的方法kubectl exec <podname> -- /bin/bash
是确定容器是否在本地存储这些日志以及问题是何时将它们发送到主机节点是一个好主意。
推荐阅读
- apache - 使用自定义 OpenSSL 编译 Apache 后,“此版本的 mod_ssl 是针对较新的库编译的”
- python - 进行迁移的问题 Django
- rust - 为什么 Rust 允许对值及其引用进行相同的方法调用?
- java - 如何在 Spring Security 中忽略/排除 url 模式
- rippled - 如何调试死锁的波纹?
- grails - 在grails的单元测试期间如何在控制器中使用初始化服务?
- python - 在Python中查找列表的所有组合并重复
- fzf - .gitignore node_modules/ 不适用于 fd 和 ripgrep
- javascript - 如何将 base64 图像转换为可用于
- java - 露天方面secondaryType