我有一个 filebeat 配置为将我的k8s群集日志发送到 Elasticsearch .当我直接连接到吊舱时( kubectl exec -it <pod> -- sh -c bash ),生成的输出日志没有发送到目标。在k8s文档中,我无法找到k8s是如何处理运行shell中的stdout的。如何配置k8s来发送实时shell日志?
filebeat
Elasticsearch
kubectl exec -it <pod> -- sh -c bash
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容器)文件描述符它工作得很好,但有需要手动重定向的问题。
docker info | grep -i logging
docker inspect container-id | grep -i logpath
echo hello > /proc/1/fd/1
irlmq6kh2#
使用以下过程:在应用程序中进行更改以将日志推送到标准输出。您可以在日志配置文件中对此进行配置。将文件配置为读取那些标准输出日志(这最终是一些docker日志文件位置,如/var/log等)以deamonsets开始你的文件,这样新的pod和节点的日志就可以从解剖学上推送到es。为了提高日志的可读性,请确保推送json格式的日志。
2条答案
按热度按时间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容器)文件描述符它工作得很好,但有需要手动重定向的问题。
irlmq6kh2#
使用以下过程:
在应用程序中进行更改以将日志推送到标准输出。您可以在日志配置文件中对此进行配置。
将文件配置为读取那些标准输出日志(这最终是一些docker日志文件位置,如/var/log等)
以deamonsets开始你的文件,这样新的pod和节点的日志就可以从解剖学上推送到es。
为了提高日志的可读性,请确保推送json格式的日志。