簡體   English   中英

如何根據日志有效負載中的某些關鍵字更改Fluentd中日志消息的嚴重性級別(INFO,ERROR,WARNING等)?

[英]How to change the severity level (INFO, ERROR, WARNING, etc.) of log message in Fluentd based on some keyword in the log payload?

我真的希望有人會幫我解決這個問題,因為我已經嘗試了好幾天了。

我在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"}

此日志以INFO日志的形式顯示在Stackdriver(GKE中的有效輸出)上,如下所示:

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>

希望將消息的嚴重性更改為ERROR,並希望將日志中[..]字段的內容作為一些新的鍵/值(在本例中為message2:main等)獲得。

但是在將此過濾器添加到我的配置文件后,輸出日志仍然像以前一樣,並且看不到任何變化。

我想念什么? 當我編寫正則表達式模式時,不確定是否應該考慮在kubernetes日志文件中還是在我稱為格式2的日志文件中添加消息的“ log”字段(添加了時間-在Stackdriver上) 。

我真的很感謝任何建議,這將是很大的幫助。

我不知道您使用的工具是什么,但看起來正則表達式的第一部分與日志字符串中前綴時間的確切格式不匹配。

實際上\\d{2}僅匹配2位數字。

要匹配整個時間前綴,可以改用(?:\\d{2}:){2}\\d{2}\\.\\d{3}

關於嚴重性的另一點是:您編寫的(?<severity>\\w)僅捕獲一個單詞字符。 您可以使用(?<severity>\\w+)匹配多個字符。

您的正則表達式將變為:

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

演示鞋火柴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM