最近我试图找到使用ELK堆栈的最佳Docker日志记录机制.我对公司在生产中使用的最佳工作流程有一些疑问.我们的系统有典型的软件堆栈,包括Tomcat,Postgresql,MongoDB,Nginx,RabbitMQ,Couchbase等.截至目前,我们的堆栈在CoreOS集群中运行.请在下面找到我的问题
>使用ELK堆栈,进行日志转发的最佳方法是什么?我应该使用Lumberjack吗?我问这个是因为我看过人们使用Syslog / Rsyslog将日志转发到logstash的工作流程.
>由于我们所有的软件都是集装箱式的,我应该在所有容器中都包含Log-forwarder吗?我计划这样做,因为我的大多数容器都根据运行状况切换节点,因此我不热衷于将文件系统从容器安装到主机.
>我应该使用redis作为代理来转发日志吗?如果是,为什么?
>编写定义要转发到log-stash的日志格式的log-config文件有多难?
这是一个主观问题,但我确信这是人们很久以前解决的问题,我并不热衷于重新发明轮子.
>发货日志 – 我们在内部使用rsyslog作为docker容器,在某些情况下使用logstash-forwarder– logstash-forwarder的优点是它加密日志并压缩它们,因此在某些情况下这很重要.我发现rsyslog非常稳定且资源很少,因此我们将其用作默认出货单.对于小型机器,完整的logstash可能很重(有关logstash的更多数据 – http://logz.io/blog/5-logstash-pitfalls-and-how-to-avoid-them/)
>我们也完全停靠,并为每个rsyslog / lumberjack使用单独的Docker.易于维护,更新版本并在需要时移动.
>是的,绝对使用Redis.我写了一篇关于如何构建生产ELK的博客(http://logz.io/blog/deploy-elk-production/) – 我谈到了我认为在生产中部署ELK的正确架构
>不确定你到底想要实现什么目标.
HTH