Regex 如何根据日志负载中的某个关键字更改Fluentd中日志消息的严重性级别(信息、错误、警告等)?

Regex 如何根据日志负载中的某个关键字更改Fluentd中日志消息的严重性级别(信息、错误、警告等)?,regex,logging,kubernetes,fluentd,google-kubernetes-engine,Regex,Logging,Kubernetes,Fluentd,Google Kubernetes Engine,我真的希望有人能帮我解决这个问题,因为我已经想了好几天了 我在GKE的kubernetes有集装箱。在/var/log/containers/my_container.log中,我有如下内容(在其他一些不同格式的日志中): 此日志以信息日志等形式出现在Stackdriver(GKE中的Fluentd输出)上: 23:02:32.000 17-Oct-2017;04:36:29.744 : [main] [server:] [id:] [yt:] ERROR no.myproject.servic

我真的希望有人能帮我解决这个问题,因为我已经想了好几天了

我在GKE的kubernetes有集装箱。在/var/log/containers/my_container.log中,我有如下内容(在其他一些不同格式的日志中):

此日志以信息日志等形式出现在Stackdriver(GKE中的Fluentd输出)上:

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
所以

添加到它(这是Stackdriver的正常行为)。我将把这种格式称为格式2

由于此日志消息实际上是一条错误日志消息(基于其有效负载内容),我希望它在Stackdriver(Fluentd)中显示为错误

我正在努力:

<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>

类型分析器
格式/^(?\d{2}[^\s]*):(?[^\]*)\](?[^\]*)\](?[^\]*)\](?[^\]*)\](?[^\]*)\](?\w)\s+(?*)/
保留数据为真
抑制\u分析\u错误\u日志错误
密钥名称日志
希望获得消息更改为错误的严重性,并将日志中[…]字段的内容作为一些新的键/值获取(在本例中为message2:main等)

但是在将这个过滤器添加到我的配置文件之后,输出日志仍然和以前一样,我没有看到任何更改

我错过了什么?当我编写ReGEX模式时,我不确定我是否应该考虑库伯内斯日志文件中的消息的“日志”字段,或者我称之为格式2(在STACKEDER上添加了时间)的日志。
如果您能给我任何建议,我将不胜感激。

我不知道您正在使用的工具,但您的正则表达式的第一部分似乎与日志字符串中前缀时间的确切格式不匹配

实际上,
\d{2}
将只匹配2位数字

要匹配整个时间前缀,可以使用
(?:\d{2}:){2}\d{2}\.\d{3}

关于严重性还有一点:您编写了只捕获一个单词字符的
(?\w)
。您可以使用
(?\w+)
匹配多个字符

您的正则表达式将变成:

^(?<time>(?:\d{2}:){2}\d{2}\.\d{3} [^\s]*) : (?<message2>[^ \]]*)\] (?<message3>[^ \]]*)\] (?<message4>[^ \]]*)\] (?<message5>[^ \]]*)\] (?<severity>\w+)\s+(?<log2222>.*)
(?[^\]*)(?[^\]*)(?[^\]*)\](?[^\]*)\](?[^\]*)\](?[^\]*)\](?[^\]*)\](?[^\]*)\](?[^\]*)\](?\w+\s+(?*)

那双鞋很相配。

非常感谢。现在,我从输出中的有效负载捕获严重性。我还有一个问题。我还希望在输出中添加message2到message5和log2222的新字段,但没有添加新字段。如何从日志文本有效负载中提取一些数据,并将其作为输出中的一个新的额外字段(如上例中的“message2:[main]”)获取?不客气。我不知道您的工具,所以我不确定它是否有帮助,但是,如果您可以指定替换字符串,那么您可以使用
${severity}message2:${message2}
作为替换。然后您将得到
错误消息2:[main
。请参阅新版本。
<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>
^(?<time>(?:\d{2}:){2}\d{2}\.\d{3} [^\s]*) : (?<message2>[^ \]]*)\] (?<message3>[^ \]]*)\] (?<message4>[^ \]]*)\] (?<message5>[^ \]]*)\] (?<severity>\w+)\s+(?<log2222>.*)