【问题标题】:grok filtering pattern issuegrok过滤模式问题
【发布时间】:2017-09-20 21:35:59
【问题描述】:

我尝试使用 grok 过滤器匹配日志文件的日志级别,但仍然得到 _grokparsefailure。问题可能在于 [ 和日志级别之间的空间。

日志示例:2017-04-21 10:12:03,004 [INFO] 消息

我的过滤器:

filter {
    grok {
        match => {
            "log.level" => "\[ %{LOGLEVEL:loglevel}\]"
        }
    }
}

我也尝试了其他一些解决方案,但没有成功:

"\[ *%{LOGLEVEL:loglevel}\]"
"\[%{SPACE}%{LOGLEVEL:loglevel}\]"

提前感谢您的帮助

【问题讨论】:

    标签: logstash logstash-grok


    【解决方案1】:

    重点是默认字段是message,需要匹配所有字符串

    filter {
        grok {
            match => {
                "message" => "%{TIMESTAMP_ISO8601:logDate} \[ %{LOGLEVEL:loglevel}\]%{GREEDYDATA:messages}"
            }
        }
    }
    

    【讨论】:

    • 不,你不必匹配整个字符串,部分匹配工作。
    • @baudsp 什么意思,我粘贴你的例子并放入 grok 调试器它工作......你对部分匹配工作的意思是什么
    • 如果用户只想检索字符串的一部分(这里是日志级别),匹配完整的字符串是没有用的;只需匹配相关部分(此处为\[ %{LOGLEVEL:loglevel}\])即可完成。我们的两种解决方案都有效,我更喜欢我的。
    【解决方案2】:

    问题在于过滤器中的选项match:此选项是一个哈希值,它告诉过滤器要查看哪个字段以及要查看哪个字段。

    你的正则表达式没问题(你可以用http://grokconstructor.appspot.com/do/match检查),问题出在字段名上;应该是message

    所以在你的情况下,你的过滤器应该是这样的:

    grok {
        match => {
            "message" => "\[ %{LOGLEVEL:loglevel}\]"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多