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的索引,指定分片数 和副本数量,索引映射。
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控制台中,执行以下命令创建文档并插入数据,使用批量插入数据的形式:
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里面有些参数可能就不是我们预期想要的,导致再查询的时候出现问题。
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版本
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.tar.gz
2) 对下载的Logstash压缩包进行解压缩到/usr/local目录
tar -xzvf logstash-7.6.1.tar.gz -C /usr/local
3) 创建目录
mkdir /data/logstash #创建数据存储目录
mkdir /var/log/logstash #创建日志存储目录
3.6、使用 Logstash同步数据
1) 配置logstash.yml文件
配置数据存储路径、配置文件目录、日志输出路径等。
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配置文件如下:
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。
nohup ./bin/logstash &
命令执行成功后,系统会自动通过Logstash将阿里云ES数据同步到腾讯云ES集群。只要监控到阿里云ES有内容更新,也会自动同步数据到腾讯ES集群中。
3.7、验证数据同步结果
1) 登录目标腾讯云ES实例的Kibana控制台。
2) 单击左侧导航栏的Dev Tools(开发工具)。
3) 在Console中,执行以下命令。
查看所有的索引信息:
GET _cat/indices
查看索引product_info文档内容:
GET /product_info/_search
可以看到在腾讯云ES上已经查询到索引product_info的文档信息内容了。