前面分别学习了一些监控脚本和实用的功能脚本,本章节是综合篇,把前面学习的内容综合起来,实现对服务器性能的监控。
主要实现如下功能:
为了持续观察服务器每天的基本运行状态,提供方便方便易读的集中的日志记录数据,需要结合shell脚本的任务计划设置,定期记录不同时间段服务器的CPU负载、内存和交换空间、磁盘使用率等各种信息。
1、每隔15分钟记录一次服务器的基本运行状况,包括:CPU负载、内存和交换空间、磁盘空间信息
2、最近用户等情况
3、记录当时的时间信息(以YYYY-mm-dd HH:MM:SS的格式输出所有信息追加到文件/data/shell/running.log中)
4、每天晚上00:00分时备份running.log文件;进行压缩备份,保存到/data/shell目录中;备份的文件名参考:runing.log-YYYYmmdd.tar.bz2;备份完成删除当天的记录文件(running.log)
主要参考:
linux实战(二)----shell脚本监控实例-----日志截取三个命令在性能监控等运用中的实例解析
linux实战(四)----写入文件----实例解析
linux实战(五)----压缩备份文件并删除原文件----实例解析
linux实战(六)----获取备份时间----实例解析
linux实战(八)----定时运行----实例运用
function GetSysCPU { CpuIdle=`vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'` CpuNum=`echo "100-$CpuIdle" | bc` echo $CpuNum }
CpuIdle=`vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'`
意思是 在vmstat 中 计算出 5秒内的CPU空闲时间平均数
CpuNum=`echo "100-$CpuIdle" | bc`
用100减去空闲时间百分比平均数 则得到 CPU的使用情况。
也就是我们求的CPU负载信息。
function GetSysMem { Mem=`free -m | grep Mem | awk '{print $4}'` echo $Mem }使用free命令查看linux系统内存使用情况:(以M为单位)
# free -m
total used free shared buffers cached
Mem: 3952 3414 538 0 168 484
-/+ buffers/cache: 2760 1191
Swap: 8191 86 8105
free -m | grep Mem | awk '{print $4} 获取剩余内存
grep Mem: 选出含有Mem的行
awk '{print $4}' 以空白作分隔,取第四列,这里对应到 free,也就是获取剩余内存。
function GetSysSwap { swap_free=`free -m | grep Swap | awk '{print $4}'` echo $swap_free }
grep Swap : 选出含有Swap 的行
awk '{print $4}' 以空白作分隔,取第四列,这里对应到 free,也就是获取剩余Swap 。
function GetSysSpace { SPACE=`df| grep -v Use | gawk '{x = x + $5} END {print x}' | sed 's/%//'` echo $SPACE }
df| grep -v Use | gawk '{x = x + $5} END {print x}' | sed 's/%//'
df是查询磁盘使用情况的命令
grep -v Use 去掉含有Use字符串的这一行
sed 's/%//' s就是替换符,这里表示匹配到后面含有%号的字符串取%号前面的值(也就是s位置的值)
gawk '{x = x + $5} END {print x}' 用空白分隔后取每一行的第5列 相加 得到最后值
也就是 磁盘空间的总使用百分比。
使用last命令
YYYY-mm-dd HH:MM:SS的格式
date +"%Y-%m-%d %H:%M:%S"
time=`date +"%Y%m%d"` tar cvf - /data/shell/running.log > runing.log-${time}.tar.bz2 rm running.log新建一个running.log在/data/shell目录下
然后运行命令
解压可用
tar -xvf runing.log-20160229.tar.bz2
我们在相关命令中已经学习了实现监控服务器性能的所有命令。
我们现在就把它们组合起来。
分别组合成
checkSys.sh 负责把所有监控信息写入running.log文件
backup.sh 负责备份删除原文件
function GetSysCPU { CpuIdle=`vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'` CpuNum=`echo "100-$CpuIdle" | bc` echo $CpuNum } echo CPU have used `GetSysCPU`% >> running.log function GetSysMem { Mem=`free -m | grep Mem | awk '{print $4}'` echo $Mem } echo free Mem is `GetSysMem`M >> running.log function GetSysSwap { swap_free=`free -m | grep Swap | awk '{print $4}'` echo $swap_free } echo free Swap is `GetSysSwap` M >> running.log function GetSysSpace { SPACE=`df| grep -v Use | gawk '{x = x + $5} END {print x}' | sed 's/%//'` echo $SPACE } echo Space have used `GetSysSpace`% >> running.log last >> running.log date +"%Y-%m-%d %H:%M:%S" >> running.log
vim checkSys.sh 后写入脚本
运行
chmod +x /data/shell/checkSys.sh
./checkSys.sh
结果:
time=`date +"%Y%m%d"` tar cvf - /data/shell/running.log > runing.log-${time}.tar.bz2 rm running.log
vim backup.sh 后写入脚本
运行
chmod +x /data/shell/backup.sh
./backup.sh
现在两个脚本都可以正常运行了。
我们把checkSys设置成 每15分钟运行一次
把backup.sh设置成每天00:00:00运行一次
crontab -e
进入定时运行配置
加入以下定时运行计划即可。
*/15 * * * * /data/shell/checkSys.sh 0 0 * * * /data/shell/backup.sh
到这里我们整个监控服务器性能的例子就完成了。