手搓
步骤
- 修改模板分词
- 计算新的索引名称
- 删除之前索引别名
- 新建索引
修改模板分词器类型并根据索引名称重新生成新索引
#!/bin/bash
red_text() {
echo -e "\033[31m$1\033[0m"
}
# 定义一个显示绿色文本的函数
green_text() {
echo -e "\033[32m$1\033[0m"
}
echo " ===========开始初始化ES 7.6.x==========="
#address="http://172.30.3.226:9200"
address="http://10.11.55.53:9200"
# 账号和密码
username="elastic"
password="Esb@123"
#msg_trace esb-m-trace-logs
#msg_sendlog esb-m-produce-logs
#msg_recvlog esb-m-consume-logs
#msg_systemapplog esb-middleware-app-monitor-logs
#msg_sendersituation esb-statistics-logs
non_body_index_list=("esb-m-produce-logs")
index_list=()
#是否删除存在的index 0表示不删除,1表示删除
delete_index=1
#es配置文件是否配置node.attr.box_type,配置了是1,不配置是0。
node_attr_box_type_config=0
# 设置max_size变量 gb 建议25gb
max_size=25
#天 建议30
max_age=30
max_docs_non_message_body=200000000
max_docs=50000000
max_result_window=1000000
echo "address: ${address}"
echo "username: ${username}"
echo "password: ${password}"
echo "non_body_index_list: ${non_body_index_list}"
echo "index_list: ${index_list}"
echo "max_size: ${max_size}gb"
echo "max_age: ${max_age}gb"
echo "max_docs_non_message_body: ${max_docs_non_message_body}"
echo "max_docs: ${max_docs}"
echo "---------------------------------------------------------------------------"
echo ""
echo ""
echo ""
echo ""
echo ""
echo " ===========2. 开始创建 ES索引模版 ==========="
echo "正在创建ES索引模版(${non_body_index_list}):"
for item in "${non_body_index_list[@]}"; do
url=${address}"/_template/${item}_template"
echo "url >>>> "$url
data=$(cat <<EOF
{
"order": 0,
"index_patterns": [
"${item}-*"
],
"settings": {
"index": {
"lifecycle": {
"name": "ilm-fm",
"rollover_alias": "${item}"
},
"max_result_window": "${max_result_window}",
"refresh_interval": "10s",
"analysis": {
"analyzer": {
"oap_log_analyzer": {
"type": "ik_max_word"
},
"oap_log_search_analyzer": {
"type": "ik_smart"
}
}
},
"number_of_shards": "1",
"number_of_replicas": "1"
}
},
"mappings": {
"_source": {},
"_meta": {},
"properties": {}
}
}
EOF
)
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
green_text "创建ES索引模版成功。${item}_template"
else
success=0
red_text "创建ES索引模版失败!${item}_template"
fi
done
echo " ===========2. 创建 ES索引模版 结束 ==========="
echo "------------------------------------------------------------------------------"
echo ""
echo ""
echo ""
echo ""
echo ""
echo " ===========3. 开始创建 ES索引 ==========="
echo "正在创建ES索引${non_body_index_list}:"
for item in "${non_body_index_list[@]}"; do
url=${address}
echo "url >>>> "$url
# 定义 Elasticsearch 地址和基础索引名称
# 获取所有匹配的索引
index_names=$(curl -s PUT -u "${username}:${password}" -H "Content-Type: application/json" "${address}/_cat/indices/${item}-*?h=index" | tr -d '\r')
# 将索引名称转换为数组
indices=($index_names)
# 提取后缀并找到最大值
max_suffix=0
for index in "${indices[@]}"; do
echo "获取到的index == $index"
# 截取后缀数字部分
#suffix=$(echo "$index" | grep -E -o "$item.*([0-9]+)$" | grep -E -o "[0-9]+" | sed 's/^0*//')
suffix=$(echo "$index" | grep -E -o "$item.*([0-9]+)$" | grep -E -o "[0-9]+" | sed 's/^0*//')
# 如果suffix为空,将其设为0
if [ -z "$suffix" ]; then
suffix=0
fi
# 将后缀转为数字
# num=$(printf "%d" "$suffix")
if ! [[ "$suffix" =~ ^[0-9]+$ ]]; then
red_text "截取到的后缀不是数字"$suffix
else
if [[ "$suffix" -gt "$max_value" ]]; then
max_value="$suffix"
fi
fi
done
# 输出最大值加一的结果,格式化为六位数字
new_suffix=$(printf "%06d" $((max_value + 1)))
# 生成新的索引名称
new_index_name="${item}-${new_suffix}"
echo "max_value =========>>>> "$max_value
echo "new_index_name =========>>>> "$new_index_name
# 删除之前索引的别名
old_suffix=$(printf "%06d" $((max_value)))
echo "需要删除别名的索引 =========>>>> "$old_suffix
echo "==========删除别名========"
old_index="${item}-${old_suffix}"
data=$(cat <<EOF
{
"actions": [
{
"remove": {
"index": "${old_index}",
"alias": "${item}"
}
}
]
}
EOF
)
url=${address}"/_aliases"
result=$(curl -X POST -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "删除之前索引的别名,执行结果:"$result
if [[ $result == *'"acknowledged":true'* ]]; then
green_text "删除之前索引的别名。"${item}
else
success=0
red_text "删除之前索引的别名!${item},建议设置delete_index=1"
fi
url=${address}"/${new_index_name}"
echo "url >>>> "$url
data=$(cat <<EOF
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"analysis": {
"analyzer": {
"ik_max_word": {
"type": "custom",
"tokenizer": "ik_max_word"
},
"ik_smart": {
"type": "custom",
"tokenizer": "ik_smart"
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
},
"aliases": {
"${item}": {
"is_write_index": true
}
}
}
EOF
)
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
green_text "创建ES索引成功。"${item}
else
success=0
red_text "创建ES索引失败!${item},建议设置delete_index=1"
fi
done
echo ""
echo " ===========3. 创建 ES索引 结束 ==========="
echo ""
if [[ $success -eq 1 ]]; then
green_text ">>>>>>>>>>>>>更新ES成功<<<<<<<<<<<<<<"
else
red_text "!!!!!!!!!!!!!!更新ES失败!!!!!!!!!!!!!!!"
fi
echo ""
echo ""
echo ""
echo ""
echo " ==========更新结束 ==========="
自动
- 修改模板
- 执行模板自动创建索引
#!/bin/bash
red_text() {
echo -e "\033[31m$1\033[0m"
}
# 定义一个显示绿色文本的函数
green_text() {
echo -e "\033[32m$1\033[0m"
}
echo " ===========开始修改ES 7.6.x==========="
#address="http://172.30.3.226:9200"
address="http://10.11.55.53:9200"
# 账号和密码
username="elastic"
password="Esb@123"
#msg_trace esb-m-trace-logs
#msg_sendlog esb-m-produce-logs
#msg_recvlog esb-m-consume-logs
#msg_systemapplog esb-middleware-app-monitor-logs
#msg_sendersituation esb-statistics-logs
#non_body_index_list=("esb-statistics-logs" "esb-m-consume-logs" "esb-m-trace-logs")
#index_list=("esb-middleware-app-monitor-logs" "esb-m-produce-logs")
index_list=("esb-middleware-app-monitor-logs" "esb-m-produce-logs")
#是否删除存在的index 0表示不删除,1表示删除
delete_index=1
#es配置文件是否配置node.attr.box_type,配置了是1,不配置是0。
node_attr_box_type_config=0
# 设置max_size变量 gb 建议25gb
max_size=20
#天 建议30
max_age=17
max_docs_non_message_body=200000000
max_docs=50000000
max_result_window=1000000
echo "address: ${address}"
echo "username: ${username}"
echo "password: ${password}"
echo "non_body_index_list: ${non_body_index_list}"
echo "index_list: ${index_list}"
echo "max_size: ${max_size}gb"
echo "max_age: ${max_age}gb"
echo "max_docs_non_message_body: ${max_docs_non_message_body}"
echo "max_docs: ${max_docs}"
echo "---------------------------------------------------------------------------"
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo " ===========1. 开始修改 ES索引模版 ==========="
echo "正在修改non_body_index_list 集合ES索引模版(${non_body_index_list}):"
for item in "${non_body_index_list[@]}"; do
url=${address}"/_template/${item}_template"
echo "url >>>> "$url
data=$(cat <<EOF
{
"order": 0,
"index_patterns": [
"${item}-*"
],
"settings": {
"index": {
"lifecycle": {
"name": "ilm-fm",
"rollover_alias": "${item}"
},
"max_result_window": "${max_result_window}",
"refresh_interval": "10s",
"analysis": {
"analyzer": {
"oap_log_analyzer": {
"type": "ik_max_word"
},
"oap_log_search_analyzer": {
"type": "ik_smart"
},
"default": { // 设置默认分词器
"type": "ik_max_word" // 使用 IK 分词器的细粒度模式
}
}
},
"number_of_shards": "1",
"number_of_replicas": "1"
}
},
"mappings": {
"_source": {},
"_meta": {},
"properties": {}
}
}
EOF
)
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
green_text "修改ES索引模版成功。${item}_template"
else
success=0
red_text "修改ES索引模版失败!${item}_template"
fi
done
echo ""
echo "正在修改index_list集合ES索引模版(${index_list})"
for item in "${index_list[@]}"; do
url=${address}"/_template/${item}_template"
echo "url >>>> "$url
data=$(cat <<EOF
{
"order": 0,
"index_patterns": [
"${item}-*"
],
"settings": {
"index": {
"lifecycle": {
"name": "ilm-fm-large",
"rollover_alias": "${item}"
},
"max_result_window": "${max_result_window}",
"refresh_interval": "10s",
"analysis": {
"analyzer": {
"oap_log_analyzer": {
"type": "ik_max_word"
},
"oap_log_search_analyzer": {
"type": "ik_smart"
},
"default": { // 设置默认分词器
"type": "ik_max_word" // 使用 IK 分词器的细粒度模式
}
}
},
"number_of_shards": "1",
"number_of_replicas": "1"
}
},
"mappings": {
"_source": {},
"_meta": {},
"properties": {
}
}
}
EOF
)
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
green_text "修改ES索引模版成功。${item}_template"
else
success=0
red_text "修改ES索引模版失败!${item}_template"
fi
done
echo " ===========1. 修改 ES索引模版 结束 ==========="
echo "------------------------------------------------------------------------------"
echo ""
echo ""
echo ""
echo ""
echo " ===========2. 强制滚动生命周期 ==========="
echo "强制滚动生命周期 ES索引集合 (${non_body_index_list}):"
for item in "${non_body_index_list[@]}"; do
echo "url >>>> "$url
url=${address}"/${item}/_rollover"
data=$(cat <<EOF
{
"conditions": {}
}
EOF
)
result=$(curl -X POST -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
green_text "强制滚动生命周期成功。${item}"
else
success=0
red_text "强制滚动生命周期失败!${item}"
fi
done
echo "强制滚动生命周期 ES索引集合 (${index_list}):"
for item in "${index_list[@]}"; do
echo "url >>>> "$url
url=${address}"/${item}/_rollover"
data=$(cat <<EOF
{
"conditions": {}
}
EOF
)
result=$(curl -X POST -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
green_text "强制滚动生命周期成功。${item}"
else
success=0
red_text "强制滚动生命周期失败!${item}"
fi
done