我们正在收集应用程序的日志。由于我们将应用程序容器化,因此收集日志的方式需要稍作修改。
我们通过Docker日志记录驱动程序登录:
但来自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”
}
答案 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
字段。