您的位置:首页 > 运维架构 > Shell

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

2016-02-29 19:25 916 查看
前面分别学习了一些监控脚本和实用的功能脚本,本章节是综合篇,把前面学习的内容综合起来,实现对服务器性能的监控。

主要实现如下功能:

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

相关命令脚本学习

获取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


到这里我们整个监控服务器性能的例子就完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: