Linux服務器內存、CPU、文件系統、磁盤IO性能以及網絡連通性shell巡檢

shell自動巡檢服務器基礎配置
 ios

        每一個項目都要部署在服務器上,那麼服務器的安全性能和一些基本狀況是咱們須要瞭解的,好比服務器CPU、內存、文件系統、磁盤IO、還有一些網絡連通性等等,這些操做不少項目組都是安排一個特定的巡檢人員來完成,那麼爲何不寫一個shell腳原本自動巡檢服務器而代替人工操做呢,下面給出巡檢的標準與shell腳本代碼:

1、巡檢標準shell

1.1 CPU利用率巡檢

1) 執行巡檢指令(紅色字體部分):top,結果示例以下,該顯示結果會每隔3秒刷新一次。按【q】鍵可退出巡檢。數據庫

2) 關注圖中紅色標記部分,連續三次及以上低於20%,認爲CPU佔用率太高,系統存在風險。安全

 

1.2 內存利用率巡檢

1) 執行巡檢指令(紅色字體部分): free -g,(-g的意義是單位爲GB)結果示例以下。bash

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可能存在瓶頸,系統存在風險。spa

 

1.5 網絡連通性巡檢

1)執行巡檢指令(紅色字體部分):ping -s 4096 -c 5  135.0.51.12,結果示例以下。

2) 關注圖中紅色標記部分,若高於0%,認爲數據庫到該目標IP之間的網絡不穩定,存在丟包,系統存在風險。

 

2、巡檢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'` 數據庫服務器硬件狀況巡檢結束!"
相關文章
相關標籤/搜索