elk与syslog

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 }
View Code

   可以有多个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
View Code

    以上命令会不断的像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)如下图:

    

      

       

猜你喜欢

转载自www.cnblogs.com/lowseasonwind/p/8855859.html
elk