2017-04-19 71 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的更改可能会中断或更改功能。

相关问题