如何删除logstash输出中的字段

问题描述 投票:1回答:1

我已经建立了ELK堆栈。对于logstash实例,它具有两个输出,包括Kafka和elasticsearch。

对于elasticsearch的输出,我想保留字段@timestamp。对于Kafka的输出,我想删除@timestamp字段。所以我不能只删除过滤器中的@timestamp字段。我只希望将其删除以用于Kafka输出。

我还没有找到这种解决方案。

追加

尝试使用克隆插件:

clone {
  clones => ["kafka"]
  id => ["kafka"]
  remove_field => ["@timestamp"]
}

output {

if [type] != "kafka" {
  elastcsearch output
}

if [type] == "kafka" {
  kafka output
}
}

Elasticsearch的输出可以正常工作很奇怪。但是它不能输出到kafka。而且我已经尝试通过ID进行判断,但仍然无法识别。

apache-kafka logstash logstash-configuration elk
1个回答
0
投票

由于您只能删除filter块中的字段,因此要使同一管道输出同一事件的两个不同版本,您将需要克隆事件,删除克隆事件中的字段并在输出中使用条件。

要克隆事件并删除@timestamp字段,您需要在filter块中添加类似内容。

filter {
    # your other filters
    #
    clone {
        clones => ["kafka"]
    }
    if [type] == "kafka" {
        mutate {
            remove_field => ["@timestamp"]
        }
    }
}

这将克隆事件,并且克隆的事件在字段kafka中将具有值type,然后您将在输出的条件条件中使用此字段。

output {
    if [type] != "kafka" {
        your elasticsearch output
    }
    if [type] == "kafka" {
        your kafka output
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.