通過Logstash修改字段名
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細閱讀。
在某些業(yè)務(wù)的使用場景下,您可能需要對索引的一些字段進行重命名。例如,使用DataWorks在阿里云Elasticsearch(簡稱ES)集群間遷移數(shù)據(jù)時,由于源集群數(shù)據(jù)中包含了特殊符號(例如@),而DataWorks不支持特殊符號,因此需要修改字段名(去掉特殊符號)后再進行數(shù)據(jù)遷移。本文介紹如何通過Logstash修改字段名。
背景信息
您可以通過兩種方式修改字段名:
使用Logstash的filter,對字段進行重命名。本文采用此方式。
本文以去除源索引字段的
@
符號為例進行演示,將源索引的@ctxt_user_info
字段,使用Logstash的filter在目標索引中重命名為ctxt_user_info
字段。使用Reindex遷移時,對字段進行重命名。
前提條件
已創(chuàng)建阿里云Elasticsearch實例。源索引和目標索引可以在同一個ES實例中,也可以在不同的ES實例中,本文以在同一個7.10版本ES實例中為例。具體操作,請參見創(chuàng)建阿里云Elasticsearch實例。
已創(chuàng)建阿里云Logstash實例。Logstash實例需要與ES實例在同一專有網(wǎng)絡(luò)下。具體操作,請參見創(chuàng)建阿里云Logstash實例。
準備測試數(shù)據(jù)
登錄阿里云ES實例的Kibana控制臺。
具體操作,請參見登錄Kibana控制臺。
在Kibana控制臺,選擇
。在Console頁簽,執(zhí)行以下代碼,創(chuàng)建源索引
product_info
。PUT /product_info { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "properties": { "ctxt_user_info": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } }
執(zhí)行以下代碼,在源索引中插入示例數(shù)據(jù)。
POST /product_info/_doc/_bulk {"index":{}} {"@ctxt_user_info":"test1"} {"index":{}} {"@ctxt_user_info":"test1"}
執(zhí)行以下代碼,查詢源索引中的示例數(shù)據(jù)。
GET /product_info/_search
返回結(jié)果如下,可以看到源索引中字段@ctxt_user_info中包含特殊符號@。
{ "took" : 16, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "product_info", "_type" : "_doc", "_id" : "3BDMUZMBh7mRlA4aS0Nq", "_score" : 1.0, "_routing" : "74873", "_source" : { "@ctxt_user_info" : "test1" } }, { "_index" : "product_info", "_type" : "_doc", "_id" : "3RDMUZMBh7mRlA4aS0Nq", "_score" : 1.0, "_routing" : "74873", "_source" : { "@ctxt_user_info" : "test1" } } ] } }
操作步驟
借助Logstash將ES索引中的字段重命名包括以下幾個步驟:
在ES實例中創(chuàng)建目標索引,以便接收源索引中的數(shù)據(jù)。
配置Logstash管道:將源索引中的@ctxt_user_info字段,使用Logstash的filter重命名為ctxt_user_info字段,并在目標索引中輸出。
在目標索引中驗證ctxt_user_info字段中的特殊符號已去除。
步驟一:(可選)創(chuàng)建目標索引
如果您開啟了ES實例的自動創(chuàng)建索引功能,可忽略此步驟。但自動創(chuàng)建的索引可能不符合您的預(yù)期,不建議您開啟自動創(chuàng)建索引功能。
在阿里云ES實例的Kibana控制臺的Dev Tools中執(zhí)行以下代碼,創(chuàng)建目標索引product_info2。
PUT /product_info2
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"ctxt_user_info": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
步驟二:創(chuàng)建并配置Logstash管道
- 進入阿里云Elasticsearch控制臺的Logstash頁面。
- 進入目標實例。
- 在頂部菜單欄處,選擇地域。
- 在Logstash實例中單擊目標實例ID。
在左側(cè)導(dǎo)航欄,單擊管道管理。
單擊創(chuàng)建管道。
在創(chuàng)建管道任務(wù)頁面,輸入管道ID并配置管道。
本文使用的管道配置如下。
input { elasticsearch { hosts => ["http://es-cn-tl32gid**********.elasticsearch.aliyuncs.com:9200"] user => "elastic" password => "your_password" index => "product_info" docinfo => true } } filter { mutate { rename => { "@ctxt_user_info" => "ctxt_user_info" } } } output { elasticsearch { hosts => ["http://es-cn-tl32gid**********.elasticsearch.aliyuncs.com:9200"] user => "elastic" password => "your_password" index => "product_info2" document_type => "%{[@metadata][_type]}" document_id => "%{[@metadata][_id]}" } }
以上管道配置中,通過Logstash的filter.mutate.rename參數(shù)實現(xiàn)索引字段的重命名。
更多管道配置說明,請參見通過配置文件管理管道和Logstash配置文件說明。
警告配置完成后,需要保存并部署才能生效。保存并部署操作會觸發(fā)實例重啟,請在不影響業(yè)務(wù)的前提下,繼續(xù)執(zhí)行以下步驟。
單擊下一步。
配置管道參數(shù)。
單擊保存或者保存并部署。
保存:將管道信息保存在Logstash里并觸發(fā)實例變更,配置不會生效。保存后,系統(tǒng)會返回管道管理頁面。可在管道列表區(qū)域,單擊操作列下的立即部署,觸發(fā)實例重啟,使配置生效。
保存并部署:保存并且部署后,會觸發(fā)實例重啟,使配置生效。
步驟三:驗證結(jié)果
在阿里云ES實例的Kibana控制臺的Dev Tools中執(zhí)行以下代碼,查詢目標索引product_info2中的數(shù)據(jù)。
GET product_info2/_search
返回結(jié)果如下。根據(jù)結(jié)果可以看到,源索引字段@ctxt_user_info中的@已經(jīng)去除,索引字段被重命名為ctxt_user_info。
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 6,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "product_info2",
"_type" : "_doc",
"_id" : "r5N7fn0BKQKHRO31rK6C",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2021-12-03T04:14:26.872Z",
"@version" : "1",
"ctxt_user_info" : "test1"
}
},
{
"_index" : "product_info2",
"_type" : "_doc",
"_id" : "rpN7fn0BKQKHRO31rK6C",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2021-12-03T04:14:26.871Z",
"@version" : "1",
"ctxt_user_info" : "test2"
}
}
]
}
}