【玩轉騰訊雲】通過Logstash從阿里雲ES遷移至騰訊雲最佳實踐

  • 2020 年 3 月 30 日
  • 筆記

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的文檔信息內容了。