安装准备
- 准备logstash:下载准备好elasticsearch相应版本的logstash版本文件。我这里elasticsearch版本使用的是7.12.0,所以下载相应版本。官网下载地址
- 准备导入数据:这里准备的是一个电影csv文件数据。下载地址
配置
解压logstash文件,进入config目录下,可以看到一个logstash-sample.conf文件,复制一份并命名为logstash-movies.conf。
配置文件自己可以随便命名,只要你自己能正确找到,并识别就行
编辑文件:
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
# 读取数据配置
input {
file {
# 导入文件目录地址
path => "D:/Tool/ml-25m/movies.csv"
start_position => "beginning"
}
}
# 过滤 格式化数据配置
filter {
# 配置读取csv文件
csv {
# 设置拆分符为 逗号
separator => ","
# 指定csv文件的字段 按顺序匹配
columns => ["id","content","genre"]
}
# 对genre字段内容进行处理
mutate {
split => { "genre" => "|" }
remove_field => ["path", "host","@timestamp","message"]
}
# 对content字段内容进行处理
mutate {
split => ["content", "("]
# 添加字段 title
add_field => { "title" => "%{[content][0]}"}
# 添加字段 year
add_field => { "year" => "%{[content][1]}"}
}
mutate {
# 对year字段进行类型转换
convert => {
"year" => "integer"
}
strip => ["title"]
# 删除字段
remove_field => ["path", "host","@timestamp","message","content"]
}
}
# 输出配置
output {
# es相关配置
elasticsearch {
hosts => "http://localhost:9200"
index => "movies"
document_id => "%{id}"
#user => "elastic"
#password => "changeme"
}
stdout {}
}
进入bin目录,启动logstash:通过-f 参数指定配置文件启动
.\logstash.bat -f D:\Tool\logstash-7.12.0-windows-x86_64\logstash-7.12.0\config\logstash-movies.conf
我这里使用的是本地测试,使用的Windows系统,所以使用.bat执行。
问题
-
启动数据没办法写入到elasticsearch中:
原因:因为我是在Windows环境启动,配置文件相关目录是Windows系统文件系统,注意分隔符。input { file { # 目录层级使用 "/" 而不要直接拷贝复制 使用的 "\" 会导致找不到文件,从而导致数据不能正常导入 # path => "D:\Tool\ml-25m\movies.csv" 这种路径不能正常导入 path => "D:/Tool/ml-25m/movies.csv" start_position => "beginning" } }
-
导入数据成功后,删除相关索引,再次执行导入,数据不能正常导入
原因:logstash可能存在机制,识别数据的唯一性,避免重复导入数据,具体情况,没有具体去研究。
解决:删除logstash文件夹中data目录下的所有文件,重新执行启动logstash