2014-10-03 21 views
1

新手提醒!Logstash grok定制图案不会产生任何字段

我有以下神交过滤器:

filter { 

     grok { 
       match => [ "message","%{DATESTAMP:timestamp}" ] 
       match => [ "message", "(?<number_after_timestamp>[0-9]{8}\s\w+)"] 
       match => [ "message", "(?<error_or_debug>(ERROR|DEBUG))"] 
       match => [ "message", "(?<first_part>ORB\.thread\.pool.*(?=\s{2}))" ] 
       match => [ "message", "(?<exception_class_name>(?<=\<Exception class name\=\s).*?\>)" ] 
       match => [ "message", "(?<exception_message>(?<=\<Exception message\=).*?(?=\>))" ] 

     } 


} 

独立精确匹配的文本块我需要使用神交调试测试时,每这些模式之一。在Grok调试器中,命名的模式名称用作字段并发射得很好。但是,当我在grok调试器中使用的相同日志事件上运行此操作时,不会发出日志事件行或字段名称中的任何数据。

例如异常类名模式,得到:

{ 
    "exception_class_name": [ 
    [ 
     "com.ultatica.bd.exceptions.TTFException>" 
    ] 
    ] 
} 

但是,当对数据从logstash从命令行运行 - >不是香肠!

真的很感激任何帮助。

感谢

日志文件是这样的:

[30/09/14 23:07:15:195 BST] 00000043 SystemOut O ERROR9 Tue Sep 30 23:07:15 BST 2014 ORB.thread.pool : 2 webuser com.ultra.bd.services.UltraticoCustomerService.processRequest API getPerson <Exception class name= com.Ultratico.bd.exceptions.UCOException> <Exception message= e05CX432182S> <UCOException Error =9> 

[30/09/14 23:07:15:200 BST] 00000043 SystemOut O ERROR9 Tue Sep 30 23:07:15 BST 2014 ORB.thread.pool : 2 webuser com.Ultratico.ecrm.framework.sessionHandler.UltraticoSessionHandler.execute <Exception class name= com.Ultratico.bd.exceptions.UCOException> <Exception message= e05CX432182S> <UCOException Error =9> 
+0

你可以添加从输入(日志文件等)几行? – 2014-10-03 13:02:42

+0

编辑OP以显示样本日志行 – user3202399 2014-10-03 13:08:48

+0

可能的重复[使用grok将日志文件名添加为logstash中的字段](http://stackoverflow.com/questions/23780000/use-grok-to-add-the-log -filename-as-a-field-in-logstash) – OhadR 2015-06-08 14:46:32

回答

3

的语法grokmatch => [ "field", "pattern1", "pattern2", "pattern3",...,"patternN"]。多个match参数将无法工作,因为它将它们加载到散列中 - 导致它仅使用最后一个散列。

您需要创建多个grok块每break_on_match => false做到这一点你是显示的方式,但如果你使用第一种形式,做了充分的模式来匹配整行,这样就可以避开不可避免的会更好_grokparsefailure s。

+0

是。就是这样。谢谢。当我将Grok语句分开时,我现在可以看到所有的字段。非常感谢。我会研究你的建议。欣赏它。 Logstash感觉艰难.... – user3202399 2014-10-03 14:06:38

4

看着输入,我试图解析它的方式是使用单个匹配表达式。在logstash中,我使用多种匹配模式作为解析不同类型日志条目的一种方式。例如

  1. 匹配模式1 => NO
  2. 匹配模式2 =>是
  3. 匹配模式3 => NO

因此,对于你的例子,我会做这样的事情:

filter { 
    grok {  
     break_on_match => false 
     match => [ "message", "%{SYSLOG5424SD:timestamp} %{NUMBER:number_after_timestamp} (?<forget1>.*) (?<error_or_debug>ERROR|DEBUG) %{NUMBER:process_id} (?<timestamp_2>.{7} \d{2} \d{2}:\d{2}:\d{2} \w{3} \d{4}) %{JAVACLASS:origin} : (?<first_part>.*) %{JAVACLASS:exception_class_name} (?<exception_message>.*)" ] 
     match => [ "message", "..some other pattern you want to extract.." ] 
     match => [ "message", "..some other pattern you want to extract.." ]    
    } 
} 

可以整理,但你得到的主意......

+0

谢谢安德鲁。这对我来说很有意义。非常感激。 – user3202399 2014-10-03 15:37:28