當您需要將自建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為例,提供的指令碼僅適用於該資料移轉方案,其他方案不保證相容。如果您使用的是其他方案,可參見產品相容性判斷是否存在相容性問題。如果存在,可升級執行個體版本或新購執行個體。
操作流程
步驟一:環境準備
搭建自建Elasticsearch叢集。
建議您使用阿里雲ECS搭建自建Elasticsearch叢集,本文以5.6.16版本為例,具體操作請參見安裝並運行Elasticsearch。
建立阿里雲Logstash執行個體。
建議建立與部署自建Elasticsearch叢集的ECS執行個體在同一專用網路下的Logstash執行個體,具體操作請參見建立阿里雲Logstash執行個體。
建立目標Elasticsearch執行個體,並開啟執行個體的自動建立索引功能。
建議建立與Logstash執行個體在同一專用網路下,且版本相同的Elasticsearch執行個體。本文以6.7.0版本為例,具體操作請參見建立Elasticsearch執行個體。
開啟自動建立索引功能的具體操作,請參見配置YML參數。
說明因為Logstash只同步資料,不同步資料結構特徵,所以開啟自動建立索引功能後,可能會存在同步前後資料結構不一致的情況。如果您需要同步前後的資料結構一致,那麼建議您先手動在目標端Elasticsearch中建立空索引,建立時,複製源端的mappings和settings結構,併合理分配shard數量。
步驟二:配置並運行Logstash管道
- 進入Elasticsearch控制台的Logstash頁面。
- 進入目標執行個體。
- 在頂部功能表列處,選擇地區。
- 在Logstash執行個體中單擊目標執行個體ID。
在左側導覽列,單擊管道管理。
單擊建立管道。
在建立管道任務頁面,輸入管道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服務的使用者名稱。
重要user和password為必選參數。如果自建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設定檔說明。
單擊下一步,配置管道參數。
參數
說明
管道背景工作執行緒
並存執行管道的Filter和Output的背景工作執行緒數量。當事件出現積壓或CPU未飽和時,請考慮增大線程數,更好地使用CPU處理能力。預設值:執行個體的CPU核心數。
管道批大小
單個背景工作執行緒在嘗試執行Filter和Output前,可以從Input收集的最大事件數目。較大的管道批大小可能會帶來較大的記憶體開銷。您可以設定LS_HEAP_SIZE變數,來增大JVM堆大小,從而有效使用該值。預設值:125。
管道批延遲
建立管道事件批時,將過小的批指派給管道背景工作執行緒之前,要等候每個事件的時間長度,單位為毫秒。預設值:50ms。
隊列類型
用於事件緩衝的內部排隊模型。可選值:
MEMORY:預設值。基於記憶體的傳統隊列。
PERSISTED:基於磁碟的ACKed隊列(持久隊列)。
隊列最大位元組數
請確保該值小於您的磁碟總容量。預設值:1024 MB。
隊列檢查點寫入數
啟用持久性隊列時,在強制執行檢查點之前已寫入事件的最大數目。設定為0,表示無限制。預設值:1024。
警告配置完成後,需要儲存並部署才會生效。儲存並部署操作會觸發執行個體重啟,請在不影響業務的前提下,繼續執行以下步驟。
單擊儲存或者儲存並部署。
儲存:將管道資訊儲存在Logstash裡並觸發執行個體變更,配置不會生效。儲存後,系統會返回管道管理頁面。可在管道列表地區,單擊操作列下的立即部署,觸發執行個體重啟,使配置生效。
儲存並部署:儲存並且部署後,會觸發執行個體重啟,使配置生效。
步驟三:查看資料移轉結果
- 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。登入Kibana控制台的具體操作,請參見登入Kibana控制台。說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
- 在左側導覽列,單擊Dev Tools。
在Console中,執行
GET /_cat/indices?v
命令,查看遷移成功的索引。
常見問題
Q:自建Elasticsearch所在的ECS與阿里雲Logstash不在同一帳號下,遷移資料時,如何配置網路互連?
A:由於ECS和Logstash不在同一帳號下,那麼兩者的專用網路必然不同,因此需要配置兩個專用網路互連。可通過雲企業網來實現,具體操作請參見步驟三:載入網路執行個體。
Q:Logstash資料寫入時出現問題,如何處理?
A:參見Logstash資料寫入問題排查方案進行排查處理。