无法访问 Logstash 过滤器中的 Elasticsearch 索引名称元数据

Can't access Elasticsearch index name metadata in Logstash filter

我想在Logstash处理的时候在事件中添加elasticsearch索引名作为字段。这应该是非常简单的,但索引名称不会被打印出来。这是完整的 Logstash 配置。

input {
    elasticsearch {
        hosts => "elasticsearch.example.com"
        index => "*-logs"
    }
}
filter {
    mutate {
        add_field => {
            "log_source" => "%{[@metadata][_index]}"
        }
    }
}
output {
    elasticsearch {
            index => "logstash-%{+YYYY.MM}"
    }
}

这将导致 log_source 被设置为 %{[@metadata][_index]} 而不是索引的实际名称。我已经尝试过使用 _id 并且没有下划线,但它总是只输出引用而不是值。

只做 %{[@metadata]} 会导致 Logstash 崩溃,错误是它试图错误地访问列表,因此正在设置 [@metadata],但似乎缺少索引或任何值。

有没有人有另一种方法来为事件分配索引名称?

我正在使用 Logstash 和 Elasticsearch 的 5.0.1。

你快到了,你只是错过了 docinfo setting,默认情况下它是错误的:

input {
    elasticsearch {
        hosts => "elasticsearch.example.com"
        index => "*-logs"
        docinfo => true
    }
}