Logstash优化心得

版权声明:本文为原创文章,未经博主允许不得转载。重点内容

背景

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

环境

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

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

架构

这里写图片描述

分析

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

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

网友的测评数据是两个点的logstah可以承受600+的连接数。但是我懒,未验证。

优化

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

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

我的配置是:

pipeline.workers: 30
pipeline.output.workers: 30
pipeline.batch.size: 2500
pipeline.batch.delay: 5
---JVM_conf
-Xms32g
-Xmx32g

由于我的CPU为20核,稍微增加了线程数为30核,pipeline.batch.size由默认的150修改为2500。由于我的机器配置比较高,配置32G内存来换取更好的性能。

  • 公式
logstash在过滤过程中会将输入的数据放入内存中,规则如下:
pipeline.workers * pipeline.batch.size / flush_size = ES bulk index API 调用数

优化结果

调优后的传输数据如下:
这里写图片描述

  • 上浮部分为优化后
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Logstash调优可以从以下几个方面入手: 1. 增加Logstash实例:可以通过横向扩展的方式来提高Logstash的处理能力,多个Logstash相互独立,采用相同的pipeline配置,另外可以在这多个Logstash前增加一个LoadBalance,以实现多个Logstash的负载均衡。 2. 优化pipeline配置:可以通过优化pipeline配置来提高Logstash的性能,例如使用grok等插件来解析日志,使用filter插件来过滤不必要的数据等。 3. 调整JVM参数:可以通过调整JVM参数来提高Logstash的性能,例如增加堆内存大小、减少垃圾回收次数等。 4. 使用异步处理:可以使用异步处理来提高Logstash的性能,例如使用异步输出插件来将数据输出到Elasticsearch等目标系统。 5. 优化输入输出:可以通过优化输入输出来提高Logstash的性能,例如使用TCP输入插件来替代UDP输入插件,使用bulk输出插件来替代单条输出插件等。 以下是一个Logstash调优的例子: ```shell # 增加Logstash实例 # 在多台服务器上启动多个Logstash实例,并使用LoadBalance进行负载均衡 # pipeline配置相同,可以使用同一份配置文件 # 配置文件示例: input { beats { port => 5044 } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "logstash-%{+YYYY.MM.dd}" } } # 调整JVM参数 # 在启动Logstash时增加JVM参数,例如增加堆内存大小为4G bin/logstash -J-Xmx4g # 使用异步处理 # 在output插件中使用异步输出插件,例如使用elasticsearch_async插件 output { elasticsearch_async { hosts => ["localhost:9200"] index => "logstash-%{+YYYY.MM.dd}" } } # 优化输入输出 # 使用TCP输入插件替代UDP输入插件,使用bulk输出插件替代单条输出插件 input { tcp { port => 5000 } } output { elasticsearch { hosts => ["localhost:9200"] index => "logstash-%{+YYYY.MM.dd}" codec => "json" flush_size => 500 idle_flush_time => 1 } } ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值