今天跟
峡谷金桥
聊天,询问起Logstash的性能,金桥提示说Logstash中json的序列化是浪费性能的一方面。因而便有了下面的测试:json
首先须要造一份数据,数据能够经过logstash的generator来造。ruby
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" } }
这里在每条事件中写入了1个时间戳字段,而后打开文件,定位随机定位一个开始的秒数,好比从2016-07-12 22:12:44
到2016-07-12 22:12:54
这十秒钟,产生的日志数量就是解析的数量。日志
为了不机器差别以及运行环境的差别,所带来的偏差,这里每一个codec执行了3次,计算得出的数据大体以下:code
日志名称 | 起始时间(行数) | 结束时间(行数) | 总行数(结束-起始) |
---|---|---|---|
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序列化的时候浪费了不少的性能。blog
这就给想要本身写数据采集框架的朋友一点提示——Event对象该如何设计?
PS:因为我选取的数据样本范围都是第一个完整的10秒钟,所以能够看到采集的数据量比较少,平均每秒还不到1w.
这可能受多方条件影响: