Elasticsearch 数据迁移¶
概述¶
使用日志服务 CLI 可以方便您快速将 Elasticsearch 中的数据导入日志服务。
配置¶
aliyun-log-cli.readthedocs.io 无法正常显示表格,请参阅tutorial_es_migration_cn.md
数据映射¶
logstore - index¶
CLI 默认会将 Elasticsearch index 中的数据迁移至同名的 logstore 中,当然您也可以通过参数 logstore_index_mappings 指定将多个 index 中的数据迁移至一个 logstore。
logstore 不必事先创建,如果 CLI 发现目标 logstore 未创建,会为您在指定的 project 下创建好。
数据类型映射¶
CLI 会根据 Elasticsearch 的数据类型 在index 对应的 logstore 中创建好索引。
- Core datatypes
Elasticsearch | 日志服务 |
---|---|
text | text |
keyword | text,不分词 |
long | long |
integer | long |
short | long |
byte | long |
double | double |
float | double |
half_float | double |
scaled_float | double |
date | text |
boolean | text,不分词 |
binary | n/a |
integer_range | json |
float_range | json |
long_range | json |
double_range | json |
date_range | json |
ip_range | text,不分词 |
- Complex datatypes
Elasticsearch | 日志服务 |
---|---|
Array datatype | n/a |
Object datatype | json |
Nested datatype | n/a |
- Geo datatypes
Elasticsearch | 日志服务 |
---|---|
Geo-point datatype | text |
Geo-Shape datatype | text |
- Specialised datatypes
Elasticsearch | 日志服务 |
---|---|
IP datatype | text,不分词 |
Completion datatype | n/a |
Token count datatype | n/a |
mapper-murmur3 | n/a |
Percolator type | n/a |
join datatype | n/a |
抓取模式¶
- 为了提高吞吐量,CLI 会为每个 index 的每个 shard 创建一个数据迁移任务,并提交到内部进程池中执行。
- 当全部任务执行完成后,CLI 才会退出。
任务执行情况展示¶
CLI 默认把任务执行情况存储在~/aliyunlogcli.log中, 也可以配置~/.aliyunlogcli中__loggging__来调整信息存储位置和格式:
[__logging__]
filename=~/es_migration.log
level=info
- 单个迁移任务执行结果展示。
========Tasks Info========
...
task_id=1, slice_id=1, slice_max=10, hosts=localhost:9200, indexes=None, query=None, project=test-project, time_cost_in_seconds=128.71100688, status=CollectionTaskStatus.SUCCESS, count=129330, message=None
...
编号为 1 的迁移任务执行成功,耗时 128.7s,迁移文档数量 129330。
- 迁移任务执行结果汇总信息。
========Summary========
Total started task count: 10
Successful task count: 10
Failed task count: 0
Total collected documentation count: 1000000
MigrationManager 总共启动了 10 个数据数据迁移任务,全部执行成功。迁移文档总数 1000000。
使用样例¶
- 将 hosts 为
localhost:9200
的 Elasticsearch 中的所有文档导入日志服务的项目project1
中。
aliyunlog log es_migration --hosts=localhost:9200 --project_name=project1
- 指定将 Elasticsearch 中索引名以
myindex_
开头的数据写入日志库logstore1
,将索引index1,index2
中的数据写入日志库logstore2
中。
aliyunlog log es_migration --hosts=localhost:9200,other_host:9200 --project_name=project1 --logstore_index_mappings='{"logstore1": "myindex_*", "logstore2": "index1,index2"}}'
- 使用参数 query 指定从 Elasticsearch 中抓取
title
字段等于python
的文档,并使用文档中的字段date1
作为日志的 time 字段。
aliyunlog log es_migration --hosts=localhost:9200 --project_name=project1 --query='{"query": {"match": {"title": "python"}}}'
使用 HTTP 基本认证
user:secret@localhost:9200
,从 Elasticserch 中迁移数据。aliyunlog log es_migration --hosts=user:secret@localhost:9200 --project_name=project1