全部产品
Search
文档中心

检索分析服务Elasticsearch版:通过阿里云Logstash将自建Elasticsearch数据迁移至阿里云

更新时间:Mar 18, 2024

当您需要将自建Elasticsearch中的数据迁移到阿里云Elasticsearch中时,可以通过阿里云Logstash的管道配置功能实现。本文介绍具体的实现方法。

使用限制

  • 自建Elasticsearch集群所在的ECS的网络类型必须是专有网络,不支持Classiclink方式打通的ECS。

  • 由于阿里云Logstash实例部署在专有网络下,如果自建Elasticsearch集群与阿里云Logstash集群在同一专有网络下,可直接配置;如果不在,需要通过配置NAT网关实现与公网的连通,具体操作请参见配置NAT公网数据传输

  • 自建Elasticsearch集群所在的ECS的安全组不能限制Logstash集群的各节点IP(可在基本信息页面查看),并且需要开启9200端口。

  • 本文以自建Elasticsearch 5.6.16 > 阿里云Logstash 6.7.0 > 阿里云Elasticsearch 6.7.0为例,提供的脚本仅适用于该数据迁移方案,其他方案不保证兼容。如果您使用的是其他方案,可参见产品兼容性判断是否存在兼容性问题。如果存在,可升级实例版本或新购实例。

操作流程

  1. 步骤一:环境准备

  2. 步骤二:配置并运行Logstash管道

  3. 步骤三:查看数据迁移结果

步骤一:环境准备

  1. 搭建自建Elasticsearch集群。

    建议您使用阿里云ECS搭建自建Elasticsearch集群,本文以5.6.16版本为例,具体操作请参见安装并运行Elasticsearch

  2. 创建阿里云Logstash实例。

    建议创建与部署自建Elasticsearch集群的ECS实例在同一专有网络下的Logstash实例,具体操作请参见创建阿里云Logstash实例

  3. 创建目标阿里云Elasticsearch实例,并开启实例的自动创建索引功能。

    • 建议创建与Logstash实例在同一专有网络下,且版本相同的Elasticsearch实例。本文以6.7.0版本为例,具体操作请参见创建阿里云Elasticsearch实例

    • 开启自动创建索引功能的具体操作,请参见配置YML参数

      说明

      因为Logstash只同步数据,不同步数据结构特征,所以开启自动创建索引功能后,可能会存在同步前后数据结构不一致的情况。如果您需要同步前后的数据结构一致,那么建议您先手动在目标端Elasticsearch中创建空索引,创建时,复制源端的mappingssettings结构,并合理分配shard数量。

步骤二:配置并运行Logstash管道

  1. 进入阿里云Elasticsearch控制台的Logstash页面
  2. 进入目标实例。
    1. 在顶部菜单栏处,选择地域。
    2. Logstash实例中单击目标实例ID。
  3. 在左侧导航栏,单击管道管理

  4. 单击创建管道

  5. 创建管道任务页面,输入管道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服务的用户名。

    重要
    • userpassword为必选参数。如果自建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配置文件说明

  6. 单击下一步,配置管道参数。

    管道参数配置

    参数

    说明

    管道工作线程

    并行执行管道的Filter和Output的工作线程数量。当事件出现积压或CPU未饱和时,请考虑增大线程数,更好地使用CPU处理能力。默认值:实例的CPU核数。

    管道批大小

    单个工作线程在尝试执行Filter和Output前,可以从Input收集的最大事件数目。较大的管道批大小可能会带来较大的内存开销。您可以设置LS_HEAP_SIZE变量,来增大JVM堆大小,从而有效使用该值。默认值:125。

    管道批延迟

    创建管道事件批时,将过小的批分派给管道工作线程之前,要等候每个事件的时长,单位为毫秒。默认值:50ms。

    队列类型

    用于事件缓冲的内部排队模型。可选值:

    • MEMORY:默认值。基于内存的传统队列。

    • PERSISTED:基于磁盘的ACKed队列(持久队列)。

    队列最大字节数

    请确保该值小于您的磁盘总容量。默认值:1024 MB。

    队列检查点写入数

    启用持久性队列时,在强制执行检查点之前已写入事件的最大数目。设置为0,表示无限制。默认值:1024。

    警告

    配置完成后,需要保存并部署才能生效。保存并部署操作会触发实例重启,请在不影响业务的前提下,继续执行以下步骤。

  7. 单击保存或者保存并部署

    • 保存:将管道信息保存在Logstash里并触发实例变更,配置不会生效。保存后,系统会返回管道管理页面。可在管道列表区域,单击操作列下的立即部署,触发实例重启,使配置生效。

    • 保存并部署:保存并且部署后,会触发实例重启,使配置生效。

步骤三:查看数据迁移结果

  1. 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。
    登录Kibana控制台的具体操作,请参见登录Kibana控制台
    说明 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。
  2. 在左侧导航栏,单击Dev Tools
  3. Console中,执行GET /_cat/indices?v命令,查看迁移成功的索引。

    迁移成功的索引

常见问题

  • Q:自建Elasticsearch所在的ECS与阿里云Logstash不在同一账号下,迁移数据时,如何配置网络互通?

    A:由于ECS和Logstash不在同一账号下,那么两者的专有网络必然不同,因此需要配置两个专有网络互通。可通过云企业网来实现,具体操作请参见步骤三:加载网络实例

  • Q:Logstash数据写入时出现问题,如何处理?

    A:参见Logstash数据写入问题排查方案进行排查处理。