在Docker上进行日志pipe理

我想将STDOUT日志从Docker容器发送到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"} 

我可以为每个日志types添加一个标签吗? 请告诉我,如果你有一个很好的解决scheme。

谢谢你,最好的问候。

由于您的应用程序的访问和错误日​​志被发送到容器的STDOUT,所以您无法通过日志logging驱动程序将它们分开。 作为解决scheme,您可以将访问日志发送到STDOUT,将错误日志发送到容器的STDERR,然后稍后通过每个json消息的“source”字段区分日志(如果将fluentd连接到elasticsearch + kibana,则可以这样做)。