gpt4 book ai didi

docker - 通过docker容器扩展Filebeat

转载 作者:行者123 更新时间:2023-12-03 02:32:40 25 4
gpt4 key购买 nike

我正在寻找一种适当的方法来监视通过Filebeat和ELK嵌入在docker中的nginx,tomcat,springboot生成的应用日志。

在容器策略中,只能将容器用于一个目的。

每个容器一个nginx,每个容器一个tomcat,这意味着我们在nginx或tomcat容器中不能再有文件信号。

通过我在Internet上阅读的内容,我们可以进行以下设置:

  • 一个专用于存储日志的卷
  • 一个nginx容器,用于安装专用日志卷
  • 一个tomcat / springboot容器,用于安装专用日志卷
  • 一个文件拍子容器,也安装了专用日志卷

  • 这可以正常工作,但是在扩展nginx和springboot容器时,对我来说有点复杂。

    如果我具有以下配置,应该使用哪种模式将使用filebeat的日志推送到logstash:
  • 几个nginx容器在负载均衡中具有相同的配置(日志配置是相同的:相同的路径)
  • 几个具有相同配置(日志配置是相同的:相同路径)的nginx容器的springboot rest api容器

  • 我是否应该通过一组nginx + springboot rest api创建一个卷并添加一个filebeat容器?

    我是否应该创建一个由所有容器共享的全局日志卷,并按容器设置不同的日志文件名
    (在日志的文件名中包含容器的名称?)并且只有一个filebeat容器?

    在第二个建议中,如何扩展filebeat?

    还有另一种方法吗?

    非常感谢您的帮助。

    最佳答案

    如果可以管理,最简单的方法是将每个容器进程设置为记录到其自己的标准输出(您可以将/dev/stdout/proc/1/fd/1指定为日志文件)。例如,Docker Hub nginx Dockerfile指定

    RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

    因此普通的nginx日志成为容器日志。完成后,您可以插入 filebeat container input来读取这些日志并进行处理。您还可以使用 docker logs从容器外部查看它们,它们是相同的日志。

    如果您必须登录到文件系统怎么办?还是您想收集多个单独的日志流?

    如果容器的数量是可变的,但是您可以很好地控制它们的配置,那么我可能会按照您的描述设置一个全局日志卷,并使用 filebeat log input读取该目录树中的每个日志文件。

    如果容器的数量是固定的,则可以为每个容器设置一个卷并将其安装在每个容器的“常规”日志存储位置中。然后将所有这些目录安装到filebeat容器中。明显的问题是,如果您启动或停止容器,则需要重新启动已添加/已删除卷的日志管理器。

    如果您实际上在使用Kubernetes,则还有两种可能性。如果您试图从文件系统中收集容器日志,则需要在每个节点上运行filebeat的副本; DaemonSet可以为您管理。 Kubernetes Pod也可以运行多个容器,因此您的另一个选择是使用应用程序容器和附带日志的filebeat“sidecar”容器设置Pod。用 emptyDir卷设置 pods 以容纳日志,然后将其安装到两个容器中。像 Helm这样的模板系统可以帮助您编写pod规范,而无需一遍又一遍地重复日志记录sidecar的设置。

    关于docker - 通过docker容器扩展Filebeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59595308/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com