我想我找到了解决我问题的可行方法。我不确定这是否是一种干净的解决方案,但它有助于解析上述类型的多行JSON。
input { file { prec => multiline { pattern => '^{' negate => true what => previous } path => ["/opt/mount/ELK/json/*.json"] start_position => "beginning" sincedb_path => "/dev/null" exclude => "*.gz" }}filter { mutate { replace => [ "message", "%{message}}" ] gsub => [ 'message','n',''] } if [message] =~ /^{.*}$/ { json { source => message } }}output { stdout { prec => rubydebug }}我的多行编码解码器无法处理最后一个花括号,因此不会以JSON形式出现
json { source => message }。因此,mutate过滤器:replace => [ "message", "%{message}}" ]那增加了缺少的括号。和
gsub => [ 'message','n','']
删除
n引入的字符。最后,我有一个单行JSON,可以读取
json { source => message }如果有一种更干净/更简便的方法将原始的多行JSON转换为单行JSON,请执行POST,因为我觉得上述内容不太干净。



