目录
知识概览
总体脚本编写
date
awk
grep
bc
知识概览
总体脚本编写
#!/bin/bash#定义日志的文件名和日期
cdate=$(date +%Y%m%d%H%M%S)
logfile="/tmp/memlog_{$0}.log"#拿到ip
ip_addr=$(ip add|grep "ens33$"|awk '{print $2}')#总内存和使用的内存
mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
mem_used=$(free -m|head -2|tail -1|awk '{print $3}')#计算使用率
percent=$(echo "scale=2;$mem_used/$mem_all*100"|bc)#定义一个警告的阈值,然后进行比较
thereshold=80
flag=$(echo "$percent > $thereshold"|bc)
if (( $flag == 1 ));thenecho "$cdate $ip_addr Total:{$mem_all}M Mem used:${percent}%" >>$logfile
elseecho "内存的使用率在合理范围内"
fi
date
这里写一个日志,所以获取具体时间来做日志命名,非常需要注意的是date与+之间一定要打一个空格,没有空格的话就会报错:
#定义日志的文件名和日期
cdate=$(date +%Y%m%d%H%M%S)
logfile="/tmp/memlog_{$0}.log"
awk
(head和tail在前面的文章中已经讲过,所以这里不做过多的赘述,两者通过管道符号,可以获得你想要的任何一行)
#总内存和使用的内存
mem_all=$(free -m|head -2|tail -1|awk '{print $2}')
mem_used=$(free -m|head -2|tail -1|awk '{print $3}')
free -m:这个可以获取内存的信息
total--->总内存大小
used--->使用了的内存大小
free--->没有使用的
shared---->共享内存,其实也是使用的,有的程序可以共享内存空间
buff/cache--->buff是指缓存,是属于内存空间的,临时存放数据的地方。cache是读取磁盘里的数据到内存里的临时存放数据的地方
available--->可用的内存空间,给下一个程序可以使用的内存空间,一个理论值。
获得了指定行之后,使用awk可以做文本提取,这里每个空格代表一个位置变量,通过$2,$3可以获得对应的数字。
grep
#拿到ip
ip_addr=$(ip add|grep "ens33$"|awk '{print $2}')
ip add命令可以获取机器ip:
grep作为文本抓取工具,通过" "引起要找的关键字,可以找到对应的行数,这里找到ens33结尾的行,这一行正好是ip所在行,由此获得ip地址。
bc
bc是linux自带的运算器。
[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
4*4
16
quit
输入quit就可以退出。
可以用bc进行小数运算:
[root@localhost ~]# echo 4.6+4.6|bc
9.2
保留小数的运算,scale表示精确到小数点后两位:
[root@localhost ~]# echo "scale=2;56/5"|bc
11.20
所以下面这一段代码的意义是:使用bc工具算出使用率,但是小数在bc中的0会被隐藏,所以乘以100,并且保留两位小数。
#计算使用率
percent=$(echo "scale=2;$mem_used/$mem_all*100"|bc)
最后一段:这里使用bc做比较判断是否超出我们定的阈值80,超出就把它记录到日志中,没有超出就提示监管者没有超出。这样就写了一个工作中可以使用的简易的内存监控脚本。
#定义一个警告的阈值,然后进行比较
thereshold=80
flag=$(echo "$percent > $thereshold"|bc)
if (( $flag == 1 ));thenecho "$cdate $ip_addr Total:{$mem_all}M Mem used:${percent}%" >>$logfile
elseecho "内存的使用率在合理范围内"
fi
如果有问题,欢迎评论区留言。