将docker容器日志发送到logstash的最佳方法
比方说,我有一个容器(泊坞窗)内运行的Nginx。
访问日志和错误日志通过STDOUT在Dockerfile中发送:
# 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似乎是一个优雅的解决scheme,可以在logstash内发送容器的STDOUT(configuration了sysloginput)
input { syslog { type => syslog port => 5514 } }
但是logspout不知道通过STDOUT发送的日志的格式(或者我错过了什么?)
所以我必须做一些事情:
input { syslog { type => nginx-access port => 5514 } }
但那么nginx错误日志呢? 如果我也通过STDOUT发送php-fpm日志呢? logspout如何pipe理这个?
另一个解决scheme是运行rsyslog indos容器并将收集的日志发送到logstatsh的input…
正如你所看到的,这对我来说并不是很清楚……我希望能够发送nginx和php-fpm日志到logstash,以便它们可以被解释为它们是什么……但是我没有find“好的做法“…
你能帮我吗
现在,你可以用一些意大利式的pipe道来做到这一点。
在较新版本的Docker中,有一个GELF输出驱动程序 ,您可以将其configuration为发送日志。 由于logstash具有GELFinput插件 ,因此可以将logstashconfiguration为接收这些相同的日志消息,并对其执行一些有用的操作。
另一种select是,如果您希望避免GELF翻译往返,则使用logspout-logstash ,一个logspash输出插件,用于读取从Docker中出来的日志条目。
我只注意到最近版本的nginx可以configuration为login到networkingsyslog守护进程。
从版本1.7.1开始,可以logging到syslog。
使用此function,您可以在logstash中的专用UDP端口上configuration系统日志inputfilter,并且您将进入比赛。
不幸的是,v1.7.1在官方回购中还有很长一段路要走。 你需要一个日志托运的地方 。
- 在nginx容器中。
- 在使用'–volumes-from'来访问nginx容器的并行容器中。
- 在具有绑定到主机文件系统的卷的docker主机上。
你有许多日志托运人可以从中select一本关于该主题的Logstash Book的免费章节 。