zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mac 使用brew 安装php-redis
    thinkphp6 使用redis 实现消息队列
    Redis 桌面管理器:Another Redis Desktop Manager
    linux 查看并关闭shell脚本执行
    MySQL教程之concat以及group_concat的用法
    PHP redis 使用
    thinkphp6 command(自定义指令)
    git 使用
    linux shell中 "2>&1"含义
    linux crontab 定时任务
  • 原文地址:https://www.cnblogs.com/lemon-le/p/13096135.html
Copyright © 2011-2022 走看看