如何在Logstash中输入JSON文件(数组形式)?

h5qlskok  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(208)

为了输入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"}]

如果你能的话,我将非常感激。

ppcbkaq5

ppcbkaq51#

问题解决了,这是因为编码,我使用了jq实用程序,以便将我的JSON文件转换为正确的格式(对于Logstash),即:

{"id":1,"something":"text1"}
{"id":2,"something":"text2"}
{"id":3,"something":"text3"}

一开始我并没有注意到,但是jq在转换过程中改变了我的文件的编码,它以UTF-16 LE结束。所以,我用VS代码将编码改变(并保存)为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

相关问题