阿里云Logstash在使用及调优方面和开源版Logstash无差异,Logstash管道处理分为三个阶段:input、filter和output。Logstash管道每个阶段都运行在自己的线程中,input阶段将事件写入到内存(默认)或磁盘的中央队列,每个管道工作线程从此队列提取一批事件,通过filter对事件做预处理,最后通过output输出预处理后的事件。本文结合日常实践,为您提供Logstash性能排查的方法,仅供参考。

开启监控

使用阿里云Logstash,建议您优先开启以下Logstash监控:
  • 阿里云Logstash云监控:可获取Logstash系统指标监控数据。详细信息请参见配置自定义报警策略
  • 阿里云Logstash X-Pack监控:该监控依赖于同VPC下的阿里云Elasticsearch,可获取Logstash集群的CPU、内存、接收事件的速率以及输出事件的速率等指标监控数据。详细信息请参见配置X-Pack监控

调试建议

  • 调试过程中,建议您每次先调试一项参数值,逐步增大或降低,分别观察源端和目的端服务的消费和写入情况。
  • 在Logstash系统资源充足的情况下,调试Logstash管道工作线程数和管道批量处理事件数时,建议您优先调整管道批大小(写入到Elasticsearch场景,单bulk建议在5 MB左右),待目标端写入无法增加时,再调整管道工作线程数。详细信息请参见检查管道参数配置
  • 整个调整过程中需要关注源端、Logstash集群和目标端系统的压力,并且确保有足够的堆内存处理突增的异常事件。详细信息请参见检查Logstash集群性能
    说明 Logstash通过管道方式处理事件,其速度取决于输入和输出端服务所能达到的消费能力。
  • 借助阿里云Logstash的logstash-output-file_extend插件,当管道正常启动时,您可以通过调试日志分析业务数据处理情况。详细信息请参见使用Logstash管道配置调试功能

检查Logstash集群性能

说明 充分利用集群资源,可提高吞吐量。如果CPU或内存未达到瓶颈,即使增加规格,吞吐量也不会增加。

CPU

通过监控查看CPU使用率。如果CPU使用率太高,需要关注堆内存使用情况。

堆内存

  • 在大多数应用场景中,将堆内存设置为4 GB~8 GB即可。如果确实需要更大的堆内存,例如资源达到瓶颈,可扩容集群规格,否则无需设置更大的堆内存。建议您在生产前进行测试,设置合适的堆内存。
  • 堆内存使用率很高或堆内存很小,会触发频繁的GC,导致CPU使用率增加。建议您增加一倍内存,观察性能是否有提升。
  • 阿里云Logstash结合Logstash官方建议,堆内堆外各占一半内存。

检查管道参数配置

  • 管道工作线程:该参数值设置使用多少线程来处理filter和output任务,默认为CPU核数。如果CPU使用率不高,可适当调大该参数,提高处理性能。
  • 管道批大小:该参数设置每个独立的工作线程,对接收到的多少个事件做filter和output处理。适当提高该参数,有利于提高事件处理效率,该参数值对应于Elasticsearch的bulk设置。

常见场景

Kafka

Kafka堆积,如何提高消费能力?

以下提供三种提高Kafka消费能力的方式,更多方式请参见Logstash官方Kafka文档。您可以选择其中一种方式,也可以将这三种方式结合起来使用:
  • 大数据量场景,可根据Logstash节点数乘以消费者线程数评估Kafka的topic分区数。
    说明 分区数并不是越多越好,分区本身也有自己的开销。
  • 使用相同的group_id运行多个Logstash实例,将负载分散到多个物理机上。topic下的消息将分发到相同的group_id上,提高消费能力。
  • 提高管道批处理和管道工作线程数。

相关文档

Logstash官方性能调试文档