文章目錄
使用 Elasticdump 來匯入與匯出 Elasticsearch index
外網的測試環境因為有外部服務介接的關係,有較多機會出現 exception,為了方便 debug,所以想要將外網的 log 倒回內網
之前確實也真的將原始 log 搬回內網,但這麼一來不僅需要 sync log files 還需要額外的 fluentd 來 parse log 後再重新打入 Elasticsearch
所有動作依照外網環境再執行一次,整個過程不是有錯,但總覺得多耗費了一次工,所以興起將處理過後的 elasticsearch index sync 回內網的想法,快速紀錄一下做法
基本環境說明
- macOS Big Sur 11.2.3
docker desktop 3.2.2 (61853)
- fluent/fluentd:v1.12.0-debian-1.0
- yowko/fluentd-elasticsearch:1.0.0
- kibana:7.6.2
- elasticsearch:7.6.2
node 15.12.0
npm 7.6.3
elasticdump 6.66.1s
使用方式
安裝 elasticdump
npm install elasticdump -g
匯出 Elasticsearch index
這邊以匯出為 json 檔案為例,可以直接匯入 Elasticsearch 或是存成 gzip
語法
這邊
--input
指的是想要匯出資料的 Elasticsearch url,--output
則是檔案elasticdump \ --input={protocol}://[{username}:{password}@]{host}:{port}/{index} \ --output={FilePath} \ --type=data
範例
elasticdump \ --input=http://admin:pass.123@localhost:9200/yowkotest.log \ --output=yowkotest.json \ --type=data \
匯入 Elasticsearch index
這邊我沒看到官網文件提到可以直接使用 gzip
語法
這邊
--input
指的是想要匯入資料的檔案,--output
則是匯入資料的目標 Elasticsearch urlelasticdump \ --input={FilePath} \ --output={protocol}://[{username}:{password}@]{host}:{port}/{index}
範例
elasticdump \ --input=yowkotest.json \ --output=http://admin:pass.123@localhost:9200/fromimport
心得
個人覺得 elasticdump 的設計很好用,匯出與匯入都可以使用相同參數名稱,在不同情境下參數名稱可以有不同的意義,相當彈性,今天的筆記範例是先由 Elasticsearch 匯出檔案再使用檔案匯入 Elasticsearch,其實也支援直接由 Elasticsearch 匯入 Elasticsearch,不同的情境但完全可以用相同參數名稱搞定,只需要調整參數設定值
poc 時測試下來覺得 batch size (--limit
預設是 100
) 與 request 間隔 (--concurrencyInterval
預設是 5000
毫秒) 需要調整,以預設值測試的結果:約 13mb 的 index 需要 20 分鐘才能匯出,也需要差不多 20 分鐘才能匯入;我嘗試調整成 --limit=10000
與 --concurrencyInterval=1000
約在 3 分鐘,不過實際的時間與資料的狀況有關,使用前建議要重新調整參數與評估耗時,這邊只是提醒有機會縮短匯出匯入的時間
參考資訊
文章作者 Yowko Tsai
上次更新 2021-07-30
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。