使用jq批量修改es index template的lifecycle配置:修订间差异

来自三线的随记
无编辑摘要
无编辑摘要
第3行: 第3行:
新版本的es index template不支持通过结合索引匹配+优先级配置的方式来叠加批量修改已存在的索引模版(legacy template 支持),只支持通过compose实现类似用法,部分场景会带来大量的搬砖成本(例如修改skywalking的索引模板中的生命周期配置或者索引副本数配置)
新版本的es index template不支持通过结合索引匹配+优先级配置的方式来叠加批量修改已存在的索引模版(legacy template 支持),只支持通过compose实现类似用法,部分场景会带来大量的搬砖成本(例如修改skywalking的索引模板中的生命周期配置或者索引副本数配置)


引入脚本:
引入脚本:<pre>
<nowiki>
  #!/bin/bash
  #!/bin/bash
  #set -exu
  #set -exu
第23行: 第24行:
  for template in ${es_sw_templates[@]}
  for template in ${es_sw_templates[@]}
  do
  do
 
  if [[ $template == "sw_segment" ]]
  then
    continue
  fi
   echo PUT /_index_template/${template}
   echo PUT /_index_template/${template}
   new_template=""
   new_template=""
第29行: 第35行:
   echo
   echo
  done   
  done   
</nowiki></pre>
[[分类:Elasticsearch]]
[[分类:Elasticsearch]]
[[分类:Linux]]
[[分类:Linux]]
{{DEFAULTSORT:jq}}
{{DEFAULTSORT:jq}}

2025年6月19日 (四) 16:17的版本

aka: use jq tool to modify es index template lifecycle setting in bulk

新版本的es index template不支持通过结合索引匹配+优先级配置的方式来叠加批量修改已存在的索引模版(legacy template 支持),只支持通过compose实现类似用法,部分场景会带来大量的搬砖成本(例如修改skywalking的索引模板中的生命周期配置或者索引副本数配置)

引入脚本:


 #!/bin/bash
 #set -exu
 set -ue
 host="127.0.0.1:9200"
 username="elastic"
 password="elastic"
 ilm_name="sw-default-ilm"
 
 curl_options=(
   "-u" "$username:$password"
   "-s"
 )
 
 es_sw_templates=`curl ${curl_options[@]} "$host/_cat/templates/sw*?s=name" | awk '{print $1}'`
 # bak
 curl ${curl_options[@]} "${host}/_index_template?pretty" > es-${host}-index-templates_`date +%F%T`.bak.json
 
 for template in ${es_sw_templates[@]}
 do
   
   if [[ $template == "sw_segment" ]]
   then
     continue
   fi
   echo PUT /_index_template/${template}
   new_template=""
   new_template=`curl ${curl_options[@]} "${host}/_index_template/${template}" | jq '.index_templates[0].index_template |  .template.settings.index.lifecycle.name |= "'${ilm_name}'"'`
   curl -X PUT -H "Content-Type: application/json" ${curl_options[@]} "${host}/_index_template/${template}" -d "${new_template}"
   echo
 done