关闭

Linux服务器内存、CPU、文件系统、磁盘IO性能以及网络连通性shell巡检

标签: 系统巡检shell自动巡检shell服务器巡检shell自动巡检服务器服务器基本情况
1286人阅读 评论(0) 收藏 举报
分类:
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'` 数据库服务器硬件情况巡检结束!"




















1
0
查看评论

查看Linux服务器内存使用情况

转自:http://hi.baidu.com/chinalwb/item/a88e47c8da2e4f14b77a24d6 查看内存使用情况,可以使用命令 free -m 其结果大致如下:     ...
  • shanliangliuxing
  • shanliangliuxing
  • 2013-05-09 11:56
  • 7979

手动释放Linux服务器内存

手动释放Linux服务器内存       在服务器运行过程中,使用free -m查看服务器内存时,经常会发现free值很小,有些同学就会很紧张,总想采取一些措施,使得free值看起来高一点,心里就比较爽一点。其实,个人觉得这完全是图一时之快,没什么实质性...
  • s1070
  • s1070
  • 2017-02-28 15:25
  • 950

Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息

pom jar 包支持 代码
  • u011278496
  • u011278496
  • 2014-09-02 20:13
  • 4220

Linux服务器巡检报告

  • 2012-12-18 11:08
  • 362KB
  • 下载

Linux系统巡检常用命令

Linux系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题、解决问题,降低损失,常用的巡检命令如下: # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpu...
  • yyfpeak
  • yyfpeak
  • 2015-04-03 10:48
  • 1473

shell脚本获取CPU利用率并记录到远程服务器的MYSQL数据库

利用shell脚本收集CPU利用率并记录到mysql数据库中
  • u010352603
  • u010352603
  • 2015-03-20 23:33
  • 902

编写Shell脚本监测服务器状态

http://jiayf.blog.51cto.com/1659430/330316  利用Shell脚本来监控Linux系统的负载、CPU、内存、硬盘、用户登录数。   这几天在学习研究shell脚本,写的一些系统负载、CPU、内存、硬盘、用户数监控脚本程序。在没有...
  • pengchua
  • pengchua
  • 2012-09-22 21:45
  • 7140

获取linux服务器性能CPU、内存、硬盘等使用率 PHP

获取linux服务器性能CPU、内存、硬盘等使用率 PHP
  • sb___itfk
  • sb___itfk
  • 2016-08-08 16:05
  • 1516

linux服务器性能——CPU、内存、流量、磁盘使用率的监控

#!/bin/bash #这个脚本使用来统计CPU、磁盘、内存使用率、带宽的 total=0 system=0 user=0 i=0 time=`date "+%Y-%m-%d %k:%M"` day=`date "+%Y-%m-%d"` minute=`d...
  • u012859748
  • u012859748
  • 2017-05-25 16:51
  • 574

Linux系统巡检脚本

#!/bin/bash ################################################################### # Functions: this script from polling system status # Info: be suit...
  • wh211212
  • wh211212
  • 2016-10-04 20:40
  • 1482
    个人资料
    • 访问:56111次
    • 积分:1227
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:0篇
    • 译文:0篇
    • 评论:14条
    贵州中测信息技术有限公司
    友情链接
    最新评论