天天看點

華為USG防火牆,你到底有多少種格式的日志……

上次說,閑着無聊,想把華為USG防火牆的日志收集到ES中進行大屏展示。。已經忙活了兩周了,心态崩潰了無數次。。我也不知道這款産品,到底有多少種格式的日志。。先給大家看我的比對記錄。

grok {
        match => [
            "message", "(?<timestamp>%{MONTH}\s+%{MONTHDAY}\s+%{YEAR}\s+%{TIME})%{SPACE}*%{HOSTNAME:fwname}\s+%%(?<log_ver>\d{2})(?<modulename>\w+)\/%{WORD:severity}\/%{WORD:brief}\(%{WORD:log_type}\)\[%{WORD:num}\]\:\[%{WORD:description}\]%{GREEDYDATA:info}",
            "message", "(?<timestamp>%{MONTH}\s+%{MONTHDAY}\s+%{YEAR}\s+%{TIME})%{SPACE}*%{HOSTNAME:fwname}\s+%%(?<log_ver>\d{2})(?<modulename>\w+)\/%{WORD:severity}\/%{WORD:brief}\(%{WORD:log_type}\)\[%{WORD:num}\]:(?<description>(.*))\s+\(%{GREEDYDATA:info}\)" ,
            "message", "(?<timestamp>%{MONTH}\s+%{MONTHDAY}\s+%{YEAR}\s+%{TIME})%{SPACE}*%{HOSTNAME:fwname}\s+%%(?<log_ver>\d{2})(?<modulename>\w+)\/%{WORD:severity}\/%{WORD:brief}\(%{WORD:log_type}\)\[%{WORD:num}\]\:%{GREEDYDATA:info}",
            "message", "(?<timestamp>%{MONTH}\s+%{MONTHDAY}\s+%{YEAR}\s+%{TIME})%{SPACE}*%{HOSTNAME:fwname}\s+%%(?<log_ver>\d{2})(?<modulename>\w+)\/%{WORD:severity}\/%{WORD:brief}\(%{WORD:log_type}\)\:(?<description>(.*))\s+\(%{GREEDYDATA:info}\)",
            "message", "(?<timestamp>%{MONTH}\s+%{MONTHDAY}\s+%{YEAR}\s+%{TIME})%{SPACE}*%{HOSTNAME:fwname}\s+%%(?<log_ver>\d{2})(?<modulename>\w+)/%{INT:severity}/%{WORD:brief}\(%{WORD:log_type}\):%{GREEDYDATA:info}" 
            ]
     }           

先看相對标準的日志頭内容,記住,這裡用的是相對。

格式一:這裡有中括号 [187010]加描述資訊

<190>Oct 18 2022 09:09:10 WAN-FW-M %%01USERS/6/NESRV(l)[187010]:id=USG6680

格式二:這裡又沒有了中括号,直接是描述

<188>Oct 19 2022 07:44:20 WAN-FW-M %%01IPS/4/DETECT(l):An intrusion was detected.

格式三:中括号後面的描述又變成了中括号

<189>Oct 18 2022 07:03:38 WAN-FW-M %%01CM/5/USER_ACCESSRESULT(s)[182860]:[USER_INFO_AUTHENTICATION]

格式四:時間戳後,從上面一個空格,變成兩個空格。。(問候一下這個産品經理的親戚)

<188>Oct 19 2022 07:44:20 WAN-FW-M %%01IPS/4/DETECT(l):An intrusion was detected.

格式五:到此結束。。後面沒有描述了

<190>Oct 18 2022 09:09:09 WAN-FW-M %%01POLICY/6/POLICYPERMIT(l):

---

經過幾天的折騰,先把前面标準内容比對出來了。接着下來,解析後面的内容。

這裡使用fiter的kv插件進行解析。

大緻如下:

kv {
        source => "info"
        trim_value => "<>\[\]\"\\(\\),"
        trim_key => "<>\[\],"
        value_split => "="
        # 寬松模式比對空格whitespace
        whitespace => "lenient"
    }           

你以為這樣就能正确比對了?

接下來又是崩潰的。。有的日志格式中使用的鍵值格式是source-port=22470,有的是source-port:22470,有的是source port=22470。

日志内時間格式,有的是time=2022/10/18 17:09:09,有的是:TIME=1666166434;ZONE=UTC+0800;

字段間隔,有的是空格,有的是,号,有的是;号。。。

好吧,我崩潰了。。大華為的産品經理們,這出自一款産品,一個團隊啊,怎能如此狗屎?

繼續閱讀