访问从ssh exec生成的k8s pod日志

wwwo4jvm  于 2021-07-13  发布在  ElasticSearch
关注(0)|答案(2)|浏览(365)

我有一个 filebeat 配置为将我的k8s群集日志发送到 Elasticsearch .
当我直接连接到吊舱时( kubectl exec -it <pod> -- sh -c bash ),
生成的输出日志没有发送到目标。
在k8s文档中,我无法找到k8s是如何处理运行shell中的stdout的。
如何配置k8s来发送实时shell日志?

cotxawn7

cotxawn71#

kubernetes(大部分)与此无关,因为日志记录由用于支持kubernetes的容器环境(通常是docker)处理。
根据docker版本的不同,容器的日志可以写在json文件、journald或更多文件上,默认为json文件。你可以做一个 docker info | grep -i logging 检查docker使用的日志驱动程序是什么。如果结果是json文件,则日志将以json格式写在文件上。如果有另一个值,那么日志将以另一种方式处理(由于存在各种日志驱动程序,我建议查看有关它们的文档)
如果日志是写在文件中的,那么使用 docker inspect container-id | grep -i logpath ,您将能够看到节点上的路径。
filebeat只是从这些文件中获取日志,docker负责处理容器中的应用程序标准输出和其中一个文件之间的重定向,并使用其驱动程序。
关于不在日志中的exec命令,这是一个开放的建议(https://github.com/moby/moby/issues/8662 )由于不是所有的东西都被重定向,所以只有入口点本身启动的应用程序的日志。
有一个建议的解决方法是(https://github.com/moby/moby/issues/8662#issuecomment-277396232 )
同时你可以试试这个小技巧。。。。 echo hello > /proc/1/fd/1 将输出重定向到stdout的pid 1(docker容器)文件描述符
它工作得很好,但有需要手动重定向的问题。

irlmq6kh

irlmq6kh2#

使用以下过程:
在应用程序中进行更改以将日志推送到标准输出。您可以在日志配置文件中对此进行配置。
将文件配置为读取那些标准输出日志(这最终是一些docker日志文件位置,如/var/log等)
以deamonsets开始你的文件,这样新的pod和节点的日志就可以从解剖学上推送到es。
为了提高日志的可读性,请确保推送json格式的日志。

相关问题