通过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的脚本,跑最贵的服务器 /二哈/二哈/二哈'
通过shell脚本统计elasticsearch indices每天的数量以及大小的更多相关文章
- Shell脚本统计文件行数
Shell脚本统计文件行数 转自 http://www.jb51.net/article/61943.htm 示例:row_count.sh文件 awk '{print NR}' row_cou ...
- 利用shell脚本统计文件中出现次数最多的IP
比如有如下文件test.txt 1 134.102.173.43 2 134.102.173.43 3 134.102.171.42 4 134.102.170.9 要统计出现次数最多的IP可 ...
- 采用shell脚本统计代码的行数
刚毕业那会儿有一次去台湾公司面试,我问多行代码怎么写.我从来没有想过这个问题,粗略计算,.惊叹:大概几十万行不行. 最近整理资料,看着eclipse左边全面上市,我觉得这个东西.代码共同拥有的行倒底总 ...
- Shell脚本 统计店中店导出数据
有一个数据文件 yue.csv 是这样的 #head yue.csv 日期,商家名称,要求在线数,当天在线数,要求在线时长,在线时长达标数, ……"2017-12-31&quo ...
- shell脚本统计多个CPU利用率
本节主要内容:top命令统计CPU的利用率 一,问题分析 MySQL在Linux下是多线程的,而且只能将多个线程分布到一个CPU上.因此,使用小型服务器,或者PC SERVER,多个CPU利用率并不高 ...
- 【shell脚本实例】shell脚本统计单词频率、出现次数最多的n个单词
1. 统计的对象words.txt,每个单词占一行(从简考虑了~) zjd@ubuntu:~/test$ cat word.txt used this count mysql count this u ...
- shell脚本 统计一段程序运行时间【转】
转自:https://bbs.csdn.net/topics/391943383#include <stdio.h> #include <stdlib.h> #include ...
- [shell]shell脚本统计数值大小
#! /bin/bash array=( ... ) var1= var2= ;i<=;i++)); do array[i]="$( cat /sys/bus/iio/devices/ ...
- shell定时统计Nginx下access.log的PV并发送给API保存到数据库
1,统计PV和IP 统计当天的PV(Page View) cat access.log | sed -n /`date "+%d\/%b\/%Y"`/p |wc -l 统计某一天的 ...
随机推荐
- Leetcode算法系列(链表)之删除链表倒数第N个节点
Leetcode算法系列(链表)之删除链表倒数第N个节点 难度:中等给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.示例:给定一个链表: 1->2->3->4-&g ...
- 函数实现将 DataFrame 数据直接划分为测试集训练集
虽然 Scikit-Learn 有可以划分数据集的函数 train_test_split ,但在有些特殊情况我们只希望它将 DataFrame 数据直接划分为 train, test 而不是像 tr ...
- JAVA多线程之并发编程三大核心问题
概述 并发编程是Java语言的重要特性之一,它能使复杂的代码变得更简单,从而极大的简化复杂系统的开发.并发编程可以充分发挥多处理器系统的强大计算能力,随着处理器数量的持续增长,如何高效的并发变得越来越 ...
- Easticsearch概述(API使用)二
Rest简介 一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务端互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制 Rest的操作分为以 ...
- ELF文件格式学习总结
ELF文件格式学习总结 ELF文件格式学习总结1. 概述2. 目标文件结构3. ELF文件头3.1 魔数3.2 文件类型3.3 机器类型4. ELF文件内容4.1段表4.2字符串表(.**strtab ...
- dubbo泛化引发的生产故障之dubbo隐藏的坑
dubbo泛化引发的生产故障之dubbo隐藏的坑 上个月公司zk集群发生了一次故障,然后要求所有项目组自检有无使用Dubbo编程式/泛化调用,强制使用@Reference生成Consumer.具体原因 ...
- 直接copy大于某一个时间小于某一个时间的文件--find进阶用法
find ./ -type f -newermt '2000-01-04 10:30:00' ! -newermt '2019-10-28 10:57:00' -exec cp -a {} /var/ ...
- python 定义函数关键字def 简单介绍
一 在类中定义的def # python中def 是用来干什么的? # 可以定义函数,就是定义一个功能. class People(): def __init__(self): print(&quo ...
- VC++ 启用内存泄露检测
_CrtDumpMemoryLeaks()就是检测从程序开始到执行该函数进程的堆使用情况,通过使用_CrtDumpMemoryLeaks()我们可以进行简单的内存泄露检测. #include &quo ...
- CF 1394 简要题解
最近都会做一些 \(\rm Div1\) 套题中 \(3000\) 分以下的题目. A 直接枚举贪心即可. B 首先不难发现总共可能的 \(c\) 序列只有 \(k!\) 种,很明显要暴力枚举所有情况 ...