如何在Logstash中输入一个JSON文件(数组形式)?
How to input a JSON file (array form) in Logstash?
我尝试了很多方法来输入我的 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
我尝试了很多方法来输入我的 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