如何删除 logstash 输出中的字段

how to remove field in logstash output

我已经建立了一个 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来判断,还是没有wordk。

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

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

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

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

output {
    if [type] != "kafka" {
        your elasticsearch output
    }
    if [type] == "kafka" {
        your kafka output
    }
}