通过shell脚本统计elasticsearch indices每天的数量以及大小

简介: 通过shell脚本统计elasticsearch indices每天的数量以及大小
  • 前情提要:
  • 最近elasticsearch集群总出问题,之前虽然修复了,现在又出现新的问题,于是PM要求拉取elasticsearch每天建立的索引有多少,索引有多大,需要对机器进行评估
  • 客户现场无法接触到elasticsearch集群(生产环境,客户方不许可),通过dashboard开启一个pod(资源有限,无法流畅的操作),只好另寻妖路,从dashboard操作获取索引信息,再将文件传输到本机
  • 下面,我要开始装13了(我是菜13,狗头保命)
# curl -XGET "localhostIp:9200/_cat/indices?v" | grep xxx > /tmp/xxx.indices
'这步是为了将elasticsearch的indices重定向到一个文件里面,因为elasticsearch收集的日志中,有一部分是自己公司产品的日志,还有一部分是客户方的日志,因为保密协议,所以,一些公司的信息就以xxx来替代了

请看脚本

#!/usr/bin/env bash
set -e 
pwd=$(cd `dirname $0`; pwd)
year=2020
month=12
day=$(seq -w 1 31)
file=test
dir=${pwd}/total
mkdir ${dir}
for i in ${day}
do
  kb=$(grep ${year}-${month}-${i} ${file}.indices.txt | \
  awk '{print $NF}' | \
  grep kb | \
  awk -F 'kb' '{print $1}' | \
  awk '{sum += $1};END {print sum/1024/1024}' )
  echo "${year}-${month}-${i}合计:${kb}gb" > ${dir}/${file}.indices.${year}-${month}-${i}.txt
  mb=$(grep ${year}-${month}-${i} ${file}.indices.txt | \
  awk '{print $NF}' | \
  grep mb | \
  awk -F 'mb' '{print $1}' | \
  awk '{sum += $1};END {print sum/1024}')
  echo "${year}-${month}-${i}合计:${mb}gb" >> ${dir}/${file}.indices.${year}-${month}-${i}.txt
  gb=$(grep ${year}-${month}-${i} ${file}.indices.txt | \
  awk '{print $NF}' | \
  grep gb | \
  awk -F 'gb' '{print $1}' | \
  awk '{sum += $1};END {print sum}')
  echo "${year}-${month}-${i}合计:${gb}gb" >> ${dir}/${file}.indices.${year}-${month}-${i}.txt
  total=$(cat ${dir}/${file}.indices.${year}-${month}-${i}.txt | \
  awk -F ':' '{print $NF}' | awk -F 'gb' '{sum += $1};END {print sum}')
  echo "${year}-${month}-${i}总计:${total}gb" >> ${dir}/${file}.indices.${year}-${month}-${i}.txt
  wc=$(grep ${year}-${month}-${i} ${file}.indices.txt | \
  wc -l)
  echo "${year}-${month}-${i}总计:${wc}条" >> ${dir}/${file}.indices.${year}-${month}-${i}.txt
done
  grep 总计 ${dir}/${file}.indices.${year}-${month}-*.txt > ${dir}/${file}.indices.total.txt
  cat ${dir}/${file}.indices.total.txt
  sleep 10
  rm -rf ${dir}
  rm -f ${pwd}/${file}.indices.total.txt
README:
1、因为一个月31天嘛,所以脚本会生成31份文件,为了不影响一些平时的操作,脚本执行完,会将获取的信息输出到终端,随后会将这些收集信息的文件都删除,请知悉
2、关于elasticsearch导出的信息模板,请看下面,如果模板不一样,需要修改awk的位置变量(建议重写。。。)
3、统计的数据大小单位,我默认的是GB,awk我不太会用,所以最终求和后,会有科学计算的符号在里面,'如果有大佬看过,知道如何优化,还望赐教
4、关于变量:
   4.1、year是指年,month是指月,day用的seq命令(利用-w参数,使得数字的输出都是两位数,因为索引的模板中,日期都是两位数的)
   4.2、file是指最先导出的indices文件中,过滤出来的字段,我的文件名称格式是test.indices.txt,使用的时候,需要注意,否则会报错
   4.3、dir是脚本运行的时候,创建的目录,是在脚本所在目录下创建的下一级目录,将后面统计的文件都存放在这个目录下面,目的是为了方便后面直接删除目录,避免错删文件
   4.4、kb是指store.size一列的kb大小的indices过滤出来,通过awk进行求和(mb和gb同理)
   4.5、total是将kb和mb换算成gb后的数字和gb的数字求和,获取一天的索引总大小
   4.6、wc是索引数量求和,获取一天的索引数量
5、脚本逻辑:
   5.1、通过for循环,awk切割,将store.size这一列过滤出来,然后细分kb,mb和gb,切割出数字进行换算和求和,最终默认的单位是gb
   5.2、通过for循环,wc统计,获取每天的索引数量
   5.3、通过'grep 总计'将每天的indices信息重定向到xxx.indices.total.txt,通过cat输出到终端,然后睡眠10秒后,删除脚本生成的文件
6、'脚本只在我自己的环境上测试过,也是完成了PM交代的任务,以上的内容,仅供学习和参考,切勿用于商业用途(开源万岁)
elasticsearch 模板(公司相关的信息和谐了,这些不重要)
health status index                                         uuid      pri rep docs.count docs.deleted store.size pri.store.size
green  open   xxx-xxx-xxx-ip:port-2020-11-27 8psXiCG0Acubr46OcKo9TA   5   1        525            0    841.1kb        420.5kb
# 输出到终端的效果(同样,公司的信息做了和谐):
/tmp/total/xxxxxx.indices.2020-12-01.txt:2020-12-01总计:27.5024gb
/tmp/total/xxxxxx.indices.2020-12-01.txt:2020-12-01总计:3条
/tmp/total/xxxxxx.indices.2020-12-02.txt:2020-12-02总计:57.0024gb
/tmp/total/xxxxxx.indices.2020-12-02.txt:2020-12-02总计:4条
/tmp/total/xxxxxx.indices.2020-12-03.txt:2020-12-03总计:59.6024gb
/tmp/total/xxxxxx.indices.2020-12-03.txt:2020-12-03总计:4条
/tmp/total/xxxxxx.indices.2020-12-04.txt:2020-12-04总计:61.5026gb
/tmp/total/xxxxxx.indices.2020-12-04.txt:2020-12-04总计:4条
/tmp/total/xxxxxx.indices.2020-12-05.txt:2020-12-05总计:0.48008gb
/tmp/total/xxxxxx.indices.2020-12-05.txt:2020-12-05总计:2条
'本菜鸡有一个远大的志向:用最low的脚本,跑最贵的服务器     /二哈/二哈/二哈'


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
8月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
726 9
|
8月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
741 2
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
11月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
374 60
|
8月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
10月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1149 1
|
12月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
522 17
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
1798 25
|
12月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
347 4
|
12月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
610 3