阿里云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管道工作線程數和管道批量處理事件數時,建議您優先調整管道批大?。▽懭氲紼lasticsearch場景,單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上,提高消費能力。
- 提高管道批處理和管道工作線程數。