从filebeat传输到Logstash的数据,某个字段须要由string类型装换成float类型。可是无论怎么改logstash的配置文件都不生效,其实官方文档都有,可是具体细节方面的东西就得本身不断的实践验证最后达到本身想要的目标了。整整一天,都在弄这一个,中间实在想放弃了。可是就如张靓颖的“终于等到你,还好没放弃”,最后在某一篇博文获得了启发,才解决。json
这里类型转换分两个类型:数组
1)字段是单纯的字段,也就是直接在_source下的bash
2)字段是在json里的,在_source下还有嵌套一层json里的字段spa
能够从下面的图中看出,字段就在顶层机构_source下,这种状况下的Logstash配置文件设置以下:3d
filter { mutate { convert => { "request_time" => "float" } convert => { "upstream_response_time" => "float" } } }
若是须要转换的字段是在非顶级结构下,是在一个JSON里,由于在filebeat作decode的时候指定了,如我须要转换的字段是在jsonn的json字段里:code
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配置文件设置以下:blog
filter { mutate { convert => { "[jsonn][request_time]" => "float" } convert => { "[jsonn][upstream_response_time]" => "float" } } }
注意:rem
[jsonn][request_time] 不是[jsonn].[request_time],也不是jsonn.request_time;没有点.文档
受启发的连接:get
https://stackoverflow.com/questions/30369148/logstash-remove-deep-field-from-json-file