我正在寻找适当的方式来监控应用程序日志,由nginx,tomcat,springboot嵌入在码头与文件拍和麋鹿。
在容器策略中,容器只能用于一个目的。
每个容器一个nginx,每个容器一个tomcat,这意味着我们不能在nginx或tomcat容器中增加一个文件。
根据我在互联网上所读到的内容,我们可以有以下设置:
这很好,但是当涉及到扩展nginx和springboot容器时,对我来说就有点复杂了。
如果我有以下配置,应该使用哪种模式将使用filebeat的日志推送到logstash:
我是否应该通过一组nginx + springboot rest创建一个卷,并添加一个filebeat容器?
是否应该创建一个由所有容器共享的全局日志卷,并按容器使用不同的日志文件名(在日志的文件名中有容器的名称?)只有一个文件包装的容器?
在第二项建议中,如何缩放文件拍?
还有别的办法吗?
非常感谢你的帮助。
发布于 2020-01-05 01:35:03
如果您可以管理它,那么最简单的方法就是将每个容器进程设置为自己的stdout (您可以将/dev/stdout
或/proc/1/fd/1
指定为日志文件)。例如,码头枢纽nginx Dockerfile指定
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
所以普通的nginx日志就变成了容器日志。一旦这样做,您就可以插入文件传输容器输入来读取这些日志并处理它们。您还可以使用docker logs
从容器外部看到它们,它们是相同的日志。
如果您必须登录到文件系统,怎么办?还是您希望能够收集多个独立的日志流?
如果容器的数量是可变的,但是您可以很好地控制它们的配置,那么我可能会在描述和使用文件拍日志输入读取目录树中的每个日志文件时设置一个全局日志卷。
如果容器的数量是固定的,那么您可以在每个容器的“通常”日志存储位置设置一个卷并将其挂载。然后将所有这些目录挂载到文件节拍容器中。这里的明显问题是,如果确实启动或停止容器,则需要重新启动添加/删除的卷的日志管理器。
如果你真的在库伯内特斯,还有两种可能性。如果您试图从文件系统中收集容器日志,则需要在每个节点上运行一个文件节拍副本;DaemonSet可以为您管理这个副本。一个Kubernetes容器也可以运行多个容器,因此您的另一个选项是设置一个应用程序容器和一个用来将日志发送出去的filebeat "sidecar“容器。用emptyDir
卷设置吊舱以保存日志,并将其装入两个容器中。像掌舵这样的模板系统可以帮助您编写pod规范,而不必一次又一次地重复日志记录的设置。
https://stackoverflow.com/questions/59595308
复制相似问题