logstash解析JSON格式的字符串输入

本文介绍如何使用Logstash中的Grok过滤器从JSON格式的数据中提取特定字段,并通过Mutate过滤器将提取到的数据拼接成指定格式,以便于后续存储及处理。此方法适用于字段数量不固定的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务需求:输入为JSON字符串,JSON字符串的字段个数不确定,但知道最多可能会有哪些字段,顺序确定的,现在要提取其中的value值并以制表符分割,方便后续存储在HDFS中并便于hive建表:

示例输入:

{ "cjdid": "DZQ10012","rfidId": 21412341234123410,"passTime": 1530135600,"plateColor": "1","rectifyCode": "112412","mergeCode": "123125","eid": "12124315","plateCode":4}

{ "cjdid": "DZQ10012","rectifyCode": "112412","mergeCode": "123125","eid": "12124315","plateCode":4}

输出:DZQ10012     21412341234123410     1530135600     1     112412   123125   12124315   4

           DZQ10012    112412    123125    12124315    4

 

logstash中采用gork进行正则匹配获取相应字段,拼接采用mutate实现(这里的代码与示例输入输出不是对应的,但原理一样)

filter{

        grok{
                match => {

                                       #正则匹配获取字段值
                        "message" => '^{("COLLECT_TIME":"?(?<time>\d+)"?,?)?("CONTENT1":"?(?<CONTENT1>\w+)"?,?)?("CONTENT2":"?(?<CONTENT2>\d+)"?,?)?'
        }
        }

#逐个字段判断拼接

    if[time]{
        mutate{
            replace=>{"message"=>"%{time}"}
            remove_field => ["time"]
        }
    }else{
         mutate{
                        replace=>{"message"=>"null"}
                }
    }

    if[CONTENT1]{
        mutate{
                       replace => { "message" =>"%{message}    %{CONTENT1}" }
            remove_field => ["CONTENT1"]
                }
    }else{
        mutate{
                       replace => { "message" =>"%{message}     null" }
                }

    }

    if[CONTENT2]{
                mutate{
                        replace=>{"message" => "%{message}    %{CONTENT2}"}
            remove_field => ["CONTENT2"]
                }
        }else{
        mutate{
                        replace=>{"message" => "%{message}      null"}
                }
    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值