linux实战(十一)----shell监控服务器性能---综合运用


前面分别学习了一些监控脚本和实用的功能脚本,本章节是综合篇,把前面学习的内容综合起来,实现对服务器性能的监控。

主要实现如下功能:

为了持续观察服务器每天的基本运行状态,提供方便方便易读的集中的日志记录数据,需要结合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)

相关命令脚本学习

获取CPU负载信息

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   
}  
vmstat用来显示虚拟内存的信息
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
vmstat 1 5
表示每1秒刷新一次,取5次
sed -n '3,$p '
-n表示只打印选中的行,地址是一个数字,则表示行号;
“$"符号,表示最后一行。 '3,$'表示 第3行到最后一行,p是命令表示打印输出。
 
awk '{x = x + $15} END {print x/5}'
表示将每行的 第15列相加后 除以5求平均
 
awk -F. '{print $1}'
用.来分隔取第1列 也就是对平均数 取整的意思

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  
} 
free -m | grep Swap | awk '{print $4} 获取剩余当前剩余的交换分区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 负责备份删除原文件

checkSys.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

\

\

结果:

\

backup.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  

到这里我们整个监控服务器性能的例子就完成了。

相关内容