1. logstash安装
1) 安装java
2) 下载logstash安装包
3) rpm –i logstash-6.2.3.rpm
4) 装成功后, centos7默认会装到/usr/share/logstash
5) 配置文件默认位于/etc/logstash
2. 管道配置
以输入stdin, syslog, 输出redis,stdout为例,
eg: rsyslog.conf
1 input { 2 3 stdin {} 4 5 syslog { 6 7 host => "0.0.0.0" 8 9 port => 514 10 11 } 12 13 14 15 } 16 17 filter {} 18 19 output { 20 21 redis { 22 23 batch => true 24 25 batch_events => 1000 26 27 batch_timeout => 20 28 29 data_type => list 30 31 key => "syslog-%{+yyyy-MM-dd}" 32 33 host => ["127.0.0.1"] 34 35 port => 6379 36 37 db => 0 38 39 } 40 41 stdout{ 42 43 codec => rubycode 44 45 } 46 47 }
可以有多个input, filter, output
3. logstash配置
logstash主要配置文件logstash.yml
java 堆栈配置文件 jvm.options
管道配置文件 pipeline.yml
主要配置:
1) logstash.yml
node.name 节点名称
path.data 缓冲数据本地存放的路径
pipeline.workers 并行执行filter+output的进程数,默认cpu核数
pipeline.batch.size 每次批量从input获取的数据量, 这块会涉及到一个问题, 分配给logstash的堆栈空间需要大于等于pipeline.workers * pipeline.batch.size, 因为logstash会将数据缓存到堆栈里。
path.config 管道配置文件的路径
config.reload.automatic 是否自动reload
queue.type 默认memory, 使用persisted会持久化到磁盘, 使用队列可以保证在宕机多出现其他可修复的问题时,来不及进行filter和output处理时, 将数据保存到磁盘,避免数据丢失,logstash重启后,会同时从input和磁盘上读取队列的数据,进行filter+output处理, 还有一种情况是如果filter+output的速度慢于input, 将来不及处理的数据缓存到磁盘, 有效渡过峰值, 避免性能问题或缓存被打爆丢失数据。
queue.max_bytes 永久队列允许持久化的最多字节数, mb或gb为单位。
2) jvm.options
+xms, +xmx调优
4. 启动
1) 用pv命令启动logstash 监控性能
a) /usr/share/logstash/bin/logstash –f rsyslog.conf 启动单个管道
b) /usr/share/logstash/bin/logstash –path.settings=/etc/logstash 会启动所有的管道, 读取配置文件, 事实上是将多个管道配置文件合为一个
c) 性能监控, 使用linux自带pv命令: /usr/share/logstash/bin/logstash –f rsyslog.conf|pv –abt > /dev/null
2) 向syslog端口发送数据
数据示例采用沙箱日志:
<12> Mar 26 16:30:35 localhost skyeye-sandbox: access_time:2017-08-15 7:24:10|!attacker:10.19.1.245:52868|!file_md5:0f51a34a9a1ce4d2026c772400f07910|!file_name:virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!file_size:320541|!file_type:exe32|!proto_type:http|!subject:|!method:GET|!url:http://sample/test/virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!victim:10.19.1.106:80|!malscore:7.0|!vir:win7-sp1;office2010;adobe11;java8;flash16;ie10,winxp-sp3;office2007;adobe10;java6;flash16;ie8|!static_report:Trojan.Lethic.Gen.11|!cloud_info: Win32/Worm.d2e.cloud |!sign_info: 北京科技有限责任公司; 79800E0C5BC7ABEFC387B56D0E89306A3926EC25|!link:10.95.24.3
3)测试工具采用yes
yes ‘字符串’|nc ip port
示例:
yes '<12> Mar 26 16:30:35 localhost skyeye-sandbox: access_time:2017-08-15 7:24:10|!attacker:10.19.1.245:52868|!file_md5:0f51a34a9a1ce4d2026c772400f07910|!file_name:virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!file_size:320541|!file_type:exe32|!proto_type:http|!subject:|!method:GET|!url:http://sample/test/virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!victim:10.19.1.106:80|!malscore:7.0|!vir:win7-sp1;office2010;adobe11;java8;flash16;ie10,winxp-sp3;office2007;adobe10;java6;flash16;ie8|!static_report:Trojan.Lethic.Gen.11|!cloud_info: Win32/Worm.d2e.cloud |!sign_info: 北京科技有限责任公司; 79800E0C5BC7ABEFC387B56D0E89306A3926EC25|!link:10.95.24.3' | nc 10.95.134.20 514
以上命令会不断的像10.95.134.20 514端口发送日志.
注意nc ip port 默认使用tcp, nc –u ip port使用udp
经测试udp的每秒处理条数要比tcp快一个数量级, 但是udp的接收和入库不成比例,待探究
4) 测试工具loggen
略
5. 知识点
1) 经过测试通过rsyslog接收syslog并转发给logstash的性能只有7k/s, 未必有logstash性能好。
2)logstash不支持集群, 只能横向扩展, 启动多个实例, 或增加机器。
6. 性能优化
1) 运行时内存堆栈, 修改jvm.options
+xms +xmx 16gb差不多
2) workers数量, 修改logstash.yml
pipeline.workers 默认cpu核数, 可以根据实际情况调整大于或小于cpu核数, 主要影响filters和output, filters和output使用多线程。
3) pipeline.batch.size 单进程批次从input获取的event数量, logstash按流程分为input, filter, output三个流程, 这块主要影响filter之前, 从input取数据的效率, heap_size>=workers * batch_size ,所以设置workers和batch_size的时候要根据分配给logstash的堆内存来分配,并不是越大越好。
4) queue.type 默认memory, 表示不启用持久队列, persisted代表启用持久队列, 并持久到磁盘, 记得一定要启用, 避免数据丢失, 当output已满或者处理速度跟不上input的速度的时候, logstash会阻塞,并将input的数据先缓存到磁盘文件, 待output性能转好, 再同时从input和磁盘队列取数据,输送到filter进行处理。比如redis oom的情况,可以保证数据不丢失。
5)如下图: