【问题标题】:How to mutate all value of a field in Logstash如何改变 Logstash 中字段的所有值
【发布时间】:2021-06-19 16:33:33
【问题描述】:

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

【问题讨论】:

    标签: elasticsearch logstash export-to-csv


    【解决方案1】:

    您可以使用 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 对象不会成为输出消息的一部分。

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多