首页 > 解决方案 > 一种查找特定单个字符的方法 - grok 模式

问题描述

正如标题所说,目前开始在工作项目中使用 Grok 模式,但我遇到了一些问题。基本上我最初处理日志然后检查消息(字段)本身是否存在“%”符号,因为如果它存在我想“重新识别”消息,我将粘贴代码,因为我相信它会有所帮助说明问题:

filter {
   if [solution] == "horizon" {
      grok {
         id => "horizon_base_grok"
         match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}  %{DATA:horizon.component}             %{DATA:horizon.process}:%{GREEDYDATA:message}" }
         overwrite => ["message"]
         if '%' in [message] {
            match => { "message" => "%{DATA:free_mem_string} < %{NUMBER:free_mem_value:int}%{GREEDYDATA:message}" }
            overwrite => ["message"]
         }
      }
      if [log-level] not in [ "ERROR","WARN","FATAL" ] {
         drop {}
      }
   }

   date {
      id => "horizon_date"
      match => [ "timestamp","ISO8601" ]
      add_tag => [ "horizon_date" ]
   }
}

如果我删除这部分:

if '%' in [message] {
            match => { "message" => "%{DATA:free_mem_string} < %{NUMBER:free_mem_value:int}%{GREEDYDATA:message}" }
            overwrite => ["message"]
         }

一切正常,但是使用这段代码,我们停止在 Kibana 上获取日志。我已经测试过在在线调试器上输入 Grok 模式并且它可以工作,所以我几乎 100% 确定问题出在“if”语句上。

你能帮忙吗?非常感激!

标签: grok

解决方案


推荐阅读