有没有办法自定义Docker的日志?

时间:2017-08-07 08:50:38

标签: docker logging

我们正在收集应用程序的日志。由于我们将应用程序容器化,因此收集日志的方式需要稍作修改。

我们通过Docker日志记录驱动程序登录:

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

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

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

{
  “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”
}

1 个答案:

答案 0 :(得分:1)

我不知道如何自定义json-file docker日志插件的输出。但是,docker支持gelf插件,允许您将日志发送到logstash。使用logstash,您可以通过多种不同方式输出日志(使用output plugins),同时自定义格式。

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

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

如果您不想为日志记录逻辑添加复杂性,可以继续使用json-file驱动程序并使用jq等实用程序来解析文件并仅提取相关内容信息。例如,使用jq,您可以执行:jq -r .log </path/to/logfile>

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