使用神交跳过消息或日志的部分

问题描述 投票:1回答:2

我刚开始使用神交的logstash,我试图用神交过滤器来分析我的日志文件。我的logline是类似下面

2017年3月30日13时26分13秒[00089] TIMER XXX.TimerLog:entType [组织],queueType [输出],memRecno = 446323718,audRecno = 2595542711,经过的时间= 998ms

我想只捕捉初始日期/时间戳记,entType [organization]elapsed time = 998ms

然而,它看起来像我要为在该行的每一个字和数量相匹配的模式。有没有一种方法,我可以跳过它?我想看看无处不在,但无法找到任何东西。请帮助。

logstash logstash-grok
2个回答
4
投票

按照查尔斯·达菲的评论。

有2种方式这样做的:在GREEDYDATA方式(?:.*)

grok {
  match => {"message" => "^%{DATE_US:dte}\s*%{TIME:tme}\s*\[%{GREEDYDATA}elapsed time\s*=\s*%{BASE10NUM}"
}

或者,告诉它忽略了一个比赛,并期待在列表中的下一个。

grok {
  break_on_match => false
  match => { "message" => "^%{DATE_US:dte}\s*%{TIME:tme}\s*\[" }
  match => { "message" => "elapsed time\s*=\s*%{BASE10NUM:elapsedTime}"
}

然后,您可以重新加入日期和时间成一个单一的领域,将其转换为一个时间戳。


2
投票

正如查尔斯·达菲建议,你可以简单地绕过数据则不需要。

您可以使用.*做到这一点。

下面会产生你想要的输出,

%{DATE_US:dateTime}.*entType\s*\[%{WORD:org}\].*elapsed time\s*=\s*%{BASE10NUM}

说明:

  • \s*匹配空格字符。
  • \[被绕过[字符。
  • %{WORD:org}定义一个单词边界,并将其放置在一个新的领域org

输出

{
  "dateTime": [
    [
      "03-30-2017"
    ]
  ],
  "MONTHNUM": [
    [
      "03"
    ]
  ],
  "MONTHDAY": [
    [
      "30"
    ]
  ],
  "YEAR": [
    [
      "2017"
    ]
  ],
  "org": [
    [
      "organization"
    ]
  ],
  "BASE10NUM": [
    [
      "998"
    ]
  ]
}

Click for a list of all available grok patterns

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.