https://blog.csdn.net/xuguokun1986/article/details/77890920

https://www.elastic.co/guide/en/logstash/current/tuning-logstash.html

https://blog.csdn.net/u013613428/article/details/77963582   这个不错

https://blog.csdn.net/u013613428/article/details/77992362

 

基线
单个应用软件的性能,取决于多个方面:
– 应用可以使用的硬件资源:cpu单核速度,cpu核数,系统内存,网络节点之间的传输速度(网卡速度)
– 应用分配到的硬件资源:应用可以使用的cpu核数, 应用分配到的系统内存

一般来说,当使用多核cpu的情况下,为了能够最大化的使用cpu资源,应用使用的线程数应该等于cpu的内核数量。而内存方面,在保证基本系统运行的前提下,应用应该使用尽可能多的内存。

当前,在云上的logstash节点所使用的机器是2c4g的配置。对应的,在logstash的配置方面:
lostash.yml:
pipeline.workers: 2 (不配置的情况下,默认是系统核数)
pipeline.output.workers: 2 (不配置的情况下,默认是1/2系统核数)

jvm.options:
-Xms512m
-Xmx2g

当然,这样的配置是相对较低的,我们应该在拿到最终的资源后,在对应资源上做基线测试。

生成测试数据(Generator)
实际运行的时候这个插件是派不上用途的,但这个插件依然是非常重要的插件之 一。因为每一个使用 ELK stack 的运维人员都应该清楚一个道理:数据是支持操作 的唯一真理(否则你也用不着 ELK)。所以在上线之前,你一定会需要在自己的实 际环境中,测试 Logstash 和 Elasticsearch 的性能状况。这时候,这个用来生成测 试数据的插件就有用了!

配置示例
input {
generator {
count => 10000000
message => ‘{“key1″:”value1″,”key2″:[1,2],”key3”:{“subkey1″:”subvalue1”}}’
codec => json
}
}
1
2
3
4
5
6
7
8
插件的默认生成数据,message 内容是 “hello world”。你可以根据自己的实际需要 这里来写其他内容。

使用方式
使用 pv 命令配合LogStash::Codecs::Dots

output {
stdout {
codec => dots
}
}
1
2
3
4
5
LogStash::Codecs::Dots 是一个另类的 codec 插件,它的作用是:把每个 event 都变成一个点( . )。这样,在输出的时候,就变成了一个一个的 . 在屏幕上。 显然这也是一个为了测试而存在的插件。

安装pv
PV 全命为Pipe Viewer,利用它我们可以查看到命令执行的进度。在这里就是作实时的标准输入、标准输出监控。

$ ./bin/logstash -f generator_dots.conf | pv -abt > /dev/null
2.2MiB 0:03:00 [12.5kiB/s]
1
2
这里单位是 B/s,但是因为一个 event 就输出一个 . ,也就是 1B。所以 12.5kiB/s 就相当于是 12.5k event/s。
如果你在 CentOS 上通过 yum 安装的 pv 命令,版本较低,可能还不支持 -a 参数。单纯靠 -bt 参数看起来还是有点累的。在我们的服务上通过yum install pv命名安装的pv的版本是1.1.4。是不支持a命令的(平均速率)。因此需要下载一个更新的版本。
http://www.ivarch.com/programs/sources/pv-1.6.6.tar.gz
具体命令的步骤是:

# wget http://www.ivarch.com/programs/sources/pv-1.6.6.tar.gz
# tar zxvf pv-1.6.6.tar.gz
# cd pv-1.6.6
# ./configure
# make && make install
1
2
3
4
5
注意:
– 我们的服务器默认没有安装gcc,所以得先运行yum install gcc
– 如果make install没有生效,直接用编译出来的pv替换yum install的pv(查看安装路径:rpm -ql pv)

具体测试
先测试plain pipeline的速度,也就是说,logstash从kafka上直接取数据,没有filter,直接输出。
先通过以下脚本input_test.conf往kafka里面灌2百万条数据,这里,也可以从侧面看logstash的输出,和kafka集群的输入能力。

input {
generator {
count => 2000000
message => ‘{“key1″:”value1″,”key2″:[1,2],”key3”:{“subkey1″:”subvalue1”}}’
codec => json
}
}

output {

stdout {
codec => dots
}

kafka {
bootstrap_servers => “10.60.32.9:9092,10.60.32.10:9092”
topic_id => “test1”
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在基线配置下,我们可以看到,平均的输出速度在5150条/s以上:

[root@elk-ls1 logstash]# ./bin/logstash -f /etc/logstash/input_test.conf | pv -abt > /dev/null
1.61MiB 0:05:27 [5.15KiB/s]
1
2
再来看看pipeline的输入速度,用以下配置:

input {
kafka {
bootstrap_servers => “10.60.32.9:9092,10.60.32.10:9092”
topics => [“test1”]
codec => “json”
add_field => {“app_domain” =>”cloud”}
}
}

output {
stdout {
codec => dots
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
可以看到平均的输入速度达到6200条/s:

[root@elk-ls1 logstash]# ./bin/logstash -f /etc/logstash/output_test.conf | pv -abt > /dev/null
2.92MiB 0:08:04 [6.19KiB/s]
1
2
输入的速度略快于输出的速度。这里有可能是kafka的原因,也可能是logstash的原因,要做深层次的分析,还得针对kafka做专门的性能测试。
———————
作者:点火三周
来源:CSDN
原文:https://blog.csdn.net/u013613428/article/details/77963582
版权声明:本文为博主原创文章,转载请附上博文链接!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注