linuxのCPUメモリディスクデータをモニタするshellスクリプト(図)

5024 ワード

shellスクリプトを共有して、linuxサーバーのCPU、メモリ、ディスクデータなどの情報を監視して、必要な友达が参考にしてください.
linuxでcpu、メモリ、ディスクデータなどの情報を監視するにはshellスクリプトが最適です.
次のスクリプトは、CPU圧力をテストするために使用されます.受信パラメータは、CPUの数です.
例:#./killcpu.sh 2は2つのプロセス番号を生成し,この2つのプロセス番号を記憶し,テスト後にプロセスを殺し,CPUリソースを解放する.
コードは次のとおりです.

    #!/bin/sh   
   
# filename killcpu.sh 
for i in `seq $1` 
do 
  echo -ne "  
i=0;  
while true  
do  
ii=i+1;  
done" | /bin/sh & 
  pid_array[$i]=$! ; 
done 
for i in "${pid_array[@]}"; do 
  echo 'kill ' $i ';'; 
done

呼び出しの例を次に示します.
以下は、サーバCPU、メモリMEM、ディスクDISKデータをモニタする主なスクリプトです.コードは次のとおりです.
 
   

#!/bin/bash 
#filename seerver_moniter.sh

mem_quota=20 
hd_quota=50 
cpu_quota=80
 
# watch memory usage 
 
watch_mem() 

  memtotal=`cat /proc/meminfo |grep "MemTotal"|awk '{print $2}'` 
  memfree=`cat /proc/meminfo |grep "MemFree"|awk '{print $2}'` 
  cached=`cat /proc/meminfo |grep "^Cached"|awk '{print $2}'` 
  buffers=`cat /proc/meminfo |grep "Buffers"|awk '{print $2}'` 
 
  mem_usage=$((100-memfree*100/memtotal-buffers*100/memtotal-cached*100/memtotal)) 
 
  if [ $mem_usage -gt $mem_quota ];then 
    mem_message="WARN! The Memory usage is over than $mem_usage%" 
    return 1 
    else 
    return 0 
  fi 
}
# watch disk usage 
 
watch_hd() 

  sda1_usage=`df |grep 'sda1'|awk '{print $5}'|sed 's/%//g'` 
  sda2_usage=`df |grep 'sda2'|awk '{print $5}'|sed 's/%//g'` 
  lv01_usage=`df |grep opt|awk '{print $4}'|sed 's/\%//g'` 
  
  if [ $sda1_usage -gt $hd_quota ] || [ $sda2_usage -gt $hd_quota ] || [ $lv01_usage -gt $hd_quota ]; then 
    hd_message="WARN! The Hard Disk usage is over than $hd_quota%" 
    return 1 
    else 
    return 0 
  fi 
}

# watch cpu usage in one minute 
get_cpu_info() 

  cat /proc/stat|grep '^cpu[0-9]'|awk '{used+=$2+$3+$4;unused+=$5+$6+$7+$8} END{print used,unused}' 

 
watch_cpu() 

  time_point_1=`get_cpu_info` 
  sleep 60 
  time_point_2=`get_cpu_info` 
  cpu_usage=`echo $time_point_1 $time_point_2|awk '{used=$3-$1;total=$3+$4-$1-$2;print used*100/total}'` 
  
  if [[ $cpu_usage > $cpu_quota ]]; then 
    cpu_message="WARN! The CPU Usage is over than $cpu_quota%" 
    return 1 
    else 
    return 0 
  fi 

 
proc_cpu_top10() 

  proc_busiest=`ps aux|sort -nk3r|head -n 11` 
}

report=/root/server_report.log 
watch_mem 
if [ $? -eq 1 ]; then 
  date >> $report 
  echo "$mem_message" >> $report 
fi 
 
watch_hd 
if [ $? -eq 1 ]; then 
  date >> $report 
  echo "$hd_message" >> $report 
fi 
 
watch_cpu 
if [ $? -eq 1 ]; then 
  date >> $report 
  echo "$cpu_message" >> $report 
  proc_cpu_top10 
  echo "$proc_busiest" >> $report 
fi 
 
if [ -a $report ]; then 
  mail -s "CUP/MEM/DISK Stat of Alarm" [email protected] < $report  
  rm -rf $report # ,
fi


スクリプトの説明:
#サーバCPU/MEM/DISKモニタスクリプト(server_monitr.sh)
#------------------------------------------------------------------ 
#サーバのCPU/MEM/DISKに閾値を設定し、利用率を動的に監視し、閾値を超えてメールを送信する
#またはメールアラート

#このスクリプトはwatch_を呼び出します.mem関数はメモリ利用率モニタリングを実現し、ここでのメモリ利用率計算はプロセス実である.
#間で使用されるメモリ、すなわちused-buffer/cacheは、しきい値を超えて息を送信します. 
#  
#watch_を呼び出すhd関数はディスクの利用率の監視を実現して、ここのディスクの利用率、私は採用します
#1つ1つのディスクまたはパーティションを取得します.この方法は、ディスクまたはパーティションが多い場合には、あまり便利ではない場合があります.
#便は、サイクル判定を採用できます. 
#  
#wath_を呼び出すcpu関数はCPU利用率モニタリングを実現し、ここでは1分間に2回採取する
#セット/proc/statのCPUデータ、さらに1回の採取ポイント毎のデータにおけるCPU使用時間とアイドルCPUの場合
#間加算加算、最後に2回の採集点演算結果を差分し、CPUの1分間クラス#使用時間利用率を得る.
しきい値を超えるとメッセージが送信される計算方法が正確です. 

#各関数に判定戻り値を設定し、しきい値を超えた場合、条件が真の場合は1、戻り値
#が1の場合はアラートメッセージをreportに添付し、最後にreportファイルの場合は
#存在します.メール通知管理者を送信し、reportをメールの本文とします. 
#
#このスクリプトをタイミングタスクに追加し、10分おきにチェックを実行できます.
#------------------------------------------------------------------
スケジュールタスクに参加するには、次の手順に従います.

    10 * * * * /home/topgkw/server_moniter.sh 
  

このスクリプトは10分ごとに呼び出されます.呼び出しの例を次に示します.
ソース:http://www.jbxue.com/article/10788.html