【玩转腾讯云】通过Logstash从阿里云ES迁移至腾讯云最佳实践

1、方案介绍

Logstash是一个开源的数据收集引擎,具有近时传输数据的能力。它可以统一过滤来自不同源的数据,并按照我们自定义的配置文件将过滤的数据输出到目标数据源中。本文介绍在腾讯云CVM上部署Logstash的方法,并演示如何使用Logstash从阿里云ES迁移数据到腾讯云ES中。

2、迁移版本匹配说明

由于腾讯云ES版本与阿里云ES版本不一致,需要选择兼容的版本进行迁移,本文支持的版本方案如下(其他方案不保证兼容):

• 阿里云ES 5.6 -> CVM(Logstash 6.0.x)-> 腾讯云ES 5.6.4

• 阿里云ES 6.3.2 -> CVM(Logstash 6.8.x)-> 腾讯云ES 6.4.3

• 阿里云ES 6.7.0/6.8.0 -> CVM(Logstash 6.8.x)-> 腾讯云ES 6.8.2

• 阿里云ES 7.4.0-> CVM(Logstash 7.6.x) -> 腾讯云ES 7.5.1(本文以此为例)

注意:由于腾讯云ES版本分别与阿里云ES版本不一致,所以建议您在大版本内进行数据同步,不建议跨大版本同步。关于Logstash版本选取详情,请参照官方说明:https://www.elastic.co/cn/support/matrix#matrix_compatibility

3、实施步骤

本案例以使用在腾讯云CVM上自建Logstash方式,将Elasticsearch索引从阿里云ES迁移至腾讯云ES中为例,具体实施步骤如下:

3.1、创建阿里云Elasticsearch实例

1) 创建阿里云ES实例,链接地址:https://common-buy.aliyun.com/new?spm=a2c4g.11186623.2.13.4afb1afbuP8ujq&commodityCode=elasticsearch&orderType=BUY

2) 开启公网访问地址,允许腾讯云CVM能够公网访问(在实际的生产环境中,可以先通过专线将腾讯云和阿里云的内网打通,再通过内网同步ES数据)。

开启公网访问

3) 创建模拟数据

在阿里云ES kibana 控制台,通过Dev Tools进行操作。以下示例创建了一个名为product_info的索引,指定分片数 和副本数量,索引映射。

代码语言:txt
复制
PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
      "properties": {
        "productName": {"type": "text","analyzer": "ik_smart"},
        "annual_rate":{"type":"keyword"},
        "describe": {"type": "text","analyzer": "ik_smart"}
      }
  }
}

在Kibana控制台中,执行以下命令创建文档并插入数据,使用批量插入数据的形式:

代码语言:txt
复制
POST /product_info/_doc/_bulk?pretty
{"index":{}}
{"productName":"大健康天天理财","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
{"index":{}}
{"productName":"西部通宝","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"安详畜牧产业","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
{"index":{}}
{"productName":"5G设备采购月月盈","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"新能源动力理财","annual rate":"3.0100%","describe":"30天定投产品推荐,最低8000起投,每天收益会消息推送"}
{"index":{}}
{"productName":"微贷赚","annual_rate":"2.7500%","describe":"热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"}

3.2、创建腾讯云Elasticsearch实例

腾讯云ES实例创建链接:https://console.cloud.tencent.com/es

3.3、在腾讯云Elasticsearch上创建索引信息

注意:在使用Logstash上传数据之前,需要首先在目标集群手动定义mapping和setting信息,虽然不自己建立,logstash会自动建立,但是自动建立出来的mappings里面有些参数可能就不是我们预期想要的,导致再查询的时候出现问题。

代码语言:txt
复制
PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
      "properties": {
        "productName": {"type": "text","analyzer": "ik_smart"},
        "annual_rate":{"type":"keyword"},
        "describe": {"type": "text","analyzer": "ik_smart"}
      }
  }
}

3.4、创建一台用于自建logstash的CVM

在腾讯云控制台购买一台CVM并绑定公网IP。

注意:需要购买与腾讯云Elasticsearch实例在同一VPC下的CVM实例,确保CVM能够内网访问腾讯云ES实例。

3.5、在CVM上安装Logstash

使用CVM自建Logstash服务,然后在Logstash的conf下配置相应文件,并启动服务。

注意:需要安装JDK(1.8及以上版本)以及相应版本的Logstash

1) 下载7.6.1版本的Logstash

在Elastic官网中,下载与您购买的腾讯云ES版本一致的Logstash,这里选择7.6.1版本

代码语言:txt
复制
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.tar.gz

2) 对下载的Logstash压缩包进行解压缩到/usr/local目录

代码语言:txt
复制
tar -xzvf logstash-7.6.1.tar.gz -C /usr/local

3) 创建目录

代码语言:txt
复制
mkdir /data/logstash 	#创建数据存储目录
mkdir /var/log/logstash	#创建日志存储目录

3.6、使用 Logstash同步数据

1) 配置logstash.yml文件

配置数据存储路径、配置文件目录、日志输出路径等。

代码语言:txt
复制
path.data: /data/logstash    #数据存储路径
path.config: /usr/local/logstash-7.6.1/config/logstash.conf   #配置文件目录
path.logs: /var/log/logstash   #日志输出路径
queue.type: persisted	#基于磁盘 的ACKed队列
path.queue: path.data/queue		#启用持久化队列时存储数据文件的目录路径

2) 配置logstash.conf文件

配置schedule每分钟触发抽取,将阿里云ES所有索引数据同步到腾讯云ES集群中,logstash配置文件如下:

代码语言:txt
复制
input {
     elasticsearch {
       hosts => "http://es-cn-xxx.public.elasticsearch.aliyuncs.com:9200"	#阿里云ES外网地址
       user  => "elastic"		#用户名
       index => "*"		#所有索引
       password => "xxxxxx"	#密码
       docinfo => true
	schedule => "* * * * *"   #定时任务,每分钟执行一次
     }
   }
output {
      elasticsearch {
        hosts => "http://xxxxxxx:9200"	#腾讯云ES内网地址
        user => "elastic"		#用户名
        password => "xxxxxx"	#密码
        index => "%{[@metadata][_index]}"
        document_type => "%{[@metadata][_type]}"
        document_id => "%{[@metadata][_id]}"
  }
}

参数

说明

hosts

ES服务的访问地址。input中为http://<阿里云ES公网地址>:<端口>:output中为http://腾讯云ES实例

user

访问ES服务的用户名

password

访问ES服务的密码

index

指定同步索引名,通配符*代表所有索引

3) 启动logstash

在实际的生产环境中可以以service的方式运行,以下通过nohup方式后台运行logstash。

代码语言:txt
复制
nohup ./bin/logstash &

命令执行成功后,系统会自动通过Logstash将阿里云ES数据同步到腾讯云ES集群。只要监控到阿里云ES有内容更新,也会自动同步数据到腾讯ES集群中。

3.7、验证数据同步结果

1) 登录目标腾讯云ES实例的Kibana控制台。

2) 单击左侧导航栏的Dev Tools(开发工具)。

3) 在Console中,执行以下命令。

查看所有的索引信息:

代码语言:txt
复制
GET _cat/indices
查看所有的索引信息

查看索引product_info文档内容:

代码语言:txt
复制
GET /product_info/_search
查看索引product_info

可以看到在腾讯云ES上已经查询到索引product_info的文档信息内容了。