ELK日志分析集群搭建管理(rsyslog(4)

配置文件看着很长,其实阅读性很好,很易懂上手编写,无非就是定义切割点,如果大切割点下需要继续切割,就加if判断,继续切割,吐个槽里面threads和workers的数量好像不管用,我压测时去看线程数对不上,看的方法是top -H -p logstash的pid。

再就是看看哪些需要计算的变成数字型,还有个timestamp的处理,这个可以看看上面的代码,对于nginx打印的时间符合ISO8601标准,可以用他做es的时间索引,这样有个好处,如果某个环节慢索引赶不上的话,日志不会错序。时间标准详细可见:

备注:

a、尽量去掉没用的字段,精简索引,非常重要;

b、nginx打印出来的时间是标准化的,可以用它传到es作为timestamp建索引;

c、对于响应时间、响应内容大小、状态码要转换成数字类型,方便在kibana里做计算等操作;

d、切割双引号可以使用如下配置

code => "event.append(Hash[@kname.zip(event['message'].split(34.chr))])"

e、抓包后发现,logstash向es��数据是轮训的,从zookeeper消费数据不是轮训,可能是1个个用,有压力或问题后再去启用后面的zookeeper。

f、尽量按照官方如下写法建立多个索引向es推送,防止单个索引巨大,search时计算不出来

index => "logstash-cms-nginx-%{+YYYY.MM.dd.hh}"

g、测试性能方法如下

由于没有现成工具,我们用了打点计量的方式进行压测,摘掉es后将输出变为一个点,每处理一条信息打一个点,然后将打出的点用pv命令统计出字节流量,反推出logstash的吞吐量。

cp一个配置文件,修改output如下:

 

output {

       stdout { codec => dots 

       workers => 1

        }

       }

 

同时为了不影响线上业务,修改group_id,这样的话测试消费和线上消费互不影响,配置文件修改如下:

  kafka {

    zk_connect => "10.13.88.190:2181,10.13.88.191:2181,10.13.88.192:2181"

    topic_id => "nginx"

    group_id => "test001" 

    consumer_threads => 12

    reset_beginning => false

    decorate_events => flase

  }

 

测试时执行命令:/opt/logstash/bin/logstash -f /tmp/kafka_test.conf |pv -abt > /dev/null

压测结果如下:

每个点是一个byte,等到数据稳定后,计算每s的吞吐量为2.93*1024=3000,也就是这一个logstash最大吞吐量为能处理3000条信息每s。

四、索引(es 2.X 版本)

es是硬盘io和cpu消耗比较重的部分,硬优化有ssd,软优化牵涉到Java层面的GC调优、index调优、进程池调优、merge调优等,目前跑的还是比较好的,也有说将index和search分开的,防止search太大影响index索引,没去尝试,10多亿条日志,在目前的架构下性能还可以。

es的安装也是比较简单详见:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html

a、我们线上添加的进程调优如下,不加这个配置,跑一段时间就会有出现某一台es负载特别高的情况,而且难以恢复,甚至死机,加后运行健壮,先看调整前后对比图:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6601157f7fc6dad2553a55911c1db82f.html