记录使用logstash跨大版本Elasticsearch数据迁移数据的logstash插件升级

1. 背景

由于业务需求,我们需要将 Elasticsearch 从 2.4.1 版本升级到7.10.2 版本。在这个过程中,需要对数据进行迁移,以确保新版本的Elasticsearch 能够正确地索引和查询数据。为此,我们采用了logstash-2.4.1来实现数据的迁移,迁移过程中遇见了需要升级logstash的插件问题。

2. 测试环境

操作系统:CentOS7.9(需要可以连接外网)

源 Elasticsearch 版本:2.4.1

目标 Elasticsearch 版本:7.10.2

迁移工具:logstash-2.4.1

3. 插件升级过程

3.1 环境准备

下载 Logstash

下载地址:https://www.elastic.co/cn/downloads/past-releases/logstash-2-4-1

上传到目标主机并解压 Logstash:

tar xf logstash-2.4.1.tar.gz   

进入解压后的目录可以看到以下内容:

创建 Logstash 配置文件:

sudo vi  es_to_es_all.conf

3.2 配置 Logstash

在es_to_es_all.conf文件中,添加以下内容:

input{

    elasticsearch{

        # 源端ES地址。

        hosts =>  ["http://localhost:9200"]

        # 安全集群配置登录用户名密码。

        user => "xxxxxx"

        password => "xxxxxx"

        # 需要迁移的索引列表,多个索引以英文以逗号(,)分隔。

        index => "kibana_sample_data_*"

        # 以下三项保持默认即可,包含线程数和迁移数据大小和Logstash JVM配置相关。

        docinfo=>true

        slices => 5

        size => 5000

    }

}

filter {

  # 去掉一些Logstash自己加的字段。

  mutate {

    remove_field => ["@timestamp", "@version"]

  }

}

output{

    elasticsearch{

        # 目标端ES地址,可在Elasticsearch实例的基本信息页面获取。

        hosts => ["http://es-cn-zvp2m4bko0009****.elasticsearch.aliyuncs.com:9200"]

        # 安全集群配置登录用户名密码。

        user => "elastic"

        password => "xxxxxx"

        # 目标端索引名称,以下配置表示索引与源端保持一致。

        index => "%{[@metadata][_index]}"

        # 目标端索引type,以下配置表示索引类型与源端保持一致。

        document_type => "%{[@metadata][_type]}"

        # 目标端数据的id,如果不需要保留原id,可以删除以下这行,删除后性能会更好。

        document_id => "%{[@metadata][_id]}"

        ilm_enabled => false

        manage_template => false

    }

}

3.3 运行过程报错

启动 Logstash:

 ./bin/logstash -f es_to_es_all.conf

网上查了很多文件有关如下报错的信息都没找到解决方法。
[406] {"error":"Content-Type header [text/plain; charset=UTF-8] is not supported","status":406} {:class=>"Elasticsearch::Transport::Transport::Errors::NotAcceptable",

后来,就先尝试把读取到的数据是否可以打印到前台

可见logstash读取打印到前台是没有问题

可以判断出logstash可以从ES2.4.1版本读取到数据,但是写入不到ES7.10.2版本中,我们又更新了配置文件

启动又出现报错

仔细核对之后,发现报错指向这个插件logstash-output-elasticsearch

通过在官网查看,发现是需要升级该插件到6.2.5版本及以上

https://www.elastic.co/guide/en/logstash/2.4/plugins-outputs-elasticsearch.html

3.4 插件升级

根据斟酌情况,插件版本不宜过高,也不宜过低,就选择了该插件6.3.0版本

网上查找的插件下载地址(有问题,因为在安装插件的过程中logstash会校验该插件,需要与https://gems.ruby-china.com 里面的数据进行校验,校验不通过也不行,这也是为什么需要与外网相通的原因):https://github.com/logstash-plugins/logstash-output-elasticsearch/releases/tag/v6.3.0

可以用的下载地址在https://rubygems.org/gems/logstash-output-elasticsearch/versions/6.3.0-java

下载之后,文件如下

上传到主机安装插件

bin/logstash-plugin install --no-verifylogstash-output-elasticsearch-6.3.0-java.gem

Installing logstash-output-jdbc

Error Bundler::HTTPError, retrying 1/10

Could not fetch specs from https://rubygems.org/

Error Bundler::HTTPError, retrying 2/10

Could not fetch specs from https://rubygems.org/

...............

原因 默认的https://rubygems.org/在国内不可用,需要修改为 https://gems.ruby-china.com/

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

安装gem软件

yum install rubygems -y

查看gem源

  

gem sources -l

再次执行安装命令

bin/logstash-plugin install --no-verifylogstash-output-elasticsearch-6.3.0-java.gem

4. 总结

通过使用 Logstash-2.4.1 插件,成功实现了跨大版本 Elasticsearch 数据的迁移。在新版本的 Elasticsearch 中,我们可以看到迁移后的数据已被正确索引,从而确保了业务的正常运行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值