本文介绍通过阿里云LogstashService(简称Logstash),将自建Elasticsearch中的数据迁移到阿里云Elasticsearch(简称ES)中的方法。

前提条件

  • 已经准备了自建ES集群。
    如果还没有自建ES集群,建议您使用阿里云ECS进行搭建,详情请参见安装并运行Elasticsearch
    注意
    • 自建ES所在的ECS的网络类型必须是专有网络VPC(Virtual Private Cloud),不支持Classiclink方式打通的ECS。
    • 由于阿里云Logstash实例部署在VPC下,如果自建ES与阿里云Logstash在同一VPC下,可直接进行配置;如果不在同一VPC下,需要通过配置NAT网关实现与公网的连通,详情请参见NAT公网数据传输配置
    • 自建ES所在的ECS的VPC安全组不能限制阿里云Logstash实例的各节点IP(可在实例基本信息页面查看),并且需要开启9200端口。
    • 本文以自建ES 5.6.16 > 阿里云Logstash 6.7 > 阿里云ES 6.7为例,提供的脚本仅适用于该数据迁移方案,其他方案不保证兼容。
  • 已经创建了阿里云Logstash实例。

    详情请参见创建阿里云LogstashService实例

  • 已经创建了目标阿里云ES实例,并且与阿里云Logstash实例在同一区域、同一可用区、同一VPC下,且版本相同。

    详情请参见创建阿里云Elasticsearch实例

  • 已经开启了目标阿里云ES实例的自动创建索引功能。

    详情请参见开启自动创建索引

操作步骤

  1. 登录阿里云Logstash控制台
  2. 在顶部菜单栏处,选择地域。
  3. 实例列表页面,单击实例ID/名称链接,或者单击操作栏下的实例管理
  4. 单击左侧导航栏的管道管理
  5. 管道列表区域中,单击创建管道
    创建管道
  6. 创建管道任务页面,进行Config配置。
    本文使用的Config配置如下。
    input {
        elasticsearch {
        hosts => ["http://<自建ES的IP地址>:9200"]
        user => "elastic"
        index => "*"
        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]}"
      }
    }
    表 1. input参数说明
    参数 描述
    hosts 自建ES或阿里云ES服务的访问地址。input中为http://<自建ES的IP地址>:<端口>output中为http://<阿里云ES实例ID>.elasticsearch.aliyuncs.com:9200
    user 访问自建ES或阿里云ES服务的用户名。
    password 访问自建ES或阿里云ES服务的密码。
    index 指定同步索引名。
    docinfo 设置为true,阿里云ES将会提取自建ES文档的元数据信息,例如index、type和id。
    说明 访问阿里云ES实例的账号默认为elastic(本文以此为例)。如果想使用自建用户,需要为自建用户分配相应的角色和权限,详情请参见创建角色创建用户

    output参数说明与input参数类似,其中将index设置为%{[@metadata][_index]},表示匹配元数据中的index,即阿里云ES生成的索引和自建ES的索引相同。

    Config配置详情请参见Logstash配置文件说明

  7. 单击下一步,配置管道参数。
    管道参数配置
    表 2. 管道配置参数说明
    参数 说明
    管道ID 必选,自定义输入。
    管道工作线程 并行执行管道的Filter和Output的工作线程数量。当事件出现积压或CPU未饱和时,请考虑增大线程数,更好地使用CPU处理能力。默认值:实例的CPU核数。
    管道批大小 单个工作线程在尝试执行Filter和Output前,可以从Input收集的最大事件数目。较大的管道批大小可能会带来较大的内存开销。您可以设置LS_HEAP_SIZE变量,来增大JVM堆大小,从而有效使用该值。默认值:125。
    管道批延迟 创建管道事件批时,将过小的批分派给管道工作线程之前,要等候每个事件的时长,单位为毫秒。默认值:50ms。
    队列类型 用于事件缓冲的内部排队模型。可选值:
    • memory:默认值。基于内存的传统队列。
    • persisted:基于磁盘的ACKed队列(持久队列)。
    队列最大字节数 请确保该值小于您的磁盘总容量。默认值:1024MB。
    队列检查点写入数 启用持久性队列时,在强制执行检查点之前已写入事件的最大数目。设置为0,表示无限制。默认值:1024。
    警告 配置完成后,需要进行保存和部署才能生效。保存和部署操作会触发实例变更,请在不影响业务的前提下,继续执行以下步骤。
  8. 单击保存或者保存并部署
    • 保存:将管道信息保存在Logstash里并触发实例变更,但不会触发配置。保存后,系统会返回管道管理页面。可在管道列表区域,单击操作栏下的立即部署,触发配置。
    • 保存并部署:保存并且部署后,才会真正触发配置(也会触发实例变更)。
  9. 结果验证。
    1. 登录目标阿里云ES实例的Kibana控制台。
      登录Kibana控制台具体步骤请参见登录Kibana控制台
    2. 单击左侧导航栏的Dev Tools(开发工具)。
    3. Console中,执行GET /_cat/indices?v命令,查看迁移成功的索引。
      迁移成功的索引