【发布时间】:2017-11-16 11:57:38
【问题描述】:
我正在尝试使用 logstash 将 csv 导入 elasticsearch 我尝试了两种方式:
- 使用 CSV
- 使用 grok 过滤器
1) 下面的 csv 是我的 logstash 文件:
input {
file {
path => "path_to_my_csv.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
separator => ","
columns => ["col1","col2_datetime"]
}
mutate {convert => [ "col1", "float" ]}
date {
locale => "en"
match => ["col2_datetime", "ISO8601"] // tried this one also - match => ["col2_datetime", "yyyy-MM-dd HH:mm:ss"]
timezone => "Asia/Kolkata"
target => "@timestamp" // tried this one also - target => "col2_datetime"
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "my_collection"
}
stdout {}
}
2) 使用 grok 过滤器:
下面的 grok 过滤器是我的 logstash 文件
input {
file {
path => "path_to_my_csv.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "(?<col1>(?:%{BASE10NUM})),(%{TIMESTAMP_ISO8601:col2_datetime})"}
remove_field => [ "message" ]
}
date {
match => ["col2_datetime", "yyyy-MM-dd HH:mm:ss"]
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "my_collection_grok"
}
stdout {}
}
问题:
因此,当我单独运行这两个文件时,我可以在 elasticsearch 中导入数据。但是我的日期字段没有被解析为日期时间类型,而是被保存为字符串,因此我无法运行日期过滤器。
所以有人可以帮我弄清楚为什么会这样。 我的 elasticsearch 版本是 5.4.1。
提前致谢
【问题讨论】:
-
您能分享一下您的 CSV 文件中的几行吗?
-
请查看这个 1234365,2016-12-02 19:00:52 1234368,2016-12-02 15:02:02 1234369,2016-12-02 15:02:07
标签: elasticsearch logstash logstash-grok