Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40312
  • 博文数量: 26
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 16
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-15 11:11
文章分类

全部博文(26)

文章存档

2019年(1)

2010年(9)

2009年(1)

2008年(9)

2006年(6)

我的朋友

分类:

2010-01-26 20:03:43

使用Shell脚本监控梭子鱼邮件网关邮件队列

作者:zlj2208

修改日期:2010年0126

转载请注明转自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


阅读(1552) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~