kubectl logs -f <pod-name>
此命令显示容器日志文件中的日志。
基本上,我想检查";由容器"产生什么";以及";写入日志文件的内容";。我看到了一些不寻常的二进制日志,所以我只想知道容器是在创建这些二进制日志,还是日志没有正确写入日志文件。
"异常日志":
x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00
通常,容器化的应用程序不写入日志文件,而是向stdout
/stderr
发送消息,将日志文件存储在容器中没有意义,因为当pod被删除时,它们会被删除
运行时看到的内容
kubectl logs -f <pod-name>
是发送到stdout
/stderr
的消息。这里没有特定于容器的日志,只有应用程序日志。
如果由于某种原因,您的应用程序确实写入了日志文件,您可以通过exec
使用例如将其放入pod中进行检查
kubectl exec -it <pod-name> -- /bin/bash
并像在shell中一样读取日志。
编辑
应用程序日志
容器引擎处理生成的任何输出并将其重定向到容器化应用程序的stdout
和stderr
流。例如,Docker容器引擎将这两个流重定向到日志驱动程序,该驱动程序在Kubernetes中配置为以JSON格式写入文件
这些日志也保存到
/var/log/containers/
/var/log/pods/
默认情况下,如果容器重新启动,kubelet会保留一个终止的容器及其日志。如果pod从节点中被逐出,那么所有相应的容器及其日志也将被逐出。
通过发出命令所看到的一切
kubectl logs <pod-name>
是什么应用程序发送到stdout
/stderr
,或者什么被重定向到stdout
/stderr
。例如nginx
:
官方nginx镜像创建了一个从
/var/log/nginx/access.log
到/dev/stdout
的符号链接,并创建了另一个从/var/log/nginx/error.log
到/dev/stderr
的符号链接。
节点日志
不在容器内运行的组件(例如kubelet、容器运行时(写入journald
。否则,它们将写入/var/log/
目录中的.log
fies。
官方文件摘录:
目前,深入挖掘集群需要登录相关的机器。以下是相关日志文件的位置。(注意,在基于systemd的系统上,您可能需要使用journalctl(
主
/var/log/kube-apiserver.log
-API服务器,负责服务API/var/log/kube-scheduler.log
-计划员,负责制定计划决策/var/log/kube-controller-manager.log
—管理复制控制器的控制器
工作节点
/var/log/kubelet.log
-Kubelet,负责在节点上运行容器/var/log/kube-proxy.log
-Kube Proxy,负责服务负载平衡
我能想到的唯一方法是使用一些外部日志记录工具,如Syslog或Elastisearch或其他任何工具。将您的应用程序配置为直接将日志发送到日志记录设备(避免使用fluentd或logstash等从文件中解析日志的代理(。
所有现代语言都支持外部日志记录。您还可以配置Docker将日志发送到syslog服务器。
检查日志的简单方法是kubernets:
=>如果吊舱有单个集装箱
kubectl logs POD_NAME
=>如果吊舱有多个集装箱
kubectl logs POD_NAME -c CONTAINER_NAME -n NAMESPACE