Linux服务器内存、CPU、文件系统、磁盘IO性能以及网络连通性shell巡检
2017-03-09 17:34
771 查看
shell自动巡检服务器基础配置
每个项目都要部署在服务器上,那么服务器的安全性能和一些基本情况是我们需要了解的,比如服务器CPU、内存、文件系统、磁盘IO、还有一些网络连通性等等,这些操作很多项目组都是安排一个特定的巡检人员来完成,那么为什么不写一个shell脚本来自动巡检服务器而代替人工操作呢,下面给出巡检的标准与shell脚本代码:
一、巡检标准
2) 关注图中红色标记部分,连续三次及以上低于20%,认为CPU占用率过高,系统存在风险。
free -g,(-g的意义是单位为GB)结果示例如下。
2) 关注图中红色标记部分,若低于总量的20% (GB),认为内存占用率过高,系统存在风险。
2) 关注图中红色标记部分,若任意一条记录高于90%,认为磁盘空间占用率过高,系统存在风险。
1.4 磁盘IO性能巡检
1) 执行巡检指令(红色字体部分):iostat –x 2 5,结果示例如下,该显示结果会每隔2秒刷新一次,共执行5次。
2) 关注图中红色标记部分,若scvtm超过15,且%util接近100连续三次及以上,认为磁盘IO可能存在瓶颈,系统存在风险。
2) 关注图中红色标记部分,若高于0%,认为数据库到该目标IP之间的网络不稳定,存在丢包,系统存在风险。
二、巡检shell代码
巡检结果若系统正常则不管,异常则输出到指定文件里面。
每个项目都要部署在服务器上,那么服务器的安全性能和一些基本情况是我们需要了解的,比如服务器CPU、内存、文件系统、磁盘IO、还有一些网络连通性等等,这些操作很多项目组都是安排一个特定的巡检人员来完成,那么为什么不写一个shell脚本来自动巡检服务器而代替人工操作呢,下面给出巡检的标准与shell脚本代码:
一、巡检标准
1.1 CPU利用率巡检
1) 执行巡检指令(红色字体部分):top,结果示例如下,该显示结果会每隔3秒刷新一次。按【q】键可退出巡检。2) 关注图中红色标记部分,连续三次及以上低于20%,认为CPU占用率过高,系统存在风险。
1.2 内存利用率巡检
1) 执行巡检指令(红色字体部分):free -g,(-g的意义是单位为GB)结果示例如下。
2) 关注图中红色标记部分,若低于总量的20% (GB),认为内存占用率过高,系统存在风险。
1.3 文件系统巡检
1) 执行巡检指令(红色字体部分):df -h,结果示例如下。2) 关注图中红色标记部分,若任意一条记录高于90%,认为磁盘空间占用率过高,系统存在风险。
1.4 磁盘IO性能巡检
1) 执行巡检指令(红色字体部分):iostat –x 2 5,结果示例如下,该显示结果会每隔2秒刷新一次,共执行5次。2) 关注图中红色标记部分,若scvtm超过15,且%util接近100连续三次及以上,认为磁盘IO可能存在瓶颈,系统存在风险。
1.5 网络连通性巡检
1)执行巡检指令(红色字体部分):ping -s 4096 -c 5 135.0.51.12,结果示例如下。2) 关注图中红色标记部分,若高于0%,认为数据库到该目标IP之间的网络不稳定,存在丢包,系统存在风险。
二、巡检shell代码
巡检结果若系统正常则不管,异常则输出到指定文件里面。
#!/bin/bash #admin:spirits #***********CPU检测************* echo "`date '+%Y年%m月%d日 %H:%M:%S'` 数据库服务器硬件情况开始巡检。。。" top -bn 6 >>top grep -n "%id" top >> newtop grep -n "zombie" top >> insisttop top1=`cat newtop | awk '{print $5}' | sed -n 4p | sed 's/%//g' |sed 's/id,//g'` top2=`cat newtop | awk '{print $5}' | sed -n 5p | sed 's/%//g' |sed 's/id,//g'` top3=`cat newtop | awk '{print $5}' | sed -n 6p | sed 's/%//g' |sed 's/id,//g'` top4=`cat insisttop | awk '{print $10}' | sed -n 2p | sed 's/%//g' |sed 's/id,//g'` #echo "top4:$top4" if [ $top4 -gt 0 ] then echo "`date '+%Y年%m月%d日 %H:%M:%S'` 采集处理服务器上出现僵尸进程,巡检程序将自动kill该进程,如需人工确认请执行命令top后再执行ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'来确认是否将僵尸进程杀死" >> ./newreport.txt ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9 else echo "`date '+%Y年%m月%d日 %H:%M:%S'` 采集处理服务器上无僵尸进程正常运行!" fi a=${top1:0:2} b=${top2:0:2} c=${top3:0:2} echo "top1: $a" echo "top2: $b" echo "top3: $c" if [ $a -lt 20 ]&&[ $b -lt 20 ]&&[ $c -lt 20 ] ; then echo "`date '+%Y年%m月%d日 %H:%M:%S'` 数据库服务器CPU占用率不正常,top取到的值是$top1,$top2,$top3,小于参考值20,请及时处理!" >> ./newreport.txt else echo "CPU占用率正常!" fi rm -rf top rm -rf newtop rm -rf insisttop #***************内存检测*********** free1=`free -g | awk '{print $4}' | sed -n 3p | sed 's/%//g' |sed 's/t//g'` total=`free -g | awk '{print $2}' | sed -n 2p | sed 's/%//g' |sed 's/t//g'` canshu=0.2 tempd=`echo $total $canshu |awk '{print $1*$2}'` biaozhun=${tempd%.*} if [ $free1 -le $biaozhun ] ; then echo "`date '+%Y年%m月%d日 %H:%M:%S'` 数据库服务器内存占用率过高,free -g取到的值是$free1,小于等于参考值$biaozhun,请及时处理!" >> ./newreport.txt else echo "内存占用率正常!" fi #**************文件系统巡检********** df1=`df -h | awk '{print $5}' | sed -n 2p | sed 's/%//g'` df2=`df -h | awk '{print $5}' | sed -n 3p | sed 's/%//g'` df3=`df -h | awk '{print $5}' | sed -n 4p | sed 's/%//g'` df4=`df -h | awk '{print $5}' | sed -n 5p | sed 's/%//g'` df5=`df -h | awk '{print $5}' | sed -n 6p | sed 's/%//g'` if [ $df1 -gt 90 ]||[ $df2 -gt 90 ]||[ $df3 -gt 90 ]||[ $df4 -gt 90 ]||[ $df5 -gt 90 ] ; then echo "`date '+%Y年%m月%d日 %H:%M:%S'` 数据库服务器磁盘占用率过高!df -h取到的值是$df1,$df2,$df3,$df4,$df5,参考值是90,若其中一个或一个以上大于参考值,请及时处理!" >> ./newreport.txt else echo "磁盘占用率正常!" fi #*********************磁盘IO性能巡检*************** iostat -x 2 5 >>iostat.txt scvtm1=" `cat iostat.txt | awk '{print $11}' | sed -n 16p | sed 's/%//g' `" scvtm2="` cat iostat.txt | awk '{print $11}' | sed -n 17p | sed 's/%//g'`" scvtm3="` cat iostat.txt | awk '{print $11}' | sed -n 18p | sed 's/%//g'`" scvtm4="` cat iostat.txt | awk '{print $11}' | sed -n 19p | sed 's/%//g'`" scvtm13="` cat iostat.txt | awk '{print $11}' | sed -n 25p | sed 's/%//g'`" scvtm6=" `cat iostat.txt | awk '{print $11}' | sed -n 26p | sed 's/%//g' `" scvtm7="` cat iostat.txt | awk '{print $11}' | sed -n 27p | sed 's/%//g'`" scvtm8="` cat iostat.txt | awk '{print $11}' | sed -n 28p | sed 's/%//g'`" scvtm9="` cat iostat.txt | awk '{print $11}' | sed -n 34p | sed 's/%//g'`" scvtm10="` cat iostat.txt | awk '{print $11}' | sed -n 35p | sed 's/%//g'`" scvtm11="` cat iostat.txt | awk '{print $11}' | sed -n 36p | sed 's/%//g'`" scvtm12="` cat iostat.txt | awk '{print $11}' | sed -n 37p | sed 's/%//g'`" util1="`cat iostat.txt | awk '{print $12}' | sed -n 16p | sed 's/%//g'`" util2="` cat iostat.txt | awk '{print $12}' | sed -n 17p | sed 's/%//g'`" util3="` cat iostat.txt | awk '{print $12}' | sed -n 18p | sed 's/%//g'`" util4="` cat iostat.txt | awk '{print $12}' | sed -n 19p | sed 's/%//g'`" util5="` cat iostat.txt | awk '{print $12}' | sed -n 25p | sed 's/%//g'`" util6=" `cat iostat.txt | awk '{print $12}' | sed -n 26p | sed 's/%//g' `" util7="` cat iostat.txt | awk '{print $12}' | sed -n 27p | sed 's/%//g'`" util8="` cat iostat.txt | awk '{print $12}' | sed -n 28p | sed 's/%//g'`" util9="` cat iostat.txt | awk '{print $12}' | sed -n 34p | sed 's/%//g'`" util10="` cat iostat.txt | awk '{print $12}' | sed -n 35p | sed 's/%//g'`" util11="` cat iostat.txt | awk '{print $12}' | sed -n 36p | sed 's/%//g'`" util12="` cat iostat.txt | awk '{print $12}' | sed -n 37p | sed 's/%//g'`" #***********1/2/3/4**************** maxa=`echo "$scvtm1 $scvtm2 $scvtm3 $scvtm4" | awk '{for(i=1;i<=NF;i++)$i>a?a=$i:a}END{print a}'` #*************13/6/7/8/************** maxb=`echo "$scvtm13 $scvtm6 $scvtm7 $scvtm8" | awk '{for(i=1;i<=NF;i++)$i>a?a=$i:a}END{print a}'` #*************************9/10/11/12****************** maxc=`echo "$scvtm9 $scvtm10 $scvtm11 $scvtm12" | awk '{for(i=1;i<=NF;i++)$i>a?a=$i:a}END{print a}'` #********************util1/2/3/4********************** maxd=`echo "$util1 $util2 $util3 $util4" | awk '{for(i=1;i<=NF;i++)$i>a?a=$i:a}END{print a}'` #**********************util5/6/7/8******************* maxe=`echo "$util5 $util6 $util7 $util8" | awk '{for(i=1;i<=NF;i++)$i>a?a=$i:a}END{print a}'` #***********************util9/10/11/12*************** maxf=`echo "$util9 $util10 $util11 $util12" | awk '{for(i=1;i<=NF;i++)$i>a?a=$i:a}END{print a}'` #******************做判断************************ m=${maxa:0:1} n=${maxb:0:1} h=${maxc:0:1} k=${maxd:0:1} l=${maxe:0:1} o=${maxf:0:1} if [ $m -ge 15 ]&&[ $k -ge 99 ]&&[ $k -lt 100 ]$$[ $n -ge 15 ]&&[ $l -ge 99 ]&&[ $l -lt 100 ]&&[ $h -ge 15]&&[ $o -ge 99 ]&&[ $o -lt 100 ] then echo "`date '+%Y年%m月%d日 %H:%M:%S'` 数据库服务器磁盘IO存在瓶颈,请及时处理!" >> ./newreport.txt else echo "磁盘IO正常!" fi rm -rf ./iostat.txt #*********************************网络连通性检测********************** network1=`ping -s 4096 -c 5 135.0.51.15 | awk '{print $6}' | sed -n 9p | sed 's/%//g' |sed 's/t//g'` if [ $network1 -gt 0 ] then echo "`date '+%Y年%m月%d日 %H:%M:%S'` 数据库服务器到该目标IP之间的网络不稳定,ping取到的值是$network1,大于参考值是0,系统存在风险,请及时处理!" >> ./newreport.txt else echo "网络连通性正常!" fi echo "`date '+%Y年%m月%d日 %H:%M:%S'` 数据库服务器硬件情况巡检结束!"
相关文章推荐
- 使用shell脚本采集系统cpu、内存、磁盘、网络等信息
- 使用shell脚本采集系统cpu、内存、磁盘、网络等信息
- shell采集系统cpu 内存 磁盘 网络信息
- 使用 ksar 工具分析10个方面系统性能 ——磁盘 I/O、网络、CPU 、内存、NFS 、系统中断、内存分页
- python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)
- shell采集系统cpu 内存 磁盘 网络信息
- 使用shell脚本采集系统cpu、内存、磁盘、网络等信息
- Linux服务器性能评估(cpu,内存,磁盘IO)
- 使用shell脚本采集系统cpu、内存、磁盘、网络等信息
- Shell采集系统cpu 内存 磁盘 网络信息
- linux性能问题(CPU,内存,磁盘I/O,网络)
- linux系统CPU,内存,磁盘,网络流量监控脚本
- 服务器性能评估(cpu,内存,磁盘IO)
- Windows系统CPU内存网络性能统计第一篇 内存
- Windows系统CPU内存网络性能统计第四篇 CPU 多核CPU各核使用率C++
- linux性能问题(CPU,内存,磁盘I/O,网络)
- Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率
- 服务器性能评估(cpu,内存,磁盘IO)
- 内存文件系统提升磁盘性能瓶颈