访问从 ssh exec 生成的 k8s pod 日志
Access k8s pod logs generated from ssh exec
我有一个 filebeat
配置为将我的 k8s 集群日志发送到 Elasticsearch
。
当我直接连接到 pod 时 (kubectl exec -it <pod> -- sh -c bash
),
生成的输出日志没有发送到目的地。
在 k8s 文档中挖掘,我无法找到 k8s 如何从 运行 shell.
处理 STDOUT
如何配置 k8s 发送实时 shell 日志?
Kubernetes(大部分)与此无关,因为日志记录由用于支持 Kubernetes 的容器环境处理,通常是 docker。
根据 docker 版本,容器的日志可以写在 json 文件、journald 或更多,默认为 json 文件。您可以执行 docker info | grep -i logging
检查 docker 使用的日志驱动程序是什么。如果结果是 json-file,日志将以 json 格式写入文件。如果有另一个值,日志将以另一种方式处理(并且由于有各种日志记录驱动程序,我建议查看有关它们的文档)
如果日志被写入文件,很可能通过使用 docker inspect container-id | grep -i logpath
,您将能够看到节点上的路径。
Filebeat 只是从这些文件中收集日志,docker 负责处理容器内应用程序 STDOUT 与其中一个文件及其驱动程序之间的重定向。
关于不在日志中的 exec 命令,这是一个开放的提议 (https://github.com/moby/moby/issues/8662),因为并非所有内容都被重定向,只是由入口点本身启动的应用程序的日志。
有一个建议的解决方法是 ( https://github.com/moby/moby/issues/8662#issuecomment-277396232 )
In the mean time you can try this little hack....
echo hello > /proc/1/fd/1
Redirect your output into PID 1's (the docker container) file
descriptor for STDOUT
效果很好,但存在需要手动重定向的问题。
使用以下流程:
- 更改您的应用程序以将日志推送到 STDOUT。您可以在您的日志记录配置文件中配置它。
- 配置文件以读取那些 STDOUT 日志(最终是一些 docker 日志文件位置,如 /var/log 等)
- 将您的文件作为 DeamonSets 启动,以便来自新 pods 和节点的日志可以按解剖学方式推送到 ES。
- 为了提高日志的可读性,请确保以 json 格式推送日志。
我有一个 filebeat
配置为将我的 k8s 集群日志发送到 Elasticsearch
。
当我直接连接到 pod 时 (kubectl exec -it <pod> -- sh -c bash
),
生成的输出日志没有发送到目的地。
在 k8s 文档中挖掘,我无法找到 k8s 如何从 运行 shell.
处理 STDOUT如何配置 k8s 发送实时 shell 日志?
Kubernetes(大部分)与此无关,因为日志记录由用于支持 Kubernetes 的容器环境处理,通常是 docker。
根据 docker 版本,容器的日志可以写在 json 文件、journald 或更多,默认为 json 文件。您可以执行 docker info | grep -i logging
检查 docker 使用的日志驱动程序是什么。如果结果是 json-file,日志将以 json 格式写入文件。如果有另一个值,日志将以另一种方式处理(并且由于有各种日志记录驱动程序,我建议查看有关它们的文档)
如果日志被写入文件,很可能通过使用 docker inspect container-id | grep -i logpath
,您将能够看到节点上的路径。
Filebeat 只是从这些文件中收集日志,docker 负责处理容器内应用程序 STDOUT 与其中一个文件及其驱动程序之间的重定向。
关于不在日志中的 exec 命令,这是一个开放的提议 (https://github.com/moby/moby/issues/8662),因为并非所有内容都被重定向,只是由入口点本身启动的应用程序的日志。
有一个建议的解决方法是 ( https://github.com/moby/moby/issues/8662#issuecomment-277396232 )
In the mean time you can try this little hack....
echo hello > /proc/1/fd/1
Redirect your output into PID 1's (the docker container) file descriptor for STDOUT
效果很好,但存在需要手动重定向的问题。
使用以下流程:
- 更改您的应用程序以将日志推送到 STDOUT。您可以在您的日志记录配置文件中配置它。
- 配置文件以读取那些 STDOUT 日志(最终是一些 docker 日志文件位置,如 /var/log 等)
- 将您的文件作为 DeamonSets 启动,以便来自新 pods 和节点的日志可以按解剖学方式推送到 ES。
- 为了提高日志的可读性,请确保以 json 格式推送日志。