elasticsearch运维_分享两个自己整理的比力好用的elasticsearch脚本 ...

前进之路  金牌会员 | 2024-6-24 03:50:07 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 523|帖子 523|积分 1569

本日分享两个自己编写整理的比力好用的脚本,我平时也常常在elasticsearch生产情况使用。
后面将会不定期给大家分享自己在生产运维中整理的好的脚本和命令给大家分享。
  1. #!/bin/bash
  2. # 定义 Elasticsearch 地址、端口、用户名和密码
  3. ES_HOST="192.168.xxx.xxx"
  4. ES_PORT="9200"
  5. ES_USER="elastic"
  6. ES_PASS="xxxxx"
  7. # 定义输出文件路径
  8. OUTPUT_FILE="/home/esuser/xxxx_indices_info.txt"
  9. # 临时文件存储
  10. TEMP_FILE="/tmp/xxxx_indices_info.txt"
  11. # 获取以 xxxx 开头的索引名称、大小并按索引名称排序,写入到临时文件
  12. curl -s -u ${ES_USER}:${ES_PASS} "${ES_HOST}:${ES_PORT}/_cat/indices?h=index,store.size&format=json" | jq -r '.[] | select(.index | startswith("xxxx")) | "\(.index)\t\(.["store.size"])"' > ${TEMP_FILE}
  13. # 检查临时文件是否生成
  14. if [ ! -s ${TEMP_FILE} ]; then
  15.     echo "No data found or failed to retrieve data from Elasticsearch."
  16.     exit 1
  17. fi
  18. # 清空输出文件
  19. > ${OUTPUT_FILE}
  20. # 处理大小单位转换并写入输出文件
  21. while IFS=$'\t' read -r index size; do
  22.     # 检查大小是否为 null
  23.     if [ "$size" == "null" ] || [ -z "$size" ]; then
  24.         size_kb=0
  25.     else
  26.         # 将大小转换为 KB
  27.         if [[ $size == *kb ]]; then
  28.             size_kb=$(echo $size | sed 's/kb//')
  29.         elif [[ $size == *mb ]]; then
  30.             size_kb=$(echo $size | sed 's/mb//' | awk '{printf "%.0f", $1 * 1024}')
  31.         elif [[ $size == *gb ]]; then
  32.             size_kb=$(echo $size | sed 's/gb//' | awk '{printf "%.0f", $1 * 1024 * 1024}')
  33.         elif [[ $size == *tb ]]; then
  34.             size_kb=$(echo $size | sed 's/tb//' | awk '{printf "%.0f", $1 * 1024 * 1024 * 1024}')
  35.         else
  36.             size_kb=$size
  37.         fi
  38.     fi
  39.     # 输出索引名称和大小(KB),追加到输出文件
  40.     echo "${index} ${size_kb}" >> ${OUTPUT_FILE}
  41. done < ${TEMP_FILE}
  42. # 按索引名称排序并重定向到最终文件
  43. sort -k1,1 ${OUTPUT_FILE} -o ${OUTPUT_FILE}
  44. # 删除临时文件
  45. rm ${TEMP_FILE}
  46. ----
  47. 1) 定义 Elasticsearch 地址、端口、用户名和密码:将 ES_HOST、ES_PORT、ES_USER 和 ES_PASS 设置为你的 Elasticsearch 实例的地址、端口、用户名和密码。
  48. 2) 定义输出文件路径:将结果写入到 /home/esuser/xxxx_indices_info.txt 文件。
  49. 3) 获取以 xxxx 开头的索引信息:
  50. 4) 使用 curl 命令获取所有索引的信息,并以 JSON 格式返回。
  51. 5) 使用 jq 进行 JSON 解析并过滤出以 MIC 开头的索引,提取索引名称和大小。
  52. 6) 检查并处理大小字段:将大小单位(如 KB、MB、GB、TB)转换为 KB。如果大小为 null 或空,则设置为 0 KB。
  53. 输出结果:
  54. 1) 清空输出文件。
  55. 2) 使用 echo "${index} ${size_kb}" >> ${OUTPUT_FILE} 将每行结果追加到输出文件。
  56. 3) 按索引名称排序:使用 sort -k1,1 ${OUTPUT_FILE} -o ${OUTPUT_FILE} 按索引名称排序并重定向到最终文件。
  57. 4) 删除临时文件:清理临时文件。
复制代码
填充空索引加速各节点索引分片数量平衡

  1. #!/bin/bash
  2. # Elasticsearch节点的IP地址和端口
  3. ES_HOST="192.168.xxx.xxx:9200"
  4. # Elasticsearch超级用户的身份验证凭据
  5. USERNAME="elastic"
  6. PASSWORD="xxxx"
  7. # 索引名称的前缀和数量
  8. INDEX_PREFIX="test-null-index"
  9. INDEX_COUNT=10
  10. # 索引的设置
  11. INDEX_SETTINGS='{"settings": {"number_of_shards": 1, "number_of_replicas": 0}}'
  12. # 循环创建索引
  13. for ((i=1; i<xxxx; i++)); do
  14.   INDEX_NAME="${INDEX_PREFIX}-${i}"
  15.   echo "Creating index: $INDEX_NAME"
  16.   
  17.   curl -XPUT -u "$USERNAME:$PASSWORD" "http://$ES_HOST/$INDEX_NAME" -H 'Content-Type: application/json' -d "$INDEX_SETTINGS"
复制代码

上一篇你是学会了还是学废了:Elasticsearch 7 集群拷贝到别的情况如何重置密码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表