【问题标题】:Logstash grok custom pattern yields no fieldsLogstash grok 自定义模式不产生任何字段
【发布时间】:2014-10-03 12:35:30
【问题描述】:

新手提醒!

我有以下 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 调试器中,命名模式名称用作字段并发出就好了。但是,当我在 grok 调试器中使用的相同日志事件上运行它时,不会发出来自日志事件行或字段名称的数据。

例如异常类名模式产生:

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

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

非常感谢任何帮助。

谢谢

日志文件是这样的:

[30/09/14 23:07:15:195 BST] 00000043 SystemOut O ERROR 32109 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 = 32109>

[30/09/14 23:07:15:200 BST] 00000043 SystemOut O ERROR 32109 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 = 32109>

【问题讨论】:

标签: logstash


【解决方案1】:

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

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

所以对于你的例子,我会做这样的事情:

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.." ]            
    }
}

可以整理,但你明白要点..

【讨论】:

  • 谢谢安德鲁。这对我来说很有意义。非常感谢。
【解决方案2】:

grok 的语法是 match =&gt; [ "field", "pattern1", "pattern2", "pattern3",...,"patternN"]。多个 match 参数不起作用,因为它将它们加载到哈希中 - 导致它只使用最后一个。

您需要创建多个 grok 块,每个块都带有 break_on_match =&gt; false 以按照您显示的方式进行操作,但是如果您使用第一种形式并使用完整的模式来匹配整行这样会更好,这样您就可以避免不可避免的_grokparsefailures。

【讨论】:

  • 是的。就是这样。谢谢你。当我拆分 Grok 语句时,我现在可以看到所有字段。非常感谢。我会研究你的建议。欣赏它。 Logstash 感觉很难处理......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多