日志级别作为Docker GELF日志记录驱动程序的字段

我想从docker容器中获取stdout日志并将它们发送到ELK堆栈.
到目前为止,我知道Docker中有一个GELF日志记录驱动程序.

但是,我无法弄清楚如何解析消息中的ERROR,WARNING或DEBUG消息,并在Docker将它们发送给ELK之前将它们放入日志消息中的log_level等新字段中.

日志消息应该是这样的:

{
  "client": "127.0.0.1",
  "user": "frank",
  "timestamp": "2000-10-10 13:55:36 -0700",
  "method": "GET",
  "uri": "/apache_pb.gif",
  "protocol": "HTTP/1.0",
  "status": 200,
  "size": 2326,
  "message": "[ERROR] Error connecting to MongoDB",
  "_logLevel" : "ERROR"
}

在发送给ELK之前,哪个docker添加了“_logLevel”:“ERROR”.

谢谢.

我认为你混淆了docker为你做了什么以及logstash(或者可能是logspout)的用途. Docker Gelf驱动程序添加了以下字段:
主机名 – 容器ID – 容器名称 – 图像ID – 图像名称 – 已创建(容器创建时间) – 级别(stdout为6,stderr为3,不应与应用程序loglevel混淆). Docker知道这些东西. Docker不知道您的用户或客户端.这些字段不是由gelf驱动程序或docker创建的.

要实现您想要的功能,您必须在logstash中使用grok过滤器:

我的消息有日志格式:

${date:format=yyyy-MM-dd HH:mm:ss.fff} | ${correlationId} | ${level} | ${callSite} | ${message}

我从docker compose运行logstash,