有没有一种方法来定制Docker的日志?

我们正在收集我们的应用程序的日志。 由于我们对应用程序进行容器化,所以收集日志的方式需要稍微改变。

我们通过Docker Logging Driverlogin:

  • 应用程序将日志输出到容器的stdout和stderr
  • 使用json文件日志logging驱动程序,docker输出日志到主机上的json文件
  • 主机上的服务转发日志文件。

但是来自Docker的日志有额外的信息,这些信息是不必要的,并使向前步骤复杂化,因为我们需要在转发之前删除这些附加信息。

例如,来自Docker的日志如下所示,但我们所需要的只是日志字段的值。 有没有办法自定义日志格式,只输出所需的信息覆盖一些docker的configuration?

{ “log”: "{“level”: “info”,“message”: “data is correct”,“timestamp”: “2017-08-01T11:35:30.375Z”}\r\n", “stream”: “stdout”, “time”: “2017-08-03T07: 58: 02.387253289Z” } 

我不知道有什么方法来定制json-filedocker日志插件的输出。 不过docker支持gelf插件,它允许你发送日志到logstash。 使用logstash可以以多种不同的方式输出日志(使用输出插件 ),同时定制格式。

例如,要将日志输出到文件(没有任何其他元数据),可以使用如下所示的内容:

 output { file { path => "/path/to/logfile" codec => line { format => "%{message}"} } } 

如果您不想为日志逻辑添加复杂性,则可以继续使用json-file驱动程序,并使用jq等实用程序来parsing文件并仅提取相关信息。 比如用jq,你可以这样做: jq -r .log </path/to/logfile>

这将读取指定文件的每一行作为json对象,并只输出log字段。