logstash使用之json输入输出

本文介绍了如何使用Logstash处理JSON格式的数据,通过解析JSON内容生成字段以方便分析和储存。内容包括概述、JSON输出配置、使用方法(输入阶段处理与过滤阶段处理)以及结果展示。Logstash提供了在输入阶段和过滤阶段处理JSON数据的方式,通过不同配置可以实现不同的处理效果,最终将数据存储到数据库中。

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

概述

如果发送给logstash的数据内容为json格式,那么可以通过解析json内容,根据具体内容生成字段.方便分析和储存,比如:

有一个json内容为: {"name":"nihao"},我们需要获取这个记录然后通过logstash分析后,放到mysql数据库中.

一个简单的logstash输出内容为:

{
      "@version" => "1",
          "host" => "localhost",
    "@timestamp" => 2017-11-23T08:40:16.868Z,
       "message" => "{\"name\":\"nihao\"}"
}

也就是说,如果存到数据库中,会保存以上四个字段到表中,而我们的记录的内容被简单的记录到message字段中,如果我们需要分析这条
记录,还得自己取出来进行处理.

如果使用了logstash的json解析,那么会是这个样子:

{
      "@version" => "1",
          "host" => "localhost",
    "@timestamp" => 2017-11-23T08:40:16.868Z,
       "message" => "name=nihao",
       "name" => "nihao"
}

这样存到数据库中就多了name字段,分析这条记录的时候只要取出来就可以.如果不想要message字段,也可以省去:

{
      "@version" => "1",
          "host" => "localhost",
    "@timestamp" => 2017-11-23T08:40:16.868Z,
       "name" => "nihao"
}

json输出

如果将一个输入的记录处理后,输出为json串:

比如输入: “nihao”,

那么输出的结果为:

{"@version":"1","host":"localhost","@timestamp":"2017-11-23T09:42:14.798Z","message":"nihao"}

配置信息如下:

input {
    stdin{}
}
output{
    stdout{
        codec => json
    }
}

除了输入的内容外,还添加了一些额外的信息.

使用

logstash处理json输入有两种方式:
* 直接在输入阶段进行处理
* 通过过滤器处理

二者区别: 输入阶段和过滤阶段处理数据的区别

配置

输入阶段处理

json_input_log.conf

input{
        stdin{
            codec => json
        }
}
output{
        stdout{codec => rubydebug}
}
过滤阶段处理

json_filter_log.conf

input{
        stdin{}
}
filter{
    json{
        source => "message"
    }
}
output{
        stdout{codec => rubydebug}
}

可以看到,输入阶段处理是通过codec对输入内容进行处理,过滤阶段通过json过滤器插件进行处理

结果

输入阶段处理
{"name":"hewe"}
{
          "name" => "hewe",
      "@version" => "1",
          "host" => "localhost",
    "@timestamp" => 2017-11-23T09:09:01.533Z
}
过滤阶段处理
{"name":"hewe"}
{
      "@version" => "1",
          "host" => "localhost",
          "name" => "hewe",
    "@timestamp" => 2017-11-23T09:05:12.004Z,
       "message" => "{\"name\":\"hewe\"}"
}
注意

虽然开启调试显示的内容和json相似,但这只是调试显示的内容,数据在logstash中储存可能是一个对象,或者一个集合.具体输出json还是xml由output决定

通过以上的对比,可以看到,过滤阶段比输入阶段多了一个字段message,这也就表明,当在输入阶段处理时,是直接把输入的内容解析成相应的字段,
而在过滤阶段处理时,输入的内容已经被放到message字段中,然后通过设置source解析message为相应的字段.

结语

输入输出阶段处理区别请看: 输入阶段和过滤阶段处理数据的区别

具体使用哪一种分情况而定.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值