首页 > 解决方案 > 使用元数据字段使用 logstash 创建条件输出时遇到问题

问题描述

我想将 winlogbeat 数据发送到与主索引不同的索引。我已将 winlogbeat 配置为将其数据发送到我的 logstash 服务器,并且我可以确认我已收到数据。

这就是我目前所做的:

output {
  if [@metadata][beat] == "winlogbeat" {
    elasticsearch {
                                hosts => ["10.229.1.12:9200", "10.229.1.13:9200"]
                                index => "%{[@metadata][beat]}-%{+YYYY-MM-dd}"
                                user => logstash_internal
                                password => password
    stdout { codec => rubydebug }
       }
  else {
     elasticsearch {
                                hosts => ["10.229.1.12:9200", "10.229.1.13:9200"]
                                index => "logstash-%{stuff}-%{+YYYY-MM-dd}"
                                user => logstash_internal
                                password => password
                   }
       }
   }
}

但是,我无法使用此配置启动 logstash。如果我删除 if 语句并且只使用一个 elasticsearch 输出,即处理常规 logstash 数据的那个,它就可以工作。

我在这里做错了什么?

标签: elasticsearchlogstashmetadata

解决方案


您的配置中的括号有问题。要修复您的代码,请参见下文:

output {
    if [@metadata][beat] == "winlogbeat" {

        elasticsearch {
            hosts => ["10.229.1.12:9200", "10.229.1.13:9200"]
            index => "%{[@metadata][beat]}-%{+YYYY-MM-dd}"
            user => logstash_internal
            password => password
        }
        stdout { codec => rubydebug }

    } else {

        elasticsearch {
            hosts => ["10.229.1.12:9200", "10.229.1.13:9200"]
            index => "logstash-%{stuff}-%{+YYYY-MM-dd}"
            user => logstash_internal
            password => password
        }

    }
}

我希望这能解决你的问题。


推荐阅读