logstash remove_field 无法将 csv 上传到 elasticsearch
logstash remove_field not working in order to upload csv to elasticsearch
我正在使用 elasticsearch、kibana 和 logstash 6.0.1。
我希望通过 logstash 和删除字段(路径、@timestamp、@version、主机和消息)将 csv 数据上传到 elasticsearch。我在下面显示 logstash.conf 和 emp.csv 文件。如果我不使用 remove_field 指令但我需要使用,上传将起作用。此外,未创建索引。
logstash.conf:
input {
file {
path => "e:\emp.csv"
start_position => "beginning"
}
}
filter {
csv {
separator => ","
columns => ["code","color"]
remove_field => ["path", "@timestamp", "@version", "host", "message"]
}
mutate {convert => ["code", "string"]}
mutate {convert => ["color", "string"]}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "emp5"
user => "elastic"
password => "password"
}
stdout {}
}
emp.csv:
1,blue
2,red
这种情况下缺少什么?
在您的 csv
文件中,您尝试删除的数据不可用。
改为尝试删除 path
和 host
字段:
(...)
filter {
csv {
separator => ","
columns => ["code","color"]
}
mutate {
remove_field => ["path", "host"]
}
(...)
并且对于信息,如果字段 path
and/or host
不存在,则没有问题。如果字段存在,插件将删除字段,如果字段不存在,则什么都不做。
编辑:
我已经在新鲜 elastic stack
:
上测试过了
您可以删除索引:
curl -X DELETE "localhost:9200/emp5"
另请注意,在您当前的配置中,logstash
将只读取文件一次。
您可以通过添加 sincedb_path => "/dev/null"
来更改该行为
或者在 Windows
情况下:sincedb_path => "NUL"
里面:
input {
file {
(...) # here
}
节。
然后在 logstash
工作之后验证结果:
curl -X GET "localhost:9200/emp5?pretty"
{
"emp5" : {
"aliases" : { },
"mappings" : {
"doc" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"@version" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"code" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"color" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"message" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : "5",
"blocks" : {
"read_only_allow_delete" : "true"
},
"provided_name" : "emp5",
"creation_date" : "1576099826712",
"number_of_replicas" : "1",
"uuid" : "reXYzqPgQryYcASoov9l5A",
"version" : {
"created" : "6080599"
}
}
}
}
}
如您所见,没有 host
和 path
字段。
我正在使用 elasticsearch、kibana 和 logstash 6.0.1。
我希望通过 logstash 和删除字段(路径、@timestamp、@version、主机和消息)将 csv 数据上传到 elasticsearch。我在下面显示 logstash.conf 和 emp.csv 文件。如果我不使用 remove_field 指令但我需要使用,上传将起作用。此外,未创建索引。
logstash.conf:
input {
file {
path => "e:\emp.csv"
start_position => "beginning"
}
}
filter {
csv {
separator => ","
columns => ["code","color"]
remove_field => ["path", "@timestamp", "@version", "host", "message"]
}
mutate {convert => ["code", "string"]}
mutate {convert => ["color", "string"]}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "emp5"
user => "elastic"
password => "password"
}
stdout {}
}
emp.csv:
1,blue
2,red
这种情况下缺少什么?
在您的 csv
文件中,您尝试删除的数据不可用。
改为尝试删除 path
和 host
字段:
(...)
filter {
csv {
separator => ","
columns => ["code","color"]
}
mutate {
remove_field => ["path", "host"]
}
(...)
并且对于信息,如果字段 path
and/or host
不存在,则没有问题。如果字段存在,插件将删除字段,如果字段不存在,则什么都不做。
编辑:
我已经在新鲜 elastic stack
:
您可以删除索引:
curl -X DELETE "localhost:9200/emp5"
另请注意,在您当前的配置中,logstash
将只读取文件一次。
您可以通过添加 sincedb_path => "/dev/null"
来更改该行为
或者在 Windows
情况下:sincedb_path => "NUL"
里面:
input {
file {
(...) # here
}
节。
然后在 logstash
工作之后验证结果:
curl -X GET "localhost:9200/emp5?pretty"
{
"emp5" : {
"aliases" : { },
"mappings" : {
"doc" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"@version" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"code" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"color" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"message" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : "5",
"blocks" : {
"read_only_allow_delete" : "true"
},
"provided_name" : "emp5",
"creation_date" : "1576099826712",
"number_of_replicas" : "1",
"uuid" : "reXYzqPgQryYcASoov9l5A",
"version" : {
"created" : "6080599"
}
}
}
}
}
如您所见,没有 host
和 path
字段。