使用Shell脚本监控梭子鱼邮件网关邮件队列
作者:zlj2208
修改日期:2010年01月26日
转载请注明转自http://zlj2208.cublog.cn/
以前做SA时候写的监控梭子鱼邮件网关邮件队列脚本,当队列过多的时候报警。
原理很简单,访问 http://梭子鱼网关IP或域名:8000/cgi-bin/stats.cgi ,能够得到相详细信息,然后通过shell取得需要的数据进行处理。
下面是脚本内容:
#!/bin/bash #CompanyName City Barracuda Mail Gateway Status #Written by zlj2208 at 20081229 # #Define variable
P_DIR="/home/monitor/app" BIN_DIR="${P_DIR}/bin"
TMP_DIR="$P_DIR/tmp/check_mail_gateway" LOG_FILE="/home/monitor/app/logs/check_mail_gateway.log" STATUS_FILE="${TMP_DIR}/status.html" WGET_ERROR="${TMP_DIR}/wget_error.txt" MAIL_FILE="${TMP_DIR}/mail_info.txt" WARN_INFO="${TMP_DIR}/warn_info.txt" MAIL_TEMPLATE="${TMP_DIR}/mail_template.txt"
SCRIPT_NAME="${BIN_DIR}/`basename $0`"
MAIL_SEND_CMD="/usr/sbin/sendmail -t" DATE_TIME=`date "+%Y-%m-%d %H:%M:%S"`
QUEUE_VALUE="20" INBOUND_STR="inbound_queue_size" OUTBOUND_STR="outbound_queue_size" SERVER_IP=(mx1.company-name.com:172.16.17.88 mx2.company-name.com:172.16.17.89)
get_status() { wget -q -O ${STATUS_FILE} if [ -s ${STATUS_FILE} ] ; then : #echo ok else #echo Can not get the file. echo "ERROR: Can not get stats.cgi of $1 with wget." >> ${WGET_ERROR} break fi }
get_queue() { QUNUE_NAME=$1 IPADD=$2 DESC=$3 QUEUE_NUM=`grep ${QUNUE_NAME} ${STATUS_FILE} | awk -F"<|>" '{print $3}'` echo "${DESC} Queue: ${QUEUE_NUM}" if [ "${QUEUE_NUM}" -ge "${QUEUE_VALUE}" ] ; then echo "${IP} ${QUNUE_NAME} is more than ${QUEUE_VALUE} , please check it." >> ${WARN_INFO} fi }
warn_mail() { TO_MAIL="your-name1@company-name.com;your-name@company-name.com" FROM="serverwarn@company-name.com" cat <${MAIL_TEMPLATE} Subject:[ERROR] CompanyName(City) Mail Gateway Queue Notice From:${FROM} Return-Path:${FROM} To:${TO_MAIL} Reply-to:${FROM} Content-Type:text/plain;ChartSet=gb2312
Check Time:${DATE_TIME}
`cat $1`
This mail send by : ${SCRIPT_NAME}
EOF #cat ${MAIL_TEMPLATE}
${MAIL_SEND_CMD} < ${MAIL_TEMPLATE} }
rm -f ${STATUS_FILE} ${MAIL_FILE} ${WARN_INFO} ${WGET_ERROR} ${MAIL_TEMPLATE}
i=1 for VAR in `echo ${SERVER_IP[@]}` do IP=`echo ${VAR}|awk -F: '{print $2}'` NAME=`echo ${VAR}|awk -F: '{print $1}'` get_status $IP cat <>${MAIL_FILE}
NO.$i -----------${NAME} ${IP}-------------
`get_queue ${INBOUND_STR} ${IP} "Inbound"` `get_queue ${OUTBOUND_STR} ${IP} "Outbound"`
--------------END OF ${NAME}---------------
EOF i=$((i+1)) done
#cat ${MAIL_INFO} if [ -s ${WARN_INFO} ] ; then #echo QUEUE WARN: #cat ${WARN_INFO} cat <> ${WARN_INFO}
The following is detail info:
`cat ${MAIL_FILE}` EOF
#cat ${MAIL_FILE} >> ${WARN_INFO} #cat ${WARN_INFO}
warn_mail ${WARN_INFO}
else : #echo ok,no queue error fi
if [ -s ${WGET_ERROR} ] ; then warn_mail ${WGET_ERROR} fi
exit
|
阅读(1626) | 评论(0) | 转发(0) |