在将容器日志写入日志文件之前,我们如何检查kubernetes中的容器日志



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中一样读取日志。

编辑

应用程序日志

容器引擎处理生成的任何输出并将其重定向到容器化应用程序的stdoutstderr流。例如,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/目录中的.logfies。

官方文件摘录:

目前,深入挖掘集群需要登录相关的机器。以下是相关日志文件的位置。(注意,在基于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

相关内容

  • 没有找到相关文章

最新更新