我真的很希望有人能帮我解决这个问题,因为我一直试图弄清楚这几天。如何根据日志有效载荷中的某个关键字更改Fluentd中的日志消息的严重级别(INFO,ERROR,WARNING等)?
我有容器在GKE中运行kubernetes。在/var/log/containers/my_container.log,我有这样的事情(不同格式的一些其他日志中):
{"log":"17-Oct-2017;04:36:29.744 : [main] [server:] [id:] [yt:] ERROR no.myproject.service.Server - call failed for some reason\n","stream":"stdout","time":"2017-10-17T04:36:29.750702216Z"}
此日志出现在为Stackdriver(在GKE Fluentd输出)作为INFO日志和像:
23:02:32.000 17-Oct-2017;04:36:29.744 : [main] [server:] [id:] [yt:] ERROR no.myproject.service.Server - call failed for some reason
所以
23:02:32.000
被添加到它(这是为Stackdriver的正常行为)。我将这种格式称为格式2.
由于此日志消息实际上是一个ERROR日志消息(基于其有效负载内容),我希望它在Stackdriver(Fluentd)中显示为ERROR。
我想:
<filter reform.**>
type parser
format /^(?<time>\d{2} [^\s]*) : (?<message2>[^ \]]*)\] (?<message3>[^ \]]*)\] (?<message4>[^ \]]*)\] (?<message5>[^ \]]*)\] (?<severity>\w)\s+(?<log2222>.*)/
reserve_data true
suppress_parse_error_log false
key_name log
</filter>
希望得到的消息变化的严重程度错误,并且也得到[..]字段的日志一些新的键/值的内容(在此case message2:main等)。
但是,在将此过滤器添加到我的配置文件后,输出日志仍然和以前一样,并且我没有看到任何更改。
我错过了什么?当我写我的正则表达式模式时,我不确定是否应该在kubernetes的日志文件中考虑消息的“日志”字段,或者我将其称为格式2的消息的日志文件字段(添加时间 - 在Stackdriver上) 。
我真的很感激任何建议,这将是一个很大的帮助。
非常感谢。现在我正在捕获输出中有效负载的严重性。我还有一个问题。我还希望在输出中添加message2到message 5和log2222的新字段,但不会添加新字段。我如何从日志文本有效载荷中提取一些数据,并将其作为输出中的新外部字段(如上例中的“message2:[main]”)? – samanta
不客气。我不知道你的工具,所以我不确定它会有帮助,但是,如果你可以指定替换字符串,那么你可以使用'$ {severity} message2:$ {message2}'作为替换。然后你会得到'ERROR message2:[main'。查看新版本[这里](https://regex101.com/r/o5lu2j/2)。 – PJProudhon