【问题标题】:How can I parse a csv that contains JSON with logstash如何使用 logstash 解析包含 JSON 的 csv
【发布时间】:2017-01-31 10:19:00
【问题描述】:

我有一个 elk 堆栈,我想在其中解析一个 csv,其中一个字段包含 json,但我遇到了 logstash 错误。所以我需要知道如何将csv中的json字段解析成elasticssearch。

10:54:20.220 [[main]>worker1] WARN logstash.filters.csv - 错误 解析 csv {:field=>"message", :source=>"431|2017-01-26 10:08:57|example@example.com|firstName|lastName|GBP|GB|2015-06-14 07:16:39|43.88|2017-01-24 13:45:28|f|{\"18272\":{\"19208\":\"1\",\"19210\":\"1\"},\"18218\":{\" 19099\":\"1\"},\"18783\":{\"19249\":\"2\"}}|5|GBP", :exception=>#}

csv 中的示例行如下所示,您可以看到它是用分隔符分隔的。

431|2017-01-26 10:08:57|example@example.com|firstName|lastName|GBP|GB|2015-06-14 07:16:39|43.88|2017-01-24 13:45:28|f|{\"18272\":{\"19208\":\"1\",\"19210\":\"1\"},\"18218\":{\" 19099\":\"1\"},\"18783\":{\"19249\":\"2\"}}|5|英镑

我的配置如下。

input {
  file {
    path => "/etc/logstash/files/*.csv"
    start_position => "beginning"
  }
}
filter {
  csv {
      separator => "|"
      columns => ['userId', 'profileUpdated', 'email', 'lastName', 'firstName', 'userCurrency', 'billingCountry', 'registeredDate', 'cartValue', 'cartUpdated', 'kitInCart', 'cart' 'itemsInCart' ,'cartCurrency']
  }
  json {
    source => 'cart'
  }
  date {
    match => [ "registeredDate", "YYYY-MM-dd HH:mm:ss" ]
  }
}
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
     hosts => "elasticsearch:9200"
     index => "users"
  }
}

正如您在上面看到的,我的购物车字段是 json 字段。

【问题讨论】:

  • 您似乎在cartcurrency 之间缺少一个字段,最后一个值是20
  • 我已经更新以反映我刚刚所做的一些更改,我已经通过从 csv 中删除购物车并更改配置对其进行了测试,它导入没有问题它似乎只是当我将购物车添加到 csv 中。
  • 如果您还将target => "cart" 添加到您的json 过滤器会怎样?
  • 您能否也显示您遇到的logstash错误?
  • 我已经更新了问题以包含一个完整的行和它生成的完整错误。即使将目标添加到配置中,我也会遇到相同的错误。

标签: json csv elasticsearch logstash


【解决方案1】:

我将此添加到我的 csv filterconfig 文件中,并且它有效。

quote_char => "'"

【讨论】:

  • 很高兴你知道了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
相关资源
最近更新 更多