elasticsearch 用于日志存储的Grok筛选器,以匹配日志文件中的特定值,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" /> elasticsearch 用于日志存储的Grok筛选器,以匹配日志文件中的特定值,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" />

elasticsearch 用于日志存储的Grok筛选器,以匹配日志文件中的特定值

elasticsearch 用于日志存储的Grok筛选器,以匹配日志文件中的特定值,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok,我有以下日志: 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

我有以下日志:

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}
%{DATESTAMP:Timestamp}%{LOGLEVEL:Level}%{BASE10NUM:Pid}%{USERNAME:SMS\u TYPE}\[cid:(?[0-9]{6})\]%{greedyddata:Message}

我注意到
LOG
pid
之间有不止一个空格字符,您可以使用
\s*
匹配所有空格字符

要仅匹配
[cid:300038]
中的一个数字,您可以使用,
\[cid:(?[0-9]{1,})\]
这将匹配任意长度的
cid
,而不仅仅是6位数字

你的模式会变成

%{DATESTAMP:Timestamp} %{LOGLEVEL:Level}\s*%{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} \[cid:(?<CID>[0-9]{1,})\] %{GREEDYDATA:Message}
%{DATESTAMP:Timestamp}%{LOGLEVEL:Level}\s*{BASE10NUM:Pid}%{USERNAME:SMS\u TYPE}\[cid:(?[0-9]{1,})\]%{GREEDYDATA:Message}

谢谢您,它可以正常工作。因为两个答案似乎做了相同的事情,所以我会选择这一个,因为据我所知,cid可以是从3到任何长度,在我们的例子中可能不超过10,但最好这样匹配,我最终使用了以下内容:
%{DATESTAMP:Timestamp}%{LOGLEVEL:Level}\s*%{BASE10NUM:Pid}%{USERNAME:SMS\u TYPE}\[cid:(?[0-9]{1,}]\[queue msgid:(?[A-Za-z0-9-]+)\]%{DATA:smpp}\[from:(?[0-9]{1,})\]\[to:(?[0-9]{1,})\]%{GREEDYDATA:Message}
如果我能创建一个类似于上面的grok模式并使用%{CID:CID},那也会很好不要在行中使用完整语法…有什么想法吗?使用完整语法的
是什么意思?我的意思是定义一个grok模式,然后调用它。与我对pid或SMS\u类型、级别等所做的相同