上次说,闲着无聊,想把华为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;
字段间隔,有的是空格,有的是,号,有的是;号。。。
好吧,我崩溃了。。大华为的产品经理们,这出自一款产品,一个团队啊,怎能如此狗屎?