在伺服器較多的系統環境中,手工運維方式顯然已經不能滿足需求,當故障發生時,我們需要提前獲得預警消息,及時解決故障隐患。同時還要省時省力,通過SHELL腳本來協助我們完成一些重複性的工作是一個不錯的選擇。這裡主要提供了CPU、記憶體、磁盤使用率監控的SHELL腳本。可以根據自己的系統環境做簡單的修改即可使用。
附CPU壓力測試SHELL腳本(網上找到的,經測試可用)執行腳本時後面添加CPU數量,如:
./killcpu.sh 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 ';';
# 伺服器CPU/MEM/DISK監控腳本(server_moniter.sh)
#------------------------------------------------------------------
# 對伺服器的CPU/MEM/DISK設定門檻值,動态監控使用率,超過門檻值發送郵件
# 或者短信告警
#
# 本腳本通過調用watch_mem函數實作記憶體使用率監控,這裡的記憶體使用率計算是程序實
# 際使用的記憶體,也就是used-buffer/cache,超過門檻值發送息。
#
# 通過調用watch_hd函數實作磁盤使用率監控,這裡的磁盤使用率,我采用
# 一個一個磁盤或分區檢索,這種方式對于磁盤或分區較多時,可能不太方
# 便,可以采用循環判斷。之前提供的腳本裡面有,可以參考。
# 通過調用wath_cpu函數實作CPU使用率監控,這裡是通過在一分鐘内2次采
# 集/proc/stat中的CPU資料,再對每1次采集點的資料中的使用CPU時間與空閑CPU時
# 間累加求和,最後将2次采集點運算結果求差,獲得CPU在一分鐘類# 使用時間使用率,
# 這種計算方式比較準确,如果超過門檻值發送消息。
# 在每一個函數中設定一個判斷傳回值,如果超過門檻值,條件為真則傳回1,如果傳回值
# 為1則 将告警消息附加到report中,最後如果report這個檔案
# 存在,發送郵件通知管理者,将report做為郵件的正文。
#
# 可以将這個腳本添加到定時任務,每隔10分種執行一次檢查。
#! /bin/bash
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%"
# 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%"
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
echo "$hd_message" >> $report
watch_cpu
echo "$cpu_message" >> $report
proc_cpu_top10
echo "$proc_busiest" >> $report
if [ -a $report ]; then
mail -s "CUP/MEM/DISK Stat of Alarm" [email protected] < $report
rm -rf $report
本文轉自清風拂面 51CTO部落格,原文連結:http://blog.51cto.com/crazy123/1166387