Logstash下字段以及嵌套Json字段类型转换
前言
从filebeat传输到Logstash的数据,某个字段需要由string类型装换成float类型。但是不管怎么改logstash的配置文件都不生效,其实官方文档都有,但是具体细节方面的东西就得自己不断的实践验证最后达到自己想要的目标了。整整一天,都在弄这一个,中间实在想放弃了。但是就如张靓颖的“终于等到你,还好没放弃”,最后在某一篇博文得到了启发,才解决。
这里类型转换分两个类型:
1)字段是单纯的字段,也就是直接在_source下的
2)字段是在json里的,在_source下还有嵌套一层json里的字段
一、单一字段
可以从下面的图中看出,字段就在顶层机构_source下,这种情况下的Logstash配置文件设置如下:
filter { mutate { convert => { "request_time" => "float" } convert => { "upstream_response_time" => "float" } } }
二、嵌套Json下的字段
如果需要转换的字段是在非顶级结构下,是在一个JSON里,因为在filebeat做decode的时候指定了,如我需要转换的字段是在jsonn的json字段里:
processors: - decode_json_fields: fields: ["message"] #要进行解析的字段 process_array: false #数组是否解码,默认值:false max_depth: 3 #解码深度,默认值:1 target: "jsonn" #json内容解析到指定的字段,如果为空(“”),则解析到顶级结构下 overwrite_keys: false #如果解析出的json结构中某个字段在原始的event(在filebeat中传输的一条数据为一个event)中也存在,是否覆盖
这种情况下的Logstash配置文件设置如下:
filter { mutate { convert => { "[jsonn][request_time]" => "float" } convert => { "[jsonn][upstream_response_time]" => "float" } } }
注意:
[jsonn][request_time] 不是[jsonn].[request_time],也不是jsonn.request_time;没有点.
受启发的链接:
https://stackoverflow.com/questions/30369148/logstash-remove-deep-field-from-json-file
-------------------------------------------
个性签名:在平凡中坚持前行,总有一天会遇见不一样的自己!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
微信公众号 微信打赏 支付宝打赏
posted on 2020-06-11 21:15 Captain_Li 阅读(5006) 评论(0) 编辑 收藏 举报