2017-04-07 111 views
0

我想將STDOUT日誌從Docker容器發送到fluentd。 但是,當一個容器輸出訪問日誌和錯誤日誌時,日誌是混合的。Docker上的日誌管理

例如

# rails access log 
2017-04-07 12:10:01 +0000 6a51e389e724: {"log":"I, [2017-04-07T12:10:01.825923 #7] INFO -- : Started GET \"https://stackoverflow.com/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 \"https://stackoverflow.com/users/create\" for 172.21.0.1 at 2017-04-07 12:10:01 +0000","container_id":"6a51e389e724c67be4e714402b69da192db4a304cbfdf638594de6cff9774c23","container_name":"/app","source":"stdout"} 

我可以添加一個標籤爲每個日誌類型? 請告訴我,如果你有一個很好的解決方案。

謝謝你,最好的問候。

回答

0

由於您的應用的訪問和錯誤日​​志被髮送到容器的STDOUT,因此您無法通過日誌記錄驅動程序將它們分開。作爲解決方案,您可以將訪問日誌發送到STDOUT,將錯誤日誌發送到容器的STDERR,然後稍後通過每個json消息的「source」字段區分日誌(如果將fluentd連接到elasticsearch + kibana,則可以完成此操作)。