【玩轉騰訊雲】通過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的文檔信息內容了。