Logstash【從無到有從有到無】【L13】性能調優

原文鏈接:https://www.elastic.co/guide/en/logstash/current/tuning-logstash.html

目錄

1.性能調優(Performance Tuning)

1.1.性能故障排除指南(Performance Troubleshooting Guide)

1.1.1.績效檢查表(Performance Checklist)

1.2.調整和分析Logstash性能(Tuning and Profiling Logstash Performance)

1.2.1.有關管道配置和性能的說明

1.2.2.分析堆


1.性能調優(Performance Tuning)

本節包含有關調整Logstash性能的以下信息:

  • 性能故障排除指南
  • 調整和分析Logstash性能

 

1.1.性能故障排除指南(Performance Troubleshooting Guide)

您可以使用此疑難解答指南快速診斷和解決Logstash性能問題。 不需要高級的管道內部知識就可以理解本指南。 但是,如果您想超越本指南,建議閱讀 pipeline documentation

作爲提高性能的第一次嘗試,您可能會想跳樓並更改諸如 pipe.workers(-w)之類的設置。 根據我們的經驗,更改此設置會使解決性能問題更加困難,因爲您會增加正在使用的變量的數量。 而是一次進行一次更改並衡量結果。 從此列表的末尾開始是確定情況的可靠方法。

 

1.1.1.績效檢查表(Performance Checklist)

  1. 檢查輸入源和輸出目標的性能:
    1. Logstash僅與其連接的服務一樣快。 Logstash僅能以其輸入和輸出目的地的速度消耗和產生數據!
  2. 查看系統統計信息:
    1. CPU
      1. 請注意CPU是否被大量使用。 在Linux / Unix上,您可以運行top -H來查看按線程劃分的進程統計信息以及總CPU統計信息。
      2. 如果CPU使用率很高,請跳至有關檢查JVM堆的部分,然後閱讀有關調整Logstash worker設置的部分。
    2. Memory
      1. 請注意Logstash在Java VM上運行的事實。 這意味着Logstash將始終使用您分配給它的最大內存量。
      2. 尋找其他使用大量內存並可能導致Logstash交換到磁盤的應用程序。 如果應用程序使用的總內存超過物理內存,則會發生這種情況。
    3. I/O Utilization
      1. 監視磁盤I / O以檢查磁盤是否飽和。
        1. 如果您使用的Logstash插件(例如文件輸出)可能會使存儲空間飽和,則可能導致磁盤飽和。
        2. 如果遇到很多錯誤,這些錯誤迫使Logstash生成大量錯誤日誌,則磁盤飽和也可能發生。
        3. 在Linux上,可以使用iostat,dstat或類似的工具來監視磁盤I / O。
      2. 監視網絡I / O的網絡飽和度。
        1. 如果您使用執行大量網絡操作的輸入/輸出,則可能會發生網絡飽和。
        2. 在Linux上,您可以使用dstat或iftop之類的工具來監視網絡。
    4. 檢查JVM堆:
      1. 如果堆大小太低,CPU利用率通常會飛速增長,從而導致JVM不斷進行垃圾收集。
      2. 檢查此問題的快速方法是將堆大小加倍,並查看性能是否有所提高。 不要增加堆大小超過物理內存量。 爲操作系統和其他進程留出至少1GB的可用空間。
      3. 您可以使用與Java一起分發的jmap命令行實用程序或使用VisualVM對JVM堆進行更準確的測量。 有關更多信息,請參見 Profiling the Heap
      4. 始終確保將最小(Xms)和最大(Xmx)堆分配大小設置爲相同的值,以防止在運行時調整堆大小,這是一個非常昂貴的過程。
    5. 調整Logstash工作程序設置:
      1. 首先使用-w標誌擴大管道工人的數量。 這將增加可用於過濾器和輸出的線程數。 如果需要,可以安全地將其擴展到多個CPU內核,因爲線程可以在I / O上變爲空閒狀態。
      2. 您也可以調整輸出批次大小。 對於許多輸出,例如Elasticsearch輸出,此設置將對應於I / O操作的大小。 對於Elasticsearch輸出,此設置對應於批次大小。

 

1.2.調整和分析Logstash性能(Tuning and Profiling Logstash Performance)

選擇Logstash默認值可爲大多數用戶提供快速,安全的性能。 但是,如果發現性能問題,則可能需要修改一些默認設置。 Logstash提供以下可配置選項來調整管道性能:pipeline.workers,pipeline.batch.size和pipeline.batch.delay。 有關設置這些選項的更多信息,請參見logstash.yml

修改這些選項之前,請確保已閱讀《性能故障排除指南》(Performance Troubleshooting Guide)。

  • pipeline.workers設置確定要運行多少個線程以進行過濾和輸出處理。如果發現事件正在備份,或者CPU未飽和,請考慮增加此參數的值以更好地利用可用的處理能力。甚至可以找到良好的結果,使該數目超過可用處理器的數目,因爲在寫入外部系統時,這些線程可能在I / O等待狀態中花費大量時間。此參數的合法值爲正整數。
  • pipeline.batch.size設置定義了單個工作線程在嘗試執行過濾器和輸出之前收集的最大事件數。較大的批處理大小通常更有效,但會增加內存開銷。某些硬件配置要求您增加jvm.options配置文件中的JVM堆空間,以避免性能下降。 (有關更多信息,請參閱 Logstash Configuration Files)由於頻繁的垃圾回收或與內存不足異常相關的JVM崩潰,超出最佳範圍的值會導致性能下降。輸出插件可以將每個批次作爲邏輯單元進行處理。例如,Elasticsearch輸出爲收到的每個批次發出批量請求( bulk requests )。調整pipeline.batch.size設置可調整發送到Elasticsearch的批量請求的大小。
  • pipeline.batch.delay設置很少需要調整。此設置調整Logstash管道的延遲。管道批處理延遲是Logstash在當前管道工作線程中接收到事件後等待新消息的最長時間(以毫秒爲單位)。經過這段時間後,Logstash開始執行過濾器和輸出。Logstash在接收事件和在過濾器中處理該事件之間等待的最長時間是pipeline.batch.delay和pipeline.batch.size設置的乘積。

1.2.1.有關管道配置和性能的說明

如果您打算修改默認管道設置,請考慮以下建議:

  • 進行中事件的總數由pipeline.workers和pipeline.batch.size設置的乘積確定。該產品稱爲機上計數。在調整pipeline.workers和pipeline.batch.size設置時,請記住飛行中的值。以不規則的間隔間歇地接收大型事件的管道需要足夠的內存來處理這些峯值。在jvm.options配置文件中相應地設置JVM堆空間。 (有關更多信息,請參見 Logstash Configuration Files。)
  • 測量每個更改,以確保提高而不是降低性能。
  • 確保您留有足夠的內存來應對事件大小的突然增加。例如,一個生成異常的應用程序表示爲大塊的文本。
  • 可以將工作程序數設置爲高於CPU內核數,因爲輸出經常在I / O等待條件下花費空閒時間。
  • Java中的線程具有名稱,您可以使用jstack,top和VisualVM圖形工具確定給定線程使用哪些資源。
  • 在Linux平臺上,Logstash用描述性的東西標記它可以使用的所有線程。例如,輸入顯示爲[base] <輸入名稱,管道工作程序顯示爲[base]> workerN,其中N是整數。如果可能,還標記其他線程以幫助您確定它們的用途。

1.2.2.分析堆

調整Logstash時,可能必須調整堆大小。 您可以使用 VisualVM工具來分析堆。 “監視器”窗格對於檢查堆分配是否足以滿足當前工作負載特別有用。 下面的屏幕截圖顯示了示例Monitor 窗格。 第一個窗格檢查配置了太多機上事件的Logstash實例。 第二個窗格檢查配置有適當數量的飛行事件的Logstash實例。 請注意,此處使用的特定批處理大小很可能不適用於您的特定工作負荷,因爲Logstash的內存需求在很大程度上取決於您發送的消息的類型。

 

在第一個示例中,我們看到CPU使用效率不高。 實際上,JVM常常不得不爲“完整GC”而停止VM。 完全垃圾回收是內存壓力過大的常見症狀。 這在CPU圖表上的尖峯模式中可見。 在配置效率更高的示例中,GC圖形模式更加平滑,並且CPU的使用方式更加統一。 您還可以看到分配的堆大小和允許的最大堆之間有足夠的餘量,這爲JVM GC提供了很大的工作空間。

使用與出色的 VisualGC插件類似的工具檢查深入的GC統計數據,表明與在資源密集型的Old Gen“ Full” GC中花費的時間相比,過度分配的VM在高效的Eden GC中花費的時間非常少。 

只要GC模式是可以接受的,偶爾增加到最大的堆大小也是可以接受的。 此類堆大小峯值是響應於流水線中發生的大量事件而發生的。 通常,在已使用的堆內存量和最大值之間保持一定的差距。 本文檔不是JVM GC調優的全面指南。 閱讀官方的Oracle guide,以獲取有關該主題的更多信息。 我們還建議閱讀“ Debugging Java Performance”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章