如何改变 Logstash 中字段的所有值

How to mutate all value of a field in Logstash

我创建了一个脚本,使用 Logstash 及其插件将 Elasticsearch 数据导出到 csv 文件。我想改变一个字段的值。例如,我导出了一个字段 company,该字段的值为:google, amazon... 我需要在 csv 文件的这些值之前添加一个字符串 company-,例如:company-google, company-amazon .我检查了 Logstash 的 Mutate filter plugin 但我没有找到任何函数来解决这个问题 problem.Is 可以用 Logstash 改变这些值并导出到 csv 文件吗?

 input {
 elasticsearch {
    hosts => "localhost:9200"
    index => "give_index_name"
    query => '
    {
        "query": {
            "match_all": {}
        }   
    } 
  '
  }
}
output {
  csv {
    # elastic field name
    fields => ["company", "field2", "field3", "field4", "field5"]
    # This is path where we store output.   
    path => "/scrape/csv-export.csv"
  }
}

您可以使用 mutate 过滤器来做到这一点。

首先,您需要创建一个临时的新字段,它将字符串 company- 与字段 company.

的值连接起来

您可以使用以下 mutate 过滤器来做到这一点。

mutate {
    add_field => {"[@metadata][company]" => "company-%{company}" }
    remove_field => ["company"]
}

这将创建一个名为 @metadata.company 且值为 company-CompanyName 的字段,例如。 company-anything,然后它将删除 company 字段。

接下来您需要再次添加一个名为 company 的字段,其值为 @metadata.company 字段。

这是使用以下 mutate:

mutate {
    add_field => { "company" => "%{[@metadata][company]}" }
}

这样您将在字段 company 中获得值 company-anything

不需要删除 @metadata.company 字段,因为 @metadata 对象不会成为输出消息的一部分。