Shell 写的 Linux 服务器 几个监控点
如果是服务器少还好说。如果管理的服务器多服务器的监控是少不了的,
可以用软件监控也可以用 shell 来做监控
列如 我陪到 好几次 服务器 磁盘空间不够了。。
网速被服务器托管给降下来。。等等
上次写的那个shell 有一点点问题。这次改正了。
还是老样子 有问题发邮件提示。
用Android 做邮件接收的软件还在开发中。。由于空闲时间比较少。。开发进度比较慢。。。
不过我们老板告诉我一个解决的办法了。
用 移动 的 139 邮箱。在邮箱里设置 收到邮件立即发短信通知 ,,大家可以式式。。
# !/bin/bash
# @author : chase or 诺瓦
# date 2010-09-23
########################################################################
# This scripts is checking the network and Cpu and disk and memory , vision 2.1 Bate
# 监控 检查 带宽 、Cpu 、磁盘 、内存
# Write by finddream
# If you have some advise about it ,you can mail : [email protected] or QQ : 287781459
########################################################################
## variable ## 如果没有设环境变量就必须得加入
# ECHO=/bin/echo
# SED=/bin/sed
# AWK=/bin/awk
# UPTIME=/bin/uptime
# VMSTAT=/usr/bin/vmstat
# FREE=/usr/bin/free
# IPTABLES=/sbin/iptables
# GREP=/bin/grep
# TOP=/usr/bin/top
# HEAD=/usr/bin/head
# DF=/bin/df
# CAT=/bin/cat
typeset inv in_old dif_in
typeset out out_old dif_out
typeset timer
typeset eth
# info and logs main dir 记录信息的主目录
DIR_PATH='/home/logs' ## 信息存放的主目录
DATA_V="`date`" ## 时间
HOSTNAMEL="`hostname`" ## 主机名
eth='eth0' ## 网卡
timer=3 ## 监检多少时间
# 邮件
MAIL_title="warning: server name=>$HOSTNAMEL"
MAIL_Etitle="error: server name=>$HOSTNAMEL"
MAIL_TO="[email protected]"
MESSAGE="$DIR_PATH/mail_message.log"
#####
# @author : chase or 诺瓦
# cpu
NOW_CPU=`top -n 1 |grep 'Cpu(s)' |awk -F '%' '{print $1}' | awk -F ' ' '{print $2}' | awk -F . '{print $1}'`
echo "Time: $DATA_V ==> CPU : $NOW_CPU">>"$DIR_PATH/cpul.log"
# CPU 超过 98% 发邮件 通知
if [ "$NOW_CPU" -ge "95" ]; then
echo "Time: $DATA_V ==> CPU : $NOW_CPU %">>"$DIR_PATH/cpu_log.log"
echo "Time: $DATA_V , server name : $HOSTNAMEL ==> CPU : $NOW_CPU % ">>$MESSAGE
mail -s "$MAIL_TITLE cpu" "$MAIL_TO" < $MESSAGE
rm -rf $MESSAGE
##################################### web server
# @author : chase or 诺瓦
# 是 apache 就可以重启 apache
if [ "$NOW_CPU" -ge "99" ]; then
/www/servers/httpd-2.2.15/bin/httpd -k stop
sleep 1;
#rm -fr /www/web/iximo/wwwiximo/temp/compiled/*
/www/servers/httpd-2.2.15/bin/httpd -k start
echo "apache restart =>Time:$DATA_V ,Host:$HOSTNAMEL == CPU : $NOW_CPU ">>"$DIR_PATH/httpd_restart.log";
# 判断是否己启动 四次循环
wcount=1
twhile=true
while [ twhile ]
do
# 休息 2 秒
sleep 2;
tinfo_val=`curl http://www.6688.cc/check.php`
if [ $tinfo_val == "ok" ]
then # 己启动
twhile=false
break;
else # 没启动成功 重启启动
# rm -fr /www/web/iximo/wwwiximo/temp/compiled/*
/www/servers/httpd-2.2.15/bin/httpd -k start
fi
# 启动四次还没有成功
let "wcount = $wcount + 1"
if [ "$wcount" -gt "4" ]; then
echo "apache start error =>Time:$DATA_V ,Host:$HOSTNAMEL">>"$DIR_PATH/httpd_error.log";
echo "Time: $DATA_V , server name : $HOSTNAMEL ==> apache : restart fail ">>$MESSAGE
mail -s "$MAIL_ETITLE error apache" "$MAIL_TO" < $MESSAGE
rm -rf $MESSAGE
twhile=false
break;
fi
sleep 1;
done
fi
##################################### web server
fi
#####
# @author : chase or 诺瓦
# 带宽
in_old=$(cat /proc/net/dev | grep $eth | sed -e "s/\(.*\)\:\(.*\)/\2/g" | awk ' { print $1 }' )
out_old=$(cat /proc/net/dev | grep $eth | sed -e "s/\(.*\)\:\(.*\)/\2/g" | awk ' { print $9 }' )
sleep ${timer}
inv=$(cat /proc/net/dev | grep $eth | sed -e "s/\(.*\)\:\(.*\)/\2/g" | awk ' { print $1 }' )
out=$(cat /proc/net/dev | grep $eth | sed -e "s/\(.*\)\:\(.*\)/\2/g" | awk ' { print $9 }' )
dif_in=$(((in-in_old)/timer))
dif_out=$(((out-out_old)/timer))
echo "Time: $DATA_V ==>IN: ${dif_in} Byte/s OUT: ${dif_out} Byte/s">>"$DIR_PATH/networkl.log"
#####
# @author : chase or 诺瓦
# 磁盘
# 可以一周或一天检查一次
# df -h |grep / |uniq|sort|tr -s " "|cut -d " " -f 4-6
#
# df |grep / |uniq|sort|tr -s " "|awk -F '%' '{print $1}'|cut -d " " -f 5|sort -n | tail -n 1
#
# 记录磁盘
echo " ">>"$DIR_PATH/fdiskl.log"
echo "Time: $DATA_V ==> fdisk Space ===================================">>"$DIR_PATH/fdiskl.log"
echo "`df -h |grep / |uniq|sort|tr -s " "|cut -d " " -f 4-6`">>"$DIR_PATH/fdiskl.log"
# 磁盘到了一定的空间 发邮件给我 百分比 90% 通知我
typeset diskfile
diskfile=`df |grep / |uniq|sort|tr -s " "|awk -F '%' '{print $1}'|cut -d " " -f 5|sort -n | tail -n 1`
if [ "$diskfile" -ge "90" ]; then
echo "Time: $DATA_V ==>fdisk $diskfile % ===================================">>"$DIR_PATH/fdisk_full.log"
echo "Time: $DATA_V , server name : $HOSTNAMEL ==> fdisk : $diskfile % ">>$MESSAGE
mail -s "$MAIL_TITLE fdisk" "$MAIL_TO" < $MESSAGE
rm -rf $MESSAGE
fi
#####
# @author : chase or 诺瓦
# 内存 己用百分比
#
typeset mpercent
mpercent=`free -m |grep /cache |tr -s " " | awk -F '/cache' '{print $2}' |awk -F ' ' '{agvt=$2/($2+$3)*100; print agvt}' | awk -F '.' '{print $1}'`
echo "Time: $DATA_V ==>memory $mpercent %">>"$DIR_PATH/memory.log"
if [ "$mpercent" -ge "95" ]; then ## 95% 发邮件
echo "Time: $DATA_V ==>memory $mpercent %">>"$DIR_PATH/memory_warning.log"
echo "Time: $DATA_V , server name : $HOSTNAMEL ==> memory : $mpercent %">>$MESSAGE
mail -s "$MAIL_TITLE memory" "$MAIL_TO" < $MESSAGE
rm -rf $MESSAGE
fi