日誌服務相比自建 ELK 在功能、性能、規模和成本等方面有諸多優點,參閱自建ELK vs 日誌服務(SLS)全方位對比。對於已經存儲在 Elasticsearch 中的數據,用戶只須要一行命令就能方便地將數據遷移至日誌服務。html
數據遷移顧名思義是指將數據從某個數據源遷移到另一個數據源。根據不一樣數據源存儲引擎是否相同,可分爲同源遷移和異構遷移。根據遷移類型的不一樣,可分爲全量遷移和增量遷移。
目前,各大雲計算廠商都提供了各自的數據遷移方案,如 AWS DMS,Azure DMA,阿里雲 DTS。這些方案主要專一於解決關係型數據庫間的數據遷移問題,還未覆蓋到 Elasticsearch 場景。python
針對 Elasticsearch 場景,日誌服務團隊提供了基於 aliyun-log-python-sdk 和 aliyun-log-cli 的解決方案。該方案主要針對歷史數據作全量遷移。nginx
Elasticsearch 數據模型中包含 - 索引(index),類型(type),文檔(document),映射(mapping),數據類型(field datatypes)等概念,它們和日誌服務中數據模型的映射關係以下表所示。git
Elasticsearch | 日誌服務 | 說明 |
---|---|---|
index | logstore | 容許用戶將多個 index 上的數據遷移至一個 logstore。 |
type | logItem 中的字段 __tag__:_type | |
document | logItem | Elasticsearch 的文檔和日誌服務中的日誌一一對應。 |
mapping | logstore 的索引 | 工具默認狀況下會爲您自動建立好索引。 |
field datatypes | logItem 數據類型 | 具體映射關係參考數據類型映射。 |
遷移命令github
aliyun log es_migration --hosts=<your_es> --project_name=<your_project> --indexes=filebeat-* --logstore_index_mappings='{"nginx-access": "filebeat-*"}' --time_reference=@timestamp
1.以天爲單位統計各狀態碼的數量。數據庫
* | SELECT date_trunc('day' , __time__) as t, "nginx.access.response_code" AS status, COUNT(1) AS count GROUP BY status, t ORDER BY t ASC
2.統計請求分佈在哪些國家。app
* | SELECT ip_to_country("nginx.access.remote_ip") as country, count(1) as count GROUP BY country
工具的性能主要取決於從 Elasticsearch 中讀取數據的速度以及向日志服務寫入數據的速度。elasticsearch
Elasticsearch 中每一個 index 由多個 shard 組成。工具會爲每一個 index 的每一個 shard 建立一個數據遷移任務,並提交到內部進程池中執行(進程池大小可經過參數 pool_size 指定)。理論上目標 index 的 shard 越多,總體吞吐量越高。ide
日誌服務也有 shard 的概念,單個 shard 提供 5MB/s,500次/s 的寫入能力。您能夠經過爲 logstore 開啓更多的 shard 來提升向日志服務寫入數據的速度。工具
在 Elasticsearch 目標 index 只有1個 shard,日誌服務 logstore 也只有1個 shard,單個文檔大小 100B 的狀況下,平均數據遷移速率爲 3MB/s。