Logstash下字段以及嵌套Json字段類型轉換

 

前言

從filebeat傳輸到Logstash的數據,某個字段須要由string類型裝換成float類型。可是無論怎麼改logstash的配置文件都不生效,其實官方文檔都有,可是具體細節方面的東西就得本身不斷的實踐驗證最後達到本身想要的目標了。整整一天,都在弄這一個,中間實在想放棄了。可是就如張靚穎的「終於等到你,還好沒放棄」,最後在某一篇博文獲得了啓發,才解決。json

 

這裏類型轉換分兩個類型:數組

1)字段是單純的字段,也就是直接在_source下的bash

2)字段是在json裏的,在_source下還有嵌套一層json裏的字段spa

 

1、單一字段

能夠從下面的圖中看出,字段就在頂層機構_source下,這種狀況下的Logstash配置文件設置以下:3d

filter {
     mutate {
     convert => { "request_time" => "float" }
     convert => { "upstream_response_time" => "float" }
     }
}

 

 

 

 

2、嵌套Json下的字段

若是須要轉換的字段是在非頂級結構下,是在一個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

相關文章
相關標籤/搜索