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实战(八)----定时运行----实例运用
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负载信息。
# 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,也就是获取剩余内存。
free -m | grep Swap | awk '{print $4} 获取剩余当前剩余的交换分区free大小
grep Swap : 选出含有Swap 的行
awk '{print $4}' 以空白作分隔,取第四列,这里对应到 free,也就是获取剩余Swap 。
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列 相加 得到最后值
也就是 磁盘空间的总使用百分比。
然后运行命令
解压可用
我们现在就把它们组合起来。
分别组合成
checkSys.sh 负责把所有监控信息写入running.log文件
backup.sh 负责备份删除原文件
vim checkSys.sh 后写入脚本
运行
chmod +x /data/shell/checkSys.sh
./checkSys.sh
结果:
vim backup.sh 后写入脚本
运行
chmod +x /data/shell/backup.sh
./backup.sh
备份成功并删除了原文件
我们把checkSys设置成 每15分钟运行一次
把backup.sh设置成每天00:00:00运行一次
进入定时运行配置
加入以下定时运行计划即可。
到这里我们整个监控服务器性能的例子就完成了。
主要实现如下功能:
为了持续观察服务器每天的基本运行状态,提供方便方便易读的集中的日志记录数据,需要结合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
到这里我们整个监控服务器性能的例子就完成了。
相关文章推荐
- 编写简单的shell脚本
- Windows下通过Adb shell截屏Android UI并上传PC
- Shell重定向和包含外部脚本
- Shell函数
- Shell循环语句
- Shell条件语句
- Shell打印echo和printf
- Shell数组
- Jenkins 六: 构建中执行shell或者 windows的批处理程序
- Shell字符串
- shell脚本实现带参数
- linux在shell中获取时间 date巧用
- Shell运算符
- Shell变量替换
- 修改powershell字体
- ubuntu获得root用户权限,使用xshell连接!
- Shell特殊变量
- Bash特性
- mssql拿webshell的方法
- Shell变量