ELK日志采集logstash output -> elasticsearch 数据写入性能优化。

背景

前些时间测试线上ELK环境,发现beats组件直连elasticsearch数据灌入异常快,但是过了logstash数据明显迟缓。判定logstah的灌入存在瓶颈。以下为logstash调优细节。

环境

本次针对的优化对象是线上的日志分析平台,主要数据源为基础服务器数据和应用日志

  • ES节点:顶配3点集群,各方面负载不高,无写入瓶颈
  • logstah节点:2个汇聚端,
  • 网络:内网万兆传输,无瓶颈
  • 数据量(条):1~1.5w/s

    架构

    分析

    logstah的功能是一个管道,通过input灌入数据,filter过滤数据,output输入数据

    • input:filebeat和metricbeat总连接数为500左右,且观察日志无retry 或 timeout等输出,无明显瓶颈
    • filter和output:logstash的正则解析过程非常消耗资源,但是我们的节点资源消耗居然不高。在新版的logstash中优化了input,filter,output的线程模式,在配置文件中可以通过配置pipeline.workers来调整filter和
      output的线程数

    优化

    查询官网手册后,最影响logstash传输效率的参数有以下几个:

    1. pipeline.workers:决定filter和output的线程数,官方建议大于CPU数,如果logstah节点是混用服务器,建议等于或小于CPU数
    2. pipeline.batch.size:单个线程每次调用ES bulk index API时的事件数。这些时间将被放到内存中。最好的设定值是不断地测试,测试,测试。
    3. JVM_heap:内存堆大小,通过配置jvm_option来修改。

    优化后的logstash

  • pipeline.batch.size: 2500
  • pipeline.batch.delay: 5
  • pipeline.workers: 8
  • pipeline.batch.size: 2500
  • pipeline.batch.delay: 50

    优化结果

知人不必言尽,留三分余地与人,留些口德与己。 责人不必苛尽,留三分余地与人,留些肚量与己。 才能不必傲尽,留三分余地与人,留些内涵与己。 锋芒不必露尽,留三分余地与人,留些深敛与己。 有功不必邀尽,留三分余地与人,留些谦让与己。

发表评论

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