我想把Docker容器中的STDOUT日志发送给fluentd。但是,当一个容器输出访问日志和错误日志时,日志是混合的。
示例
# rails access log
2017-04-07 12:10:01 +0000 6a51e389e724: {"log":"I, [2017-04-07T12:10:01.825923 #7] INFO -- : Started GET \"/users/new\" for 172.21.0.1 at 2017-04-07 12:10:01 +0000","container_id":"6a51e389e724c67be4e714402b69da192db4a304cbfdf638594de6cff9774c23","container_name":"/app","source":"stdout"}
# rails error log
2017-04-07 12:10:01 +0000 6a51e389e724: {"container_id":"6a51e389e724c67be4e714402b69da192db4a304cbfdf638594de6cff9774c23","container_name":"/app","source":"stdout","log":"E, [2017-04-07T12:10:01.830039 #7] ERROR -- : Invoke logger error"}
# rails access log
2017-04-07 12:10:03 +0000 6a51e389e724: {"log":"I, [2017-04-07T12:10:01.825923 #7] INFO -- : Started POST \"/users/create\" for 172.21.0.1 at 2017-04-07 12:10:01 +0000","container_id":"6a51e389e724c67be4e714402b69da192db4a304cbfdf638594de6cff9774c23","container_name":"/app","source":"stdout"}是否可以为每种日志类型添加标签?如果你有好的解决方案,请告诉我。
谢谢你,并致以最良好的问候。
发布于 2017-04-07 22:06:11
由于您的应用程序的访问和错误日志被发送到容器的STDOUT,因此您无法通过记录驱动程序将它们分开。作为解决方案,您可以将访问日志发送到STDOUT,将错误日志发送到容器的STDERR,然后根据每条json消息的源字段来区分日志(如果您将fluentd连接到elasticsearch+kibana就可以做到这一点)。
https://stackoverflow.com/questions/43278034
复制相似问题