繁体   English   中英

将docker容器日志发送到logstash的最佳方法

[英]best way to send docker container logs to logstash

假设我在容器(docker)中运行Nginx。
访问日志和错误日志通过Dockerfile中的STDOUT发送:

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log

Logspout似乎是一个优雅的解决方案,用于在logstash中发送容器的STDOUT(使用syslog输入配置)

input {
    syslog {
        type => syslog
        port => 5514
    }
}

但logspout不知道通过STDOUT发送的日志格式(或者我错过了什么?)

所以我必须做以下事情:

input {
    syslog {
        type => nginx-access
        port => 5514
    }
}

但那么nginx错误日志呢? 如果我通过STDOUT发送php-fpm日志怎么办? logspout如何管理这个?

另一个解决方案是运行rsyslog来设置容器并将收集的日志发送到logstatsh的输入...

你可以看到它对我来说并不是很清楚...我希望能够将nginx和php-fpm日志发送到logstash,这样它们就可以被解释为它们是什么......但我找不到“良好做法“......

你能帮我吗

你现在可以用一点意大利风格的管道来做到这一点。

在较新版本的Docker中,有一个GELF输出驱动程序 ,您可以配置它来发送日志。 由于logstash具有GELF输入插件 ,因此您可以配置logstash以接收相同的日志消息,并对它们执行一些有用的操作。

另一种选择,如果你愿意,以避免GELF翻译往返,是使用logspout-logstash ,一个logstash输出插件logspout ,读取日志条目,因为他们出来泊坞窗。

附录:自从这个答案最初编写以来,我一直活跃在这个领域,并且已经构建了mobystash作为logspout-logstash的更现代和可管理的替代品,以及用于直接从/dev/log套接字获取syslog消息的syslogstash把它们放在logstash中。

我刚刚注意到最新版本的nginx可以配置为登录网络syslog守护进程。

自1.7.1版以来,可以登录到syslog。

使用此方法,您可以在logstash中的专用UDP端口上配置syslog输入过滤器,然后您即可参加比赛。

不幸的是,v1.7.1在官方回购中还有很长的路要走。 你需要一个日志托运人地方

  1. 在nginx容器中。
  2. 在使用'--volumes-from'的并行容器中访问nginx容器。
  3. 在具有绑定到主机文件系统的卷的docker主机上。

您有许多可供选择的日志托运人以及专门针对该主题的The Logstash Book免费章节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM