Logstash及Elasticsearch 压力测试说明书(十) - 简书

标签: | 发表时间:2020-05-18 17:47 | 作者:
出处:https://www.jianshu.com

1 整体环境说明

1.1 硬件环境

1、 磁盘:SATA磁盘2块,磁盘阵列为RAID1

2、 CPU****:2个4核CPU。具体参数:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz

3、 内存:8G(8*1G)

4、 网卡:1000Mb/s

1.2 软件环境

1、 kafka版本:kafka_2.11-0.11.0.3

2、 kafka集群数量:3

3、 logstash版本:logstash-5.6.11

4、 elasticsearch版本:elasticsearch-5.6.11

5、 elasticsearch集群数量:3

1.3 服务器自身瓶颈

由kafka性能测试得出结论。服务器SATA磁盘2块,磁盘阵列为RAID1的配置。磁盘写入数据瓶颈为94.8 MB/秒。读取数据瓶颈经过磁盘cache的磁盘读取为162.83 MB/秒,未经过磁盘cache的磁盘读取为106.88 MB/秒。

网卡瓶颈为1000Mb/s=125MB/s。

2 logstash测试前期准备

2.1 影响测试结果配置分析

Logstash的性能测试主要测试logstash在kafka集群消费消息的数量,和logstash在对日志进行过滤之后向elasticsearch输出的数量。

Elasticsearch性能测试主要测试从logstash传输过来的数据进行接收的速度。

2.1.1 Logstash分析

1、--pipeline-workers参数(-w)

此参数是filter和output模块的pipeline的线程,默认是cpu核数。

2、--pipeline-batch-size参数(-b)

是每个logstash pipeline线程,越大会越消耗JVM内存。是积累多少条日志进行向下传输。默认是125条。

3、jvm的大小。

4、多个logstash消费传输的速度。

注意:因为在ELK中只能使用filter过滤模块,所以不对过滤模块进行测试。

2.1.2 Elasticsearch分析

1、 提交文件的大小

也就是logstash--pipeline-batch-size的参数。所以可以一起测试

2、 jvm的大小

2.2 测试相关解释

2.2.1 命令解释

    # ./bin/logstash -w 1 –b 1000 -f ./config/conf/test.conf --path.data=./test_pid/ | pv -abt > /dev/null

1、使用pv命令如果请yum直接安装,如果版本过低不支持a选项需要源码安装更新版本的pv命令。

2、-w为--pipeline-workers

3、-b为--pipeline-batch-size

2.2.2 配置文件解释

1、配置文件一

    # cat test.conf

input {

 generator {

 count => 10000000

 message => '{"indexdiy":"catalina","input_type":"log","message":"[2018-09-26 12:30:13,030] [org.apache.tomcat.util.net.NioSelectorPool] [INFO] [Using a shared selector for servlet write/read]","offset":17600578,"project_tag":"catalina","source":"/opt/tomcat7/logs/catalina.out","type":"log"}'

 }

}

filter {

 json {

 source => "message"

 }

 mutate {

 gsub => ["message", "\n", ""]

 }

 grok {

 match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{JAVACLASS:class}\] \[%{LOGLEVEL:level}\] \[%{GREEDYDATA:logmessage}"}

 }

 date {

 match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]

 target => "@timestamp"

 }

}

output {

 stdout {

 codec => dots

 }

 elasticsearch {

 hosts => ["10.10.4.11:9200","10.10.4.12:9200","10.10.4.13:9200"]

 index => "test12_1"

 }

 kafka {

 bootstrap_servers => "10.10.4.11:9092,10.10.4.12:9092,10.10.4.13:9092"

 topic_id => "yace1013_1"

 }

}

配置文件解释:

Generator模块为自动创建消息模块。

Count为创建多少条消息。

Message为消息内容,此消息内容为tomcat的一条日志文件,大约300B。

Filter为过滤模块。

Codec为把每条消息都输出一个点(·),一个点的大小为1B

Elasticsearch为输出到es集群。

Kafka是输出到kafka集群,为了后期在kafka中消费。

3、 配置文件二

    input {

 kafka {

 bootstrap_servers => "10.10.4.11:9092,10.10.4.12:9092,10.10.4.13:9092"

 topics => "catalina"

 group_id => "2s"

 }

}

filter {

 json {

 source => "message"

 }

 mutate {

 gsub => ["message", "\n", ""]

 }

 grok {

 match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{JAVACLASS:class}\] \[%{LOGLEVEL:level}\] \[%{GREEDYDATA:logmessage}"}

 }

 date {

 match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]

 target => "@timestamp"

 }

}

output {

 stdout {

 codec => dots

 }

}

配置文件解释:

Input为在kafka里消费消费数据。要先使用脚本在catalina.out里写上很多数据。

注意:要先启动下消费脚本在停止,这样logstash才可以订阅到kafka的topic。不让会因为没有订阅topic而不能消费。

其他不在赘述

2.2.3 输出结果解释

如果使用codec => dots(默认都使用方便计算),就是把每一条日志都转换为点(·)一个点是1Byte,如果结果为[5.53kiB/s],就是每秒钟5530条/秒。

注意:不同测试环境需要相应的注释一些模块

2.3 注意情况

1、 在测试的时候如果集群搭建在同一台服务服务器上,需要停止其他的服务,比如说,测试logstash消费kafka的能力,要把elasticsearch关掉,因为elasticsearch很消耗内存。会造成不准确的结果。

2、 在测试的时候时刻观察着服务器自身的瓶颈,如IO瓶颈,内存瓶颈、CPU瓶颈等。

3 Logstash本身性能测试

3.1 测试–w参数

1、结果如下表


2、CPU负载如下:

(1)-w为1


(2)-w为2


(3)-w为4


(4)w为6


(5)w为8


3、 磁盘IO使用情况(由于直接在输出了,并没有使用磁盘)


4、内存使用情况


3.2 -w参数总结

-w参数为--pipeline-workers,从结果可以看出-w参数根据自身cpu核数相关,实验服务器cpu总核数为8核,所以-w为6的时候性能最高,-w为8的时候性能反而会下降。cpu的负载也跟-w参数相关。服务器内存占用率也是比较大的。所以测试并没有测出logstash本身的性能所在,被cpu的核数限制。只有更多核数的服务器才能测试出logstash的准确性能。

3.3 –b参数测试

1、 结果如下表

由于-w选项为6的时候是服务器的一个瓶颈,所以测试-b的时候性能会下降,是服务器的原因,所以我们以-w为4进行测试。


2、 cpu负载


3、内存使用情况


3.4 -b参数总结

从结果可知,-b选项是依赖服务器本身性能的,没有一个确定的值。在测试服务区配置,-b的值为500的时候是最优的。这个最优值需要根据实际情况进行测试。

3.5 Jvm大小

修改jvm.options配置文件

1、 结果如下表


2、cpu负载


2、 内存使用情况

(1)jvm为1G


(2)jvm为2G


3.6 Jvm大小总结

Jvm参数对logstash的性能特别小,按照正常来说,一般设置2-4G为最佳。如果内存特别大可以考虑再增加。

4 Logstash消费kafka性能测试

由于机器数量有限,我在kafka一个节点上部署的logstash,由于一起工作可能会影响测试结果

4.1 Logstash数量

1、结果如下表


其中logstash为2的时候,13.1kiB/s数据为kafka节点上的logstash。

3、 CPU负载


4.2 Logstash数量总结

如果多个logstash在kafka里消费不会影响消费的速度,这样可以保证在日志特别多的时候可以横向扩展logstash来提高性能。从而解决logstash的瓶颈问题。但是要注意消费者组的分配,如果logstash的数量少于kafka的partition,可以随便分配。如果logstash的数量多于kafka的partition。需要分不同的消费者组去消费。不然会有消费者无法消费到数据。详细请看kafka性能测试文档。

5 Elasticsearch性能测试

Elasticsearch性能测试主要是测试自身性能,也就是logstash在往kafka里写入数据时候的速度,和自身的服务器瓶颈去观察elasticsearch的瓶颈所在。

5.1 Logstash向elasticsearch写入数据测试

由于机器数量问题,在elasticsearch节点上开启一个logstash,由于一起工作可能会影响测试结果。

5.1.1 logstash的数量

1、 结果如下表


其中6.04kiB/s的数据来自和elasticsearch节点在一起的logstash数据。

2、 CPU负载情况


3、 内存使用情况


5.1.2 Jvm大小总结

测试过jvm为2G和4G性能测距几乎没有,由于elasticsearch运行消耗很大的性能。所以在这里不详细说明,有更好配置的机器在进行测试。

5.1.3 elasticsearch自身测试

使用bigdisk插件对elasticsearch进行监控,发现只要elasticsearch启动,机器内存就被消耗了6.8G。只要有写入操作,内存就会到达7.5G。所以测试机器性能太差,需要更大的内存的服务器进行测试。

1、 启动未做任何操作


i

2、写入数据


5.2 Logstash向elasticsearch写入数据总结

由于logstash特别消耗cpu,elasticsearch特别消耗内存,而在两个logstash传入elasticsearch的时候logstash和elasticsearch在同一台服务器上,所以测试数据并不是特别准确。需要性能更好的服务器来进行测试。

6 Logstash和elasticsearch整体总结

6.1 Logstash总结

在测试环境机器硬件环境下。在logstash消费kafka的情况下单节点logstash的速度为14000条/秒,自身消费的速度为20000条/秒,输出到elasticsearch的速度为7430条/秒。

6.1.1 Logstash的性能

1、-b选项也就是--pipeline-batch-size参数,这是一个不确定的参数,越大会越消耗JVM内存。是积累多少条日志进行向下传输。这个可以根据实际情况进行测试之后得出结论。

2、-w选项也就是--pipeline-workers参数,此参数是filter和output模块的pipeline的线程,理论来说越大越好,但是不能超过cpu的总核数,因为-w选项越大,消耗cpu性能也就越多。所以实际情况下根据服务器的总核心数进行设置。

3、jvm的大小对logstash影响并不是特别大,在生产环境建议给2-4G。

6.2 Elasticsearch总结

Elasticsearch消耗内存严重,所以测试的数据并没有测试出elasticsearch的性能瓶颈所在点。

6.2.1 Elasticsearch性能

由于elasticsearch类似数据库,并且写入量特别大,一般在elk上不会成为瓶颈。主要优化还在于索引方面。

1、 bulk的参数,此参数相当于数据库里的bash操作。引入批量操作bulk,可以提高工作效率。但是由于机器性能无法测试。

2、 内存要求很高,elasticsearch要求内存很高,一般建议在32G以上。

3、 在内存要求满足的情况下,磁盘会成为瓶颈。官方建议使用SSD。

注意:以上性能并没有实际测试,只是通过官网或者其他来源得出的结论,只限参考。

相关 [logstash elasticsearch 压力测试] 推荐:

Logstash及Elasticsearch 压力测试说明书(十) - 简书

- -
磁盘:SATA磁盘2块,磁盘阵列为RAID1. CPU****:2个4核CPU. 具体参数:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz. 1、 kafka版本:kafka_2.11-0.11.0.3. 2、 kafka集群数量:3. 3、 logstash版本:logstash-5.6.11.

ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

- - 编程语言 - ITeye博客
在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段:. 以下内容来自: http://baidu.blog.51cto.com/71938/1676798. 日志主要包括系统日志、应用程序日志和安全日志. 系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因.

使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践

- - SegmentFault 最新的文章
Logstash:负责日志的收集,处理和储存. Elasticsearch:负责日志检索和分析. Kibana:负责日志的可视化. 2015年08月31日 - 初稿. 阅读原文 - http://wsgzao.github.io/post/elk/. CentOS 7.x安装ELK(Elasticsearch+Logstash+Kibana) - http://www.chenshake.com/centos-install-7-x-elk-elasticsearchlogstashkibana/.

市面上流行的 ELK 就是 ElasticSearch + Logstash + Kibana 索引 收集 圖表化

- - SSORC.tw
Elasticsearch 是專門數據儲存、分析、索引. Kibana 是專門 Web 介面,讓 Elasticsearch 內容來圖表化. Logstash 是專門資料收集、過濾、儲存到 Elasticsearch. 現今多出了 Beats 家族,主要是來當作輕量化 Logstash 的角色, Beats 是用 Golang 寫的,佔用資源更少.

使用logstash同步mysql 多表数据到ElasticSearch实践 - 三度 - 博客园

- -
参考样式即可,具体使用配置参数根据实际情况而定. jdbc_connection_string => "jdbc:mysql://localhost/数据库名". jdbc_driver_library => "mysql-connector-java-5.1.45-bin.jar所在位置". type => "数据库表名1".

开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索

- - C1G军火库
ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 支持通过HTTP使用JSON进行数据索引. logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台. 你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计.

压力测试工具Benchmark

- - 企业架构 - ITeye博客
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

使用webbench做压力测试

- - 三水清
元旦假期帮朋友折腾VPS,安装了centOS和lnmp,网站部好了,而且定时任务也加上了,觉得应该做个压力测试,之前用过apache自带的ab,不过今天使用的是 webbench做压力测试. 首先我们先来安装webbench吧, 为了测试准确,请将 webbench 安装在别的linux服务器上, 因为webbench 做压力测试时,自身也会消耗CPU和内存资源, 否则, 很可能把自己服务器搞挂掉.

Mysql压力测试shell脚本

- - CSDN博客数据库推荐文章
转载请注明,来自: http://blog.csdn.net/skyman_2001. Mysql自带了压力测试工具mysqlslap,所以我们可以不用自己编写程序来测试Mysql读取的压力. 上面脚本的意思是每隔100ms循环做这样的事:模拟100个mysql客户端,对数据库test的表test执行200次插入(number-of-queries = concurrency * 每个mysql客户端的查询次数,所以这里的每个mysql客户端的查询次数是2次),迭代10次.

Jmeter教程 简单的压力测试

- - 行业应用 - ITeye博客
Jmeter是一个非常好用的压力测试工具.   Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好.     做压力测试的常用工具.     做压力测试的步骤如下:.     本文做压力测试的例子.     第一步: 使用CSV Data Set Config 来参数化.