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