用于 logstash 的 Grok 过滤器以匹配日志文件中的特定值
Grok filter for logstash to match a specific value from a log file
我有以下日志:
2018-10-30 11:47:52 INFO 30464 SMS-MT [cid:300038] [queue-msgid:bb7a195d-fb23-42ae-bbfa-d2dcda405af9] [smpp-msgid:j.11082.639364178944.#MARKET SETU] [status:ESME_ROK] [prio:1] [dlr:NO_SMSC_DELIVERY_RECEIPT_REQUESTED] [validity:none] [from:2323232] [to:23232132312] [content:'#MARKET SETUP\nadsadadadadasdasdadaasdada mo ang:\nC jean_rivera\n--Mag reply ng A-C']
我已经在 logstash 中创建了一个基于模式的 grok 过滤器,这样我就可以按照我想要的方式解析日志。我有这个:
%{DATESTAMP:Timestamp} %{LOGLEVEL:Level} %{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} %{CID:CID} %{GREEDYDATA:Message}
我正在尝试创建一个匹配 300038 的 GROK 模式,这是 cid: 之后的数字。语法始终相同,[cid:number]。我现在拥有的是:
CID (\[cid:[0-9]{6}\])
but that results into:
"CID": [
[
"[cid:300038]"
]
],
我只想匹配 300038,没有 [cid:] 部分
使用
%{DATESTAMP:Timestamp} %{LOGLEVEL:Level} %{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} \[cid:(?<CID>[0-9]{6})\] %{GREEDYDATA:Message}
我注意到 LOG
和 pid
之间有多个 space 字符,您可以使用 \s*
匹配所有字符。
要仅匹配来自 [cid:300038]
的数字,您可以使用 custom pattern、\[cid:(?<CID>[0-9]{1,})\]
这将匹配任何长度的 cid
,而不仅仅是 6 位数字。
你的图案会变成,
%{DATESTAMP:Timestamp} %{LOGLEVEL:Level}\s*%{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} \[cid:(?<CID>[0-9]{1,})\] %{GREEDYDATA:Message}
我有以下日志:
2018-10-30 11:47:52 INFO 30464 SMS-MT [cid:300038] [queue-msgid:bb7a195d-fb23-42ae-bbfa-d2dcda405af9] [smpp-msgid:j.11082.639364178944.#MARKET SETU] [status:ESME_ROK] [prio:1] [dlr:NO_SMSC_DELIVERY_RECEIPT_REQUESTED] [validity:none] [from:2323232] [to:23232132312] [content:'#MARKET SETUP\nadsadadadadasdasdadaasdada mo ang:\nC jean_rivera\n--Mag reply ng A-C']
我已经在 logstash 中创建了一个基于模式的 grok 过滤器,这样我就可以按照我想要的方式解析日志。我有这个:
%{DATESTAMP:Timestamp} %{LOGLEVEL:Level} %{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} %{CID:CID} %{GREEDYDATA:Message}
我正在尝试创建一个匹配 300038 的 GROK 模式,这是 cid: 之后的数字。语法始终相同,[cid:number]。我现在拥有的是:
CID (\[cid:[0-9]{6}\])
but that results into:
"CID": [
[
"[cid:300038]"
]
],
我只想匹配 300038,没有 [cid:] 部分
使用
%{DATESTAMP:Timestamp} %{LOGLEVEL:Level} %{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} \[cid:(?<CID>[0-9]{6})\] %{GREEDYDATA:Message}
我注意到 LOG
和 pid
之间有多个 space 字符,您可以使用 \s*
匹配所有字符。
要仅匹配来自 [cid:300038]
的数字,您可以使用 custom pattern、\[cid:(?<CID>[0-9]{1,})\]
这将匹配任何长度的 cid
,而不仅仅是 6 位数字。
你的图案会变成,
%{DATESTAMP:Timestamp} %{LOGLEVEL:Level}\s*%{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} \[cid:(?<CID>[0-9]{1,})\] %{GREEDYDATA:Message}