如何将 "a=b c=d" 的模式与 grok (logstash) 中的更改顺序相匹配?

How to match a pattern of "a=b c=d" with changing order in grok (logstash)?

我正在使用 Logstash 来匹配 Fortinet 分析器日志,问题是有太多没有字段顺序的模式。

例如一种类型的消息是:

service=DNS hostname="a.b.net" profile="Dns" action=blocked reqtype=direct url="/" sentbyte=0 rcvdbyte=0 direction=N/A msg="URL belongs to a denied category in policy" method=domain cat=61 catdesc="Phishing" crscore=60 crlevel=high

...另一个是:

msg="File is infected." action=blocked service=HTTP sessionid=33137 direction=incoming filename="favicon.ico" quarskip=No-skip virus="MSWord/Agent.DD60!tr" dtype="Virus" ref="http://www.fortinet.com/ve?vn=MSWord%2FAgent.DD60%21tr" virusid=6920465 profile="AV"

如您所见,两者都有 msgactionserviceprofile,但顺序不同。

有没有建立一个模式来匹配像这样的东西:

(.*?)=%{DATA:?}\s 

...同时为字段指定第一个匹配项的名称?

使用 kv{} filter 可以将它们全部分开并且不关心顺序。