假设我在容器(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以便它们可以被解释为它们是什么......但我不会&#39找到一个好的做法" ...
请帮助我
答案 0 :(得分:10)
现在,你可以用一点意大利式的管道来做到这一点。
在较新版本的Docker中,有a GELF output driver,您可以将其配置为发送日志。由于logstash具有a GELF input plugin,因此您可以将logstash配置为接收这些相同的日志消息,并对它们执行一些有用的操作。
另一个选择,如果你更愿意避免GELF翻译往返,那就是使用logspout-logstash,一个logspout的logstash输出插件,它读取来自Docker的日志条目
附录:自从这个答案最初编写完成以来,我一直活跃在这个领域,并且mobystash已经构建了logspout-logstash
作为/dev/log
的更现代和可管理的替代品,以及syslogstash从{{1}}套接字直接获取syslog消息并将它们放在logstash中。
答案 1 :(得分:1)
我刚注意到recent versions of nginx can be configured to log to network syslog daemons.
从版本1.7.1开始,可以登录到syslog。
使用此功能,您可以在logstash中的专用UDP端口上配置系统日志输入过滤器,并且您将参加比赛。
不幸的是,v1.7.1在官方回购中还有很长的路要走。您需要某处的日志托运人。
您可以选择许多日志托运人和free chapter of The Logstash Book dedicated to the subject。