首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Logstash为什么那么慢?—— json序列化

Logstash为什么那么慢?—— json序列化

作者头像
用户1154259
发布2018-01-17 15:06:23
1.3K0
发布2018-01-17 15:06:23
举报

今天跟峡谷金桥聊天,询问起Logstash的性能,金桥提示说Logstash中json的序列化是浪费性能的一方面。于是便有了下面的测试:

第一步,造数据

首先需要造一份数据,数据可以通过logstash的generator来造。

input{
    generator{}
}
output{
    file{
        path => "E:/test.log"
    }
}

生成的数据格式如下:

{"message":"Hello world!","@version":"1","@timestamp":"2016-07-12T13:46:48.821Z","host":"DESKTOP-1GPAD95","sequence":0}
{"message":"Hello world!","@version":"1","@timestamp":"2016-07-12T13:46:48.824Z","host":"DESKTOP-1GPAD95","sequence":1}
{"message":"Hello world!","@version":"1","@timestamp":"2016-07-12T13:46:48.824Z","host":"DESKTOP-1GPAD95","sequence":2}
{"message":"Hello world!","@version":"1","@timestamp":"2016-07-12T13:46:48.825Z","host":"DESKTOP-1GPAD95","sequence":3}
...

第二步,编写测试脚本

测试的思路是,从test.log文件中读取数据。然后计算一定范围内写入的日志数量(靠人工计算啦!)

codec => json 的测试的脚本如下:

input{
    file{
        path => "E:/test.log"
        codec => json
        start_position => "beginning"
    }
}
filter{
    ruby {
        code => "event['tag'] = Time.now"
    }
}
output{
    file{
        path => "E:/json_result3.log"
    }
}

codec => plain 的测试的脚本如下:

input{
    file{
        path => "E:/test.log"
        codec => plain
        start_position => "beginning"
    }
}
filter{
    ruby {
        code => "event['tag'] = Time.now"
    }
}
output{
    file{
        path => "E:/json_result3.log"
    }
}

第三步,计算每10S中产生的日志数量

这里在每条事件中写入了1个时间戳字段,然后打开文件,定位随机定位一个开始的秒数,比如从2016-07-12 22:12:442016-07-12 22:12:54这十秒钟,产生的日志数量就是解析的数量。

为了避免机器差异以及运行环境的差异,所带来的误差,这里每个codec执行了3次,计算得出的数据大致如下:

日志名称

起始时间(行数)

结束时间(行数)

总行数(结束-起始)

json_result1.log

2016-07-12 22:12:44(63)

2016-07-12 22:12:54(34728)

34665

json_result2.log

2016-07-12 22:26:18(517)

2016-07-12 22:26:28(27599)

27082

json_result3.log

2016-07-12 22:27:48(147)

2016-07-12 22:27:58(30352)

30205

plain_result1.log

2016-07-12 22:13:41(300)

2016-07-12 22:13:51(50437)

50137

plain_result2.log

2016-07-12 22:22:32(187)

2016-07-12 22:22:42(53525)

53338

plain_result3.log

2016-07-12 22:24:43(360)

2016-07-12 22:24:53(43580)

43220

测试结果也可以参考下面的图片,更为直观一点:

最后说明

从测试的结果来看,的确plan要比json性能高一些,也就是说logstash在做json序列化的时候浪费了很多的性能。

这就给想要自己写数据采集框架的朋友一点提示——Event对象该如何设计?

PS:由于我选取的数据样本范围都是第一个完整的10秒钟,因此可以看到采集的数据量比较少,平均每秒还不到1w.

这可能受多方条件影响:

  • 1 我是读文件--写文件,对于磁盘IO可能有一定的影响
  • 2 我选取的都是开始的10秒钟数据,可能刚开始数据采集还没有稳定~ 如果有时间的朋友,可以采集个1分钟左右,从最后的10s测试。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步,造数据
  • 第二步,编写测试脚本
  • 第三步,计算每10S中产生的日志数量
  • 最后说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档