【问题标题】:Best Docker logging architecture using ELK stack使用 ELK 堆栈的最佳 Docker 日志记录架构
【发布时间】:2015-09-28 10:47:39
【问题描述】:

最近我正在尝试使用 ELK 堆栈找出最佳的 Docker 日志记录机制。我对公司在生产中使用的最佳工作流程有一些疑问。我们的系统有典型的软件栈,包括Tomcat、PostgreSQL、MongoDB、Nginx、RabbitMQ、Couchbase等。目前,我们的栈运行在CoreOS集群中。请在下面找到我的问题

  1. 使用 ELK 堆栈,进行日志转发的最佳方法是什么 - 我应该使用 Lumberjack 吗?我问这个是因为我看到人们使用 Syslog/Rsyslog 将日志转发到 logstash 的工作流程。
  2. 既然我们所有的软件都是容器化的,我应该在我的所有容器中都包含 Log-forwarder 吗?我打算这样做,因为我的大多数容器会根据运行状况切换节点,因此我不热衷于将文件系统从容器安装到主机。
  3. 我应该使用 redis 作为代理来转发日志吗?如果是,为什么?
  4. 编写定义要转发到 log-stash 的日志格式的 log-config 文件有多难?

这是一个主观问题,但我确信这是人们早就解决的问题,我不热衷于重新发明轮子。

【问题讨论】:

    标签: docker elastic-stack rsyslog logstash-forwarder


    【解决方案1】:

    在许多其他情况下,好的问题和答案都是 - “视情况而定”。

    1. 运送日志 - 我们在内部使用 rsyslog 作为 docker 容器,在某些情况下使用 logstash-forwarder - logstash-forwarder 的优势在于它会加密日志并在某些情况下压缩它们这很重要。我发现 rsyslog 非常稳定且资源较少,因此我们将其用作默认托运人。对于小型机器来说,完整的 logstash 可能很重(更多关于 logstash 的数据 - http://logz.io/blog/5-logstash-pitfalls-and-how-to-avoid-them/)

    2. 我们还完全 docker 化,并为每个 rsyslog/lumberjack 使用单独的 Docker。易于维护、更新版本并在需要时移动。

    3. 是的,一定要使用 Redis。我写了一篇关于如何构建生产 ELK 的博客 (http://logz.io/blog/deploy-elk-production/) - 我谈到了我认为在生产中部署 ELK 的正确架构

    4. 不知道你到底想达到什么目的。

    HTH

    【讨论】:

      【解决方案2】:

      截至 2015 年 8 月的 Docker 具有“Logging Driver”,以便您可以将日志发送到其他地方。这些是支持的远程发送日志的方式。

      【讨论】:

        【解决方案3】:

        我建议不要将日志转发器放入每个 Docker 映像中。这给 Docker 容器增加了不必要的复杂性和膨胀。更简洁的解决方案是将日志转发器(来自 Elastic 的最新日志转发器是 FileBeat,它取代了 logstash 转发器)放入自己的容器中,并将主机的 /var/lib/docker 目录挂载为该容器的卷。

        docker run --detach --name=docker-filebeat -v /var/lib/docker:/var/lib/docker

        /var/lib/docker 包含在主机的 Docker 守护程序上运行的每个容器的所有日志。此目录中的日志文件数据与在每个容器上运行 docker logs <container_id> 获得的数据相同。

        然后在filebeat.yml配置文件中,放入:

        filebeat:
          prospectors:
            -
              paths:
                - /var/lib/docker/containers/*/*.log
        

        然后配置 Filebeat 以转发到 ELK 堆栈的其余部分并启动容器。该机器上的所有 Docker 容器日志将自动转发到您的 ELK 堆栈。

        这种方法很酷的地方在于,如果您愿意,它还允许您转发其他主机系统日志。只需添加另一个指向您要转发的主机系统日志文件的卷,并将该路径也添加到您的 filebeat.yml 配置中。

        我发现这种方法比使用 Docker 日志记录驱动程序等其他方法更干净、更灵活,因为 Docker 设置的其余部分保持不变。您不必将日志记录驱动程序标志添加到每个 Docker 运行命令(或 Docker 守护程序参数)。

        【讨论】:

        • 这很危险,因为您最终可能会无限循环无法正确解析的 logstash 错误日志,而且在这里识别不同的日志类型也很困难
        猜你喜欢
        • 2017-04-09
        • 2019-11-26
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        相关资源
        最近更新 更多