全部產品
Search
文件中心

Elasticsearch:通過阿里雲Logstash將自建Elasticsearch資料移轉至阿里雲

更新時間:Jun 30, 2024

當您需要將自建Elasticsearch中的資料移轉到Elasticsearch中時,可以通過阿里雲Logstash的管道配置功能實現。本文介紹具體的實現方法。

使用限制

  • 自建Elasticsearch叢集所在的ECS的網路類型必須是專用網路,不支援Classiclink方式打通的ECS。

  • 由於阿里雲Logstash執行個體部署在專用網路下,如果自建Elasticsearch叢集與阿里雲Logstash叢集在同一專用網路下,可直接配置;如果不在,需要通過配置NAT Gateway實現與公網的連通,具體操作請參見配置NAT公網資料轉送

  • 自建Elasticsearch叢集所在的ECS的安全性群組不能限制Logstash叢集的各節點IP(可在基本資料頁面查看),並且需要開啟9200連接埠。

  • 本文以自建Elasticsearch 5.6.16 > 阿里雲Logstash 6.7.0 > Elasticsearch 6.7.0為例,提供的指令碼僅適用於該資料移轉方案,其他方案不保證相容。如果您使用的是其他方案,可參見產品相容性判斷是否存在相容性問題。如果存在,可升級執行個體版本或新購執行個體。

操作流程

  1. 步驟一:環境準備

  2. 步驟二:配置並運行Logstash管道

  3. 步驟三:查看資料移轉結果

步驟一:環境準備

  1. 搭建自建Elasticsearch叢集。

    建議您使用阿里雲ECS搭建自建Elasticsearch叢集,本文以5.6.16版本為例,具體操作請參見安裝並運行Elasticsearch

  2. 建立阿里雲Logstash執行個體。

    建議建立與部署自建Elasticsearch叢集的ECS執行個體在同一專用網路下的Logstash執行個體,具體操作請參見建立阿里雲Logstash執行個體

  3. 建立目標Elasticsearch執行個體,並開啟執行個體的自動建立索引功能。

    • 建議建立與Logstash執行個體在同一專用網路下,且版本相同的Elasticsearch執行個體。本文以6.7.0版本為例,具體操作請參見建立Elasticsearch執行個體

    • 開啟自動建立索引功能的具體操作,請參見配置YML參數

      說明

      因為Logstash只同步資料,不同步資料結構特徵,所以開啟自動建立索引功能後,可能會存在同步前後資料結構不一致的情況。如果您需要同步前後的資料結構一致,那麼建議您先手動在目標端Elasticsearch中建立空索引,建立時,複製源端的mappingssettings結構,併合理分配shard數量。

步驟二:配置並運行Logstash管道

  1. 進入Elasticsearch控制台的Logstash頁面
  2. 進入目標執行個體。
    1. 在頂部功能表列處,選擇地區。
    2. Logstash執行個體中單擊目標執行個體ID。
  3. 在左側導覽列,單擊管道管理

  4. 單擊建立管道

  5. 建立管道任務頁面,輸入管道ID並配置管道。

    本文使用的管道配置如下。

    input {
      elasticsearch {
        hosts => ["http://<自建Elasticsearch Master節點的IP地址>:9200"]
        user => "elastic"
        index => "*,-.monitoring*,-.security*,-.kibana*"
        password => "your_password"
        docinfo => true
      }
    }
    filter {
    }
    output {
      elasticsearch {
        hosts => ["http://es-cn-mp91cbxsm000c****.elasticsearch.aliyuncs.com:9200"]
        user => "elastic"
        password => "your_password"
        index => "%{[@metadata][_index]}"
        document_type => "%{[@metadata][_type]}"
        document_id => "%{[@metadata][_id]}"
      }    
      file_extend {
            path => "/ssd/1/ls-cn-v0h1kzca****/logstash/logs/debug/test"
        }
    }
    表 1. 參數說明

    參數

    描述

    hosts

    自建或Elasticsearch服務的訪問地址。input中為http://<自建Elasticsearch Master節點的IP地址>:<連接埠>output中為http://<Elasticsearch執行個體ID>.elasticsearch.aliyuncs.com:9200

    重要

    配置時,請按照格式要求,將<自建Elasticsearch Master節點的IP地址><連接埠><Elasticsearch執行個體ID>替換為對應的值。

    user

    訪問自建或Elasticsearch服務的使用者名稱。

    重要
    • userpassword為必選參數。如果自建Elasticsearch未安裝X-Pack,可將這兩個參數值設定為空白。

    • 訪問Elasticsearch執行個體的使用者名稱預設為elastic(本文以此為例)。如果想使用自建使用者,需要為自建使用者指派相應的角色和許可權,詳情請參見通過Elasticsearch X-Pack角色管理實現使用者權限管控

    password

    訪問自建或Elasticsearch服務的密碼。

    index

    指定同步索引名。input中設定為*,-.monitoring*,-.security*,-.kibana*,表示同步除過.開頭的系統索引;output中設定為%{[@metadata][_index]},表示匹配中繼資料中的index,即Elasticsearch產生的索引和自建Elasticsearch的索引相同。

    docinfo

    設定為true,Elasticsearch會提取自建Elasticsearch文檔的中繼資料資訊,例如index、type和id。

    document_type

    設定為%{[@metadata][_type]}。表示匹配中繼資料中索引的type,即Elasticsearch產生的索引的類型和自建Elasticsearch的索引類型相同。

    說明

    如果源端為ES 6.x版本,目標端為ES 7.x版本,document_type需要設定為_doc

    document_id

    設定為%{[@metadata][_id]},表示匹配中繼資料中文檔的id,即Elasticsearch產生的文檔ID和自建Elasticsearch的文檔ID相同。

    file_extend

    可選,用來開啟調試日誌功能,並通過path參數配置調試日誌的輸出路徑。建議您配置該參數,配置後,可直接在控制台上查看輸出結果。如果未配置,需要去目標端確認輸出結果,再返回控制台修改,這樣會耗費大量的時間和人力。詳細資料,請參見使用Logstash管道配置調試功能

    重要

    使用file_extend參數前,需要先安裝logstash-output-file_extend外掛程式。具體操作,請參見安裝或卸載外掛程式。其中的path參數預設為系統指定路徑,請勿修改。您也可以單擊開啟配置調試擷取path路徑。

    Elasticsearch input外掛程式可以根據配置的查詢語句,從Elasticsearch叢集讀取文檔資料,適用於大量匯入測試日誌等操作。預設讀取完資料後,同步動作會自動關閉,而阿里雲Logstash需保證進程一直運行,關閉後將會重新啟動進程,導致某些單一任務情境(如logstash input es)存在重複寫資料的情況。設定長時間範圍的定時任務可繞過寫重複的情況,如每年3月5日13點20分觸發任務執行,執行完第一次任務後停止管道運行,可避免重複寫情況。可以通過cron文法配合schedule參數實現,詳情請參見Logstash官網Scheduling介紹

    例如,設定3月5日13點20分執行任務:

    schedule => "20 13 5 3 *"

    更多Config配置說明,請參見Logstash設定檔說明

  6. 單擊下一步,配置管道參數。

    管道參數配置

    參數

    說明

    管道背景工作執行緒

    並存執行管道的Filter和Output的背景工作執行緒數量。當事件出現積壓或CPU未飽和時,請考慮增大線程數,更好地使用CPU處理能力。預設值:執行個體的CPU核心數。

    管道批大小

    單個背景工作執行緒在嘗試執行Filter和Output前,可以從Input收集的最大事件數目。較大的管道批大小可能會帶來較大的記憶體開銷。您可以設定LS_HEAP_SIZE變數,來增大JVM堆大小,從而有效使用該值。預設值:125。

    管道批延遲

    建立管道事件批時,將過小的批指派給管道背景工作執行緒之前,要等候每個事件的時間長度,單位為毫秒。預設值:50ms。

    隊列類型

    用於事件緩衝的內部排隊模型。可選值:

    • MEMORY:預設值。基於記憶體的傳統隊列。

    • PERSISTED:基於磁碟的ACKed隊列(持久隊列)。

    隊列最大位元組數

    請確保該值小於您的磁碟總容量。預設值:1024 MB。

    隊列檢查點寫入數

    啟用持久性隊列時,在強制執行檢查點之前已寫入事件的最大數目。設定為0,表示無限制。預設值:1024。

    警告

    配置完成後,需要儲存並部署才會生效。儲存並部署操作會觸發執行個體重啟,請在不影響業務的前提下,繼續執行以下步驟。

  7. 單擊儲存或者儲存並部署

    • 儲存:將管道資訊儲存在Logstash裡並觸發執行個體變更,配置不會生效。儲存後,系統會返回管道管理頁面。可在管道列表地區,單擊操作列下的立即部署,觸發執行個體重啟,使配置生效。

    • 儲存並部署:儲存並且部署後,會觸發執行個體重啟,使配置生效。

步驟三:查看資料移轉結果

  1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
    登入Kibana控制台的具體操作,請參見登入Kibana控制台
    說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
  2. 在左側導覽列,單擊Dev Tools
  3. Console中,執行GET /_cat/indices?v命令,查看遷移成功的索引。

    遷移成功的索引

常見問題

  • Q:自建Elasticsearch所在的ECS與阿里雲Logstash不在同一帳號下,遷移資料時,如何配置網路互連?

    A:由於ECS和Logstash不在同一帳號下,那麼兩者的專用網路必然不同,因此需要配置兩個專用網路互連。可通過雲企業網來實現,具體操作請參見步驟三:載入網路執行個體

  • Q:Logstash資料寫入時出現問題,如何處理?

    A:參見Logstash資料寫入問題排查方案進行排查處理。