【问题标题】:How to write if condition inside of the logstash grok pattern?如何在logstash grok模式中编写if条件?
【发布时间】:2018-11-04 23:11:50
【问题描述】:

我的问题与 logstash grok 模式有关。我创建了以下模式,它工作正常,但最大的问题不是字符串值。有时; “Y”和“age”可以为空,所以我的 grok 模式不会在 elasticseach 中创建任何日志。它无法正常工作。我需要告诉我的 grok 模式:


if(age is null || age i empty){
updatefield["age",0]
}

但我不知道怎么做。顺便一提;我通过谷歌搜索检查了许多解决方案,但它与我的问题直接相关。


input {
  file {
       path => ["C:/log/*.log"]
        start_position => "beginning" 
        discover_interval => 10
        stat_interval => 10
        sincedb_write_interval => 10
        close_older => 10
        codec => multiline { 
        pattern => "^%{TIMESTAMP_ISO8601}\|"
        negate => true
        what => "previous" 
       }
  }
}

filter {  
 grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:formattedDate}.* X: %{DATA:X} Y: %{NUMBER:Y} Z: %{DATA:Z} age: %{NUMBER:age:int} "}
        }   
 date {
            timezone => "Europe/Istanbul"
            match => ["TimeStamp", "ISO8601"]
             }  
    json{
        source => "request"
        target => "parsedJson"

    }   
    mutate {
    remove_field => [ "path","message","tags","@version"]

    }
}   

output {  

    stdout {
        codec => rubydebug
    }
  elasticsearch {
        hosts => [ "http://localhost:9200" ]
         index => "logstash-%{+YYYY.MM}"

    }   
}

【问题讨论】:

  • 这是不可能的,但你可以做多行模式。 Here 是讨论弹性搜索以正确方式进行的帖子

标签: elasticsearch logstash elastic-stack logstash-grok


【解决方案1】:

您可以使用带有过滤器的conditionals 检查您的字段是否存在或为空,

filter {
  if ![age] or [age] == "" { 
       mutate {
         update => { "age" => "0" }
       }    
   } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2023-01-13
    相关资源
    最近更新 更多