2017-04-19 30 views
0

我想使用elk棧(Elastic search,kibana,logstash)記錄使用Docker中運行的多個微服務(當前位於swram中)構建的應用程序。Docker:日誌記錄驅動程序的影響

我們希望從stdout/stderr中記錄消息。我們的系統應該爲開發人員添加serviceName,ContainerID,時間戳(如果可能的話,自動和精確地執行),主機名....到每個logentry。

Docker支持多個logging drivers,如Json,syslog和Gelf(只有UDP),可以直接發送到logstash或通過發貨系統(如logspout或其他)。

我的問題:日誌驅動程序和日誌傳送選擇如何影響日誌?碼頭工人是否總是包含以不同方式打包的相同數據(如容器標識,時間戳,實際日誌消息)還是實際影響內容?

我的同事們使用logspout從標準docker json日誌中收集日誌。如果我使用--log-driver = gelf(假設沒有包丟失),我會得到與logstash完全相同的信息嗎?

回答

0

我發現Json日誌只包含:{「log」:「log message」,「stream」:「stderr」,「time」:「2017-04-20T07:05:19.584571658Z」}通過查看docker inspect發現的日誌文件。然而GELF日誌有很多附加字段描述here

fields := gelfFields{ 
hostname:  hostname, 
containerID: ctx.ContainerID, 
containerName: string(containerName), 
imageID:  ctx.ContainerImageID, 
imageName:  ctx.ContainerImageName, 
command:  ctx.Command(), 
tag:   ctx.Config["gelf-tag"], 
created:  ctx.ContainerCreated, } 

不幸的是泊塢窗只傳輸GELF日誌消息使用UDP數據包,從而可能會丟失。但是通過localhost udp包不會丟失。

將json日誌發送到Logstash的Logspout收集關於包含器的附加信息併發送,以便最終結果與gelf條目沒有太大差別。然而,Logspout不是由docker維護的,並且由於數據不在實際的json日誌條目中,對docker的更改可能會中斷或更改功能。

相關問題