我尝试了很多方法来输入我的 JSON 文件(数组形式),但到目前为止我没有任何结果
input{
file{
path=> "/usr/share/logs/Docs.json"
#codec=> "json" tried
#codec=> json {charset => "ISO-8859-1"} tried
#codec => json{ } tried
start_position=> "beginning"
sincedb_path=> "/dev/null"
}
}
filter{
json{
source=> "message"
}
}
output{
stdout{
codec=> "json"
}
elasticsearch{
hosts=> ["http://es1:9200"]
index=> "index_abc"
}
}
JSON 文件格式(全部在同一行):
[{"id":1,"something":"text1"},{"id":2,"something":"text2"},{"id":3,"something":"text3"}]
如果您可以的话,我将非常感激。
问题解决了,这是因为编码的原因,我使用了 jq 实用程序将我的 JSON 文件转换为正确的格式(对于 Logstash),即:
{"id":1,"something":"text1"}
{"id":2,"something":"text2"}
{"id":3,"something":"text3"}
我一开始并没有注意到,但是 jq 在转换过程中改变了我的文件的编码,它最终变成了 UTF-16 LE。因此,我使用 VS Code 将编码更改(并保存)为 UTF-8,之后工作正常。
我的更新代码现在可以使用:
input{
file{
path=> "/usr/share/logs/Docs_formatted.json"
codec=> "json"
start_position=> "beginning"
sincedb_path=> "/dev/null"
}
}
filter{}
output{
stdout{}
elasticsearch{
hosts=> ["http://es1:9200"]
index=> "index_abc"
}
}
对于那些感兴趣的人,我使用此命令行将我的 JSON 文件转换为正确的格式(Windows 命令行):
type Docs.json | jq -c '.[]' > Docs_formatted.json
{"DrugId":49,"DrugName":"POLIFLEKS %5 DEKSTROZ %0,2 SODYUM KLORUR SOLUSYON 100 ML SETSIZ"}
{"DrugId":3128,"DrugName":"AMLOVAS 5 MG 20 TABLET","DrugBarcode":8699580010077.0}
首先,json文件中的每条数据必须在一行中。如上所述
input {
file {
path => "/Users/your_to_path/Desktop/Results4_Output.json"
start_position => "beginning"
sincedb_path => "/dev/null"
codec => "json"
}
}
filter {
json{
source=>"message"
remove_field => ["[message]"]
}
mutate {
add_field => { "[@metadata][id]" => "%{BarcodeId}" } --- here is optional
remove_field => ["message","host", "@version", "@timestamp", "path", "type", "event", "log", "tags"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "drugs"
# document_id => "%{[@metadata][id]}" # --- here is optional
}
stdout { codec => rubydebug }
}
我们添加了 mutate 端,使其不会出现在 elasticsearch 端的映射图上。
有关此主题的问题通常是由于与文件格式缺乏一致而引起的。
希望对您有帮助