忽略并移动到下一个模式,如果日志中包含特定单词(Ignore and move to next pa

2019-09-29 09:24发布

我有这来自春天的日志文件中的日志文件。 日志文件有三种格式。 每个第一两种格式的是一个单一的线,在它们之间是否有关键词APP-信息,它是由自己的显影剂打印的消息。 如果没有,它由弹簧框架打印。 我们可以把从Spring框架的人不同的开发人员的消息。 第三种形式是一个多堆栈跟踪。

我们有一个例子为我们自己的格式,例如

2018-04-27 10:42:49 [http-nio-8088-exec-1] - INFO  - app-info - injectip ip 192.168.16.89

上面一行有app-info重点工作,所以这是我们自己的开发者。

2018-04-27 10:42:23 [RMI TCP Connection(10)-127.0.0.1] - INFO  - org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring FrameworkServlet 'dispatcherServlet'

上述线具有不app-info关键字,因此它是由弹簧框架打印。

在我的神交滤波器,所述第一图案是从弹簧框架打印的消息,第二个是用于开发者的消息,所述第三格式是用于多堆栈跟踪。 我想先正则表达式明确提到,Spring框架格局没有关键字的应用程序,信息,使其能得到paserexception和遵循的是开发商自己的格式的第二图案。 所以,我有以下格式的正则表达式的工具 ,但我得到了编译错误。 我的正则表达式如下:

(?<timestamp>[\d\-\s\:]+)\s\[(?<threadname>[\d\.\w\s\(\)\-]+)\]\s-\s(?<loglevel>[\w]+)\s+-\s+(?<systemmsg>[^((?app-info).)*\s\.\w\-\'\:\d\[\]\/]+)

因为在神交过滤器,我使用的指示,从这个链接

filter {
   grok {
     match => [ "message", "PATTERN1", "PATTERN2" , "PATTERN3" ]
    }
}

我目前在logstash配置如下:这不花纹明显提APP-信息:

filter {
  grok {
    match => [
      "message",
        '(?<timestamp>[\d\-\s\:]+)\s\[(?<threadname>[\d\.\w\s\(\)\-]+)\]\s-\s(?<loglevel>[\w]+)\s+-\s+(?<systemmsg>[\s\.\w\-\'\:\d\[\]\/^[app-info]]+)',
        '(?<timestamp>[\d\-\s\:]+)\s\[(?<threadname>[\d\.\w\s\(\)\-]+)\]\s-\s(?<loglevel>[\w]+)\s+-\s(?<appinfo>app-info)\s-\s(?<systemmsg>[\w\d\:\{\}\,\-\(\)\s\"]+)',
        '(?<timestamp>[\d\-\s\:]+)\s\[(?<threadname>[\w\-\d]+)\]\s-\s(?<loglevel>[\w]+)\s\-\s(?<appinfo>app-info)\s-\s(?<params>params):(?<jsonstr>[\"\w\d\,\:\.\{\}]+)\s(?<exceptionname>[\w\d\.]+Exception):\s(?<exceptiondetail>[\w\d\.]+)\n\t(?<extralines>at[\s\w\.\d\~\?\n\t\(\)\_\[\]\/\:\-]+)\n\d'

    ]      
  }

}

在上述logstash构成的格式,处理时

2018-04-27 10:42:49 [http-nio-8088-exec-1] - INFO  - app-info - injectip ip 192.168.16.89

第一种模式(Spring框架模式)已经工作的,因此它不属于这是我们自己开发的格式第二图案。 解析器已成功parsered如下:

  {
  "timestamp": [
    [
      "2018-04-27 10:42:49"
    ]
  ],
  "threadname": [
    [
      "http-nio-8088-exec-1"
    ]
  ],
  "loglevel": [
    [
      "INFO"
    ]
  ],
  "systemmsg": [
    [
      "app-info - injectip ip 192.168.16.89\n\n"
    ]
  ]
}

任何提示我可以让第一图案清楚地提到systemmsg不得含有关键字“应用程序,信息”?

编辑:

我的目标是,如果没有关键字的应用程序,信息,我让模式1处理日志。 如果有关键字的应用程序,信息,我让模式2处理日志。

随着下面的日志不包含关键字的应用程序,信息(模式1款作品),

2018-04-27 10:42:23 [RMI TCP Connection(10)-127.0.0.1] - INFO  - org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring FrameworkServlet 'dispatcherServlet'

我得到了下面的结果不匹配与第一图案修饰下你的建议,这不是我的目标。

(?<timestamp>[\d\-\s\:]+)\s\[(?<threadname>[\d\.\w\s\(\)\-]+)\]\s-\s(?<loglevel>[\w]+)\s+-\s+(?<systemmsg>[^(?:(?!app\-info).)*\s\.\w\-\'\:\d\[\]\/]+)

看到演示 。 我的目标是提取时间戳,线程名,日志级别和系统味精。 但是第一图案不给我预期的结果。 该工具说没有匹配。

如果我删除^(?:( ?! APP-INFO)。)*,然后上面的日志(不含关键字的应用,资讯)解析器工程。 见演示但现在,它也适用于包含关键字的应用程序,信息预计不日志,因为现在我想提取时间戳,threadname,日志级别,应用,信息(存在与否)(领域应提取或分组),然后systemmsg。 人们期望,第一分析器返回错误,让第二语法分析器处理日志。 演示可以看到解析器也适用于日志与关键字的应用程序,信息。 Systemmsg把现场的应用程序,信息到其价值预计不。

所以,我想模式1,处理日志,但不关键字的应用程序,信息,模式2个手柄记录与关键字的应用程序,信息。 所以,我清楚地让图案1掷解析错误或异常时,它包含关键字的应用程序,信息。

Answer 1:

我的目标是让图形1个手柄没有登录关键字的应用程序,信息。 如果没有应用程序,信息,第一图案应抛出分析错误,从而使第二解析器可以处理日志。

您可以使用以下内容作为第一图案,

(?<data>^(?!.*app-info).*)%{LOGLEVEL:log}%{DATA:other_data}%{IP:ip}$

它的作用是,它会忽略日志,如果有app-info在它在任何位置,并移动到2nd PATTERN


无需登录app-info

2018-04-27 10:42:49 [http-nio-8088-exec-1] - INFO  injectip ip 192.168.16.89

你可以过滤它按您的要求。

OUTPUT

{
  "data": [
    [
      "2018-04-27 10:42:49 [http-nio-8088-exec-1] - "
    ]
  ],
  "log": [
    [
      "INFO"
    ]
  ],
  "other_data": [
    [
      "  injectip ip "
    ]
  ],
  "ip": [
    [
      "192.168.16.89"
    ]
  ]
}

现在,记录与app-info

2018-04-27 10:42:49 [http-nio-8088-exec-1] - INFO app-info  injectip ip 192.168.16.89

OUTPUT

No Matches

请在这里测试

编辑2:

如果您PATTERN1等于(?<data>^(?!.*app-info).*)

你会得到,

{
  "data": [
    [
      "2018-04-27 10:42:49 [http-nio-8088-exec-1] - INFO  injectip ip 192.168.16.89"
    ]
  ]
}

那么你可以添加第二个神交过滤器的data字段,如下所示,

grok {
  match => {"data" => "DEFINE PATTERN HERE"}
}


文章来源: Ignore and move to next pattern if log contains a specific word