【问题标题】:how to remove field in logstash output如何删除logstash输出中的字段
【发布时间】:2020-03-18 08:26:25
【问题描述】:

我已经设置了一个 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。

【问题讨论】:

    标签: apache-kafka logstash logstash-configuration elk


    【解决方案1】:

    由于您只能删除 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
        }
    }
    

    【讨论】:

    • 太奇怪了。类型判断只对elasticsearch输出有效,对kafka输出无效。我什至尝试设置克隆插件的 id。但它也不起作用。
    • 这是我的错误。我删除了导致类型无效的字段type。但是我还是想知道如何通过id来判断。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多