Log Stash,与多个索引关联的多个grok

时间:2018-04-18 16:12:52

标签: elasticsearch logstash elastic-stack

我想问一下这种情况。

我有两个grok模式匹配。

如果第一个匹配,我想将它与第一个索引输出相关联,例如" logstash-business-error"。

如果第二个grok匹配,我想将它链接到第二个索引输出,例如" logstash-system-error"

我们可以使用logstash.conf吗?

下面是我目前为止只有一个索引的当前版本。

input {
  beats {
    port => 5044
  }
}

filter {
        grok {
           match => {
                    "message" => "%{TIMESTAMP_ISO8601:timestamp} *%{LOGLEVEL:messagetype} (?:\[%{GREEDYDATA:jmsListener}\]) %{WORD:class } - %{WORD:Task} - %{QS:errorType} %{NUMBER:clientlayout}  %{DATA:roll
Up} %{DATA:docName} %{NUMBER:errorNo} %{GREEDYDATA:message}"
                  }
            }
            if [messagetype]!="ERROR"{
            drop {}
            }
            date {
            match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
      }
   }




output {
    elasticsearch {
       hosts => "localhost:9200"
       manage_template => false
       index => "logstash-%{+YYYY.MM.dd}"
       document_type => "%{[@metadata][type]}"
       }
       stdout { codec => rubydebug }
   }

谢谢,

1 个答案:

答案 0 :(得分:1)

请看下面的技巧:

添加新字段

mutate {
    add_field => {
            "index_prefix" => "logstash" 
    }
}
if [messagetype]!="ERROR" {
    mutate {
        replace => {
                "index_prefix" => "whateveryouwant" 
        }
    }
}

然后当您使用index_prefix作为默认索引<​​/ p>输出时

output {
    elasticsearch {
       hosts => "localhost:9200"
       manage_template => false
       index => "%{index_prefix}-%{+xxxx.ww}"
       document_type => "%{[@metadata][type]}"
       }
       stdout { codec => rubydebug }
   }

完整的例子就是这个

input {
  beats {
    port => 5044
  }
}

filter {
        grok {
           match => {
                    "message" => "%{TIMESTAMP_ISO8601:timestamp} *%{LOGLEVEL:messagetype} (?:\[%{GREEDYDATA:jmsListener}\]) %{WORD:class } - %{WORD:Task} - %{QS:errorType} %{NUMBER:clientlayout}  %{DATA:roll
Up} %{DATA:docName} %{NUMBER:errorNo} %{GREEDYDATA:message}"
                  }
            }
            if [messagetype]!="ERROR"{
            drop {}
            }
            date {
            match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
      }
   }
mutate {
    add_field => {
            "index_prefix" => "logstash" 
    }
}
if [messagetype]!="ERROR" {
    mutate {
        replace => {
                "index_prefix" => "whateveryouwant" 
        }
    }
}


output {
    elasticsearch {
       hosts => "localhost:9200"
       manage_template => false
       index => "%{index_prefix}-%{+xxxx.ww}"
       document_type => "%{[@metadata][type]}"
       }
       stdout { codec => rubydebug }
   }