全部產品
Search
文件中心

Elasticsearch:Logstash資料寫入問題排查方案

更新時間:Aug 23, 2024

在使用阿里雲Logstash將資料寫入Elasticsearch(output指定為Elasticsearch)時,您可能會遇到網路不通、管道配置錯誤、負載高、管道正常啟動但無資料寫入目標端以及服務正常但缺少資料等問題,此時您可以參考本文的排查方案進行排查解決。

網路不通

排查方案

常見錯誤案例

建議解決方案

分別檢查Logstash是否與源端和目標端服務在同一網路下。

說明

阿里雲Logstash和Elasticsearch服務部署在專用網路環境下,建議您將業務部署在相同的專用網路下。

源端服務在公網環境下,而Logstash在專用網路環境下。

選擇以下任意一種方式處理:

  • 藉助網路產品功能,打通網路環境。

  • 參見配置NAT公網資料轉送,配置NAT Gateway實現公網資料轉送。

  • 重新購買同一專用網路下的Logstash和Elasticsearch執行個體,並重新設定管道。

檢查NAT配置是否錯誤。

  • NAT條目地址或連接埠定義錯誤。

  • NAT Gateway類型不符合情境。

根據具體情況,按照以下方式處理:

  • 檢查NAT條目地址和連接埠,確保網路互連。

  • SNAT和DNAT使用情境不一樣,結合業務情境選擇正確的網關轉換方式:

    • SNAT:Logstash主動訪問公網。

    • DNAT:公網服務向Logstash節點推送資料。

檢查是否上傳了正確的JDBC驅動外掛程式。

PolarDB資料同步情境中,使用高版本的JDBC驅動,日誌無報錯,但資料寫不到目標端,換成低版本後正常。

選擇正確版本的JDBC驅動,詳細資料請參見配置擴充檔案

檢查白名單或安全性群組是否有限制。

通過Filebeat將資料擷取到Logstash中處理,Filebeat部署在使用者側ECS上,但ECS未在安全性群組開放監聽連接埠。

根據具體情況,按照以下方式處理:

檢查Logstash管道配置的源端或目標端是否涉及到RAM使用者未授權,導致RAM使用者無法訪問對應服務。

  • Logstash的output配置中指定了RAM使用者訪問Elasticsearch ,但Elasticsearch上未對RAM使用者佈建索引許可權。

  • Logstash主日誌報錯401。

根據具體情況,按照以下方式處理:

  • 為RAM使用者授予對應的許可權,具體操作請參見為RAM使用者授權

  • 源端和目標端的使用者名稱和密碼使用正確,並且密碼中不能包含特殊字元。如果密碼中包含特殊字元,請修改源端或目標端的密碼,請參見重設執行個體訪問密碼

管道配置錯誤

排查方案

常見錯誤案例

建議解決方案

參見查詢日誌,查看Logstash的主日誌,檢查日誌是否存在報錯。

未安裝外掛程式。例如日誌中出現Couldn't find any output plugin named 'file_extend'錯誤提示時,說明叢集中沒有安裝logstash-output-file_extend外掛程式。

選擇以下任意一種方式處理:

  • 安裝外掛程式。

  • 在管道配置中,刪除該外掛程式的配置資訊。

配置中存在隱藏的特殊字元。

手動輸入配置。

filter過濾代碼有誤,例如ruby代碼存在錯誤。

選擇以下任意一種方式處理:

  • 將filter模組配置精簡到原始配置,逐步增加過濾配置,找到根因。並根據實際情況處理。

  • 藉助第三方調試工具,調試正確後再上線。

管道參數名或參數值寫入錯誤。例如logstash-output-elasticsearch外掛程式中的hosts寫成了host、RDS執行個體名稱不正確等。

參見Logstash官方文檔阿里雲Elasticseatch官方最佳實務文檔編寫管道配置。

Logstash和源端或目標端連線逾時。例如無法訪問Elasticsearch時,會出現Elasticsearch Unreachable: [http://xxxx:9200/][Manticore::ConnectTimeout] connect timed out的錯誤提示。

確保Logstash和Elasticsearch網路互連,並輸入正確的源端和目標端地址。

Elasticsearch開啟了HTTPS協議,但Logstash管道配置時使用了http

修改管道配置,使用與源端和目標端相同的訪問協議。

負載問題

排查方案

常見錯誤案例

建議解決方案

參見叢集監控章節,檢查節點磁碟使用率是否過高。

  • 在管道配置中,指定隊列類型為永久型(PERSISTED),資料會永久儲存在磁碟上,隨著資料的積累,導致磁碟被打滿。

  • 管道output配置中指定了stdout{}

根據具體情況,按照以下方式處理:

  • 將Logstash管道隊列類型指定為預設的記憶體型(MEMORY),詳細資料請參見通過設定檔管理管道

    重要

    由於阿里雲Logstash暫時沒有清理磁碟的入口,因此當您遇到磁碟打滿的問題時,需要技術人員在後端為您處理。

  • 刪除管道output配置中的stdout{}

    重要

    管道output配置不支援定義stdout{},否則會導致磁碟使用率過高的問題。

參見叢集監控章節,檢查節點記憶體是否溢出OOM(Out Of Memory)。

記憶體OOM,節點未拉起。

在控制台重啟對應節點。

檢查源端或目標端是否存在負載問題。

Elasticsearch叢集不健康,影響寫入。

暫停寫入,優先恢複叢集健康,建議擴容。

管道正常啟動,但無資料寫入目標端

排查方案

常見錯誤案例

建議解決方案

參見使用Logstash管道配置調試功能,開啟Logsatsh的管道配置調試功能(需要安裝logstash-output-file_extend外掛程式),查看調試日誌,判斷是否有資料流入Logstash服務:

  • 無資料流入Logstash:檢查源端配置資訊是否正確。

  • 有資料流入Logstash:檢查目標端配置資訊是否正確。

無資料流入Logstash:

  • 源端配置資訊中存在阿里雲AccessKey資訊,但AccessKey資訊已經失效。

  • 源端無即時資料產生,例如Filebeat即時採集檔案資料,檔案無新資料產生。

根據具體情況,選擇以下方式處理:

  • 檢查配置資訊,並修改不準確的資訊。

  • 如果Logstash使用了即時資料流外掛程式,需要確保源端存在即時寫入的資料。

有資料流入Logstash:

  • Elasticsearch執行個體未開啟自動建立索引功能。

  • 目標端禁止寫入,例如Elasticsearch索引禁止寫入。

根據具體情況,選擇以下方式處理:

  • 開啟Elasticsearch執行個體的自動建立索引功能。

  • 確保目標端的可寫性。

服務正常缺少資料

排查方案

常見錯誤案例

建議解決方案

根據管道配置情境,結合管道外掛程式屬性排查:

  • 檢查JDBC查詢語句是否正確。

  • 檢查管道配置中的logstash-input-elasticsearch外掛程式是否存在即時寫入的資料。

JDBC情境:

  • 通過查詢語句查詢的結果中缺少資料。

  • 追蹤欄位為非遞增資料,例如時間欄位或ID。

  • JDBC和Elasticsearch叢集不在同一時區。

根據具體情況,選擇以下方式處理:

  • 在源端調試查詢語句。

  • 檢查追蹤欄位類型是否為官方建議欄位類型,優先將欄位類型設定為numerictimestamp

  • 檢查時區差異性,並根據檢查結果進行相應處理。

使用logstash-input-elasticsearch外掛程式情境:

  • 源端資料存在即時寫入。

  • 管道配置中,定時時間設定較小,資料存在大量的寫入,導致目標端資料堆積。

Logstash不適用於資料即時同步情境。如果源端存在即時寫入,建議通過拉長定時查詢時間,減少頻繁在源端和目標端查詢和寫入。

參見查詢日誌,查看Logstash慢日誌,檢查是否存在寫入慢的問題。

源端和目標端壓力均未達到瓶頸,但Logstash的管道背景工作執行緒數使用了官方的預設值。

增加Logstash的管道批大小和背景工作執行緒數,詳細資料請參見通過設定檔管理管道