代码之家  ›  专栏  ›  技术社区  ›  Bogdan Stoica

Grok filter for logstash以匹配日志文件中的特定值

  •  1
  • Bogdan Stoica  · 技术社区  · 7 年前

    我有以下日志:

    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 ,后面是哪个号码cid:. 语法总是一样的[cid:number]. 我现在得到的是:

        CID (\[cid:[0-9]{6}\])
    but that results into: 
    "CID": [
        [
          "[cid:300038]"
        ]
      ],
    

    我只想匹配300038,没有 [cid:]零件号

    2 回复  |  直到 7 年前
        1
  •  1
  •   Sufiyan Ghori    7 年前

    我注意到两个字符之间有不止一个空格 LOG 和 pid ,可以使用 \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}
    
        2
  •  1
  •   ben5556    7 年前

    使用

    %{DATESTAMP:Timestamp} %{LOGLEVEL:Level}     %{BASE10NUM:Pid} %{USERNAME:SMS_TYPE} \[cid:(?<CID>[0-9]{6})\] %{GREEDYDATA:Message}