【问题标题】:grok multiple messages and process them with different tagsgrok 多条消息并使用不同的标签处理它们
【发布时间】:2017-10-05 14:36:03
【问题描述】:

我想在 Logstash(2.4 版)中创建一个过滤器,在同一个 grok 中使用不同的匹配项。 我想根据比赛添加不同的标签。 基本上,我收到三种不同的消息模式: “##MAGIC##%消息” “##REAL##%消息” “%信息” 我想做的是:

 grok {
 match => {"message" => "##MAGIC##%{GREEDYDATA:magic_message}"}
 match => {"message" => "##REAL##%{GREEDYDATA:real_message}"}
 match => {"message" => "%{GREEDYDATA:basic_message}"}
 if [magic_message]{
    overwrite => [ "message"]  
    add_tag => ["Magic"]
 } else if [real_message]{
    overwrite => [ "message"]  
    add_tag => ["Real"]
 }else{
   overwrite => [ "message"]  
    add_tag => ["Basic"]
 }

但是,我得到这个编译失败:

    The given configuration is invalid. Reason: Expected one of #, => at line 34, column 9 (byte 900) after filter {
  grok {
     match => {"message" => "##MAGIC##%{GREEDYDATA:magic_message}"}
     match => {"message" => "##REAL##%{GREEDYDATA:real_message}"}
     match => {"message" => "%{GREEDYDATA:basic_message}"}
     if  {:level=>:fatal}

【问题讨论】:

  • 为什么要求在同一个 grok 中进行?
  • 因为我有三种不同的模式,如果我做三个 grok,每个 grok 的每次不匹配都会导致 _grokparsefailure
  • 使用覆盖和 add_tag 运行一次 grok,并将 GPF 设置为类似于“my_grok_missed”的内容。如果找到,请将其删除并运行第二个 grok。如果再次找到,请将其删除并运行第三个 grok。
  • @AlainCollins 您在评论中的建议比接受的答案中的方法更好,为什么?一种方式比另一种表现更好吗?
  • @darkwing,在性能方面,它们可能大致相同,除非覆盖比替换快得多。我想我喜欢将每个案例分开(每个案例都有自己的 grok、overwrite 和 add_tag),而不是在两个不同的阶段进行。

标签: logstash logstash-grok


【解决方案1】:

logstash 配置语法不是这样工作的。

这应该会更好(假设您想用magic_message/real_message替换消息):

grok {
    match => {"message" => [ "##MAGIC##%{GREEDYDATA:magic_message}",
                             "##REAL##%{GREEDYDATA:real_message}", 
                             "%{GREEDYDATA:basic_message}"]}
}
if [magic_message] {
    mutate {
        replace => { "message" => "%{magic_message}" }
        add_tag => ["Magic"]
    }
} else if [real_message] {
    mutate {   
        replace => { "message" => "%{real_message}" }
        add_tag => ["Real"] 
    }
} else {
    mutate {
        add_tag => ["Basic"] 
    }
}

【讨论】:

  • 感谢@baudsp,我将“复制”更改为“替换”,并在字段前添加“%”,以便使用变量的值。我认为“副本”在我的 logstash 版本中不可用
  • @MariaMontenegro 很抱歉复制/替换错误,我在 5.4 版本的文档中找到了复制选项。
猜你喜欢
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
相关资源
最近更新 更多