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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 通过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的脚本,跑最贵的服务器     /二哈/二哈/二哈'


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1
|
19天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
42 2
6种方法打造出色的Shell脚本
|
6天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
17 1
|
10天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
29 2
|
24天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
43 6
|
21天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
66 12
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
53 2
|
2月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别