監視システムが無い場合は、監視スクリプトを都度作成してきた
もういいかげんに、記録として残して使いまわそうと思う
動作には、netcat が必要です
RedHat 系は、yum install nc
Debian 系は、apt-get install netcat
でインストールしてください
--- host-check.sh ---
#!/bin/bash
###
### yum install nc
###
MAILCOUNT="3"
MAILTO="aaabbb@ddd.com"
MAILSUB_OK="["`hostname -s`"]host check OK"
MAILSUB_NG="["`hostname -s`"]host check NG"
CHECKHOSTS="### CHECK HOST LIST #############
############### IP address で記載願います ###
173.194.38.127:80
www.google.co.jp:80
133.24.255.146:80
133.24.255.153:80
133.24.255.161:80
###################################"
PG_MAIL="mail"
echo -n "" >/tmp/__"${0##*/}"_diff.tmp
touch /tmp/__"${0##*/}"_last-time.tmp
touch /tmp/__"${0##*/}"_this-time.tmp
###debug
###echo "${CHECKHOSTS}"
###echo "============="
CHECKHOSTS=`echo "${CHECKHOSTS}" \
| sed 's/#.*//g' \
| sed 's/[[:space:]]//g' \
| sed '/^$/d' `
###debug
###echo "${CHECKHOSTS}"
echo -n "" >/tmp/__"${0##*/}"_this-time.tmp
echo -n "" >/tmp/__"${0##*/}"_mail.txt
for LINE in ${CHECKHOSTS}
do
TARGETHOST=`echo "${LINE}" | sed 's/:[0-9][0-9]*$//g'`
TARGETPORT=`echo "${LINE}" | sed 's/.*:\([0-9][0-9]*\)$/\\1/g'`
###echo "TARGETHOST= ${TARGETHOST}"
###echo " TARGETPORT= ${TARGETPORT}"
CHECKLOG=`nc -z -v -w 2 "${TARGETHOST}" "${TARGETPORT}" 2>&1 ` ; RESULT="${?}"
if [ "${RESULT}" = "0" ] ; then
###echo "= OK = ${TARGETHOST} :${TARGETPORT}"
echo "= OK = ${TARGETHOST} :${TARGETPORT}" >>/tmp/__"${0##*/}"_mail.txt
else
###echo "= NG = ${TARGETHOST} : "` echo "${CHECKLOG}" | head -1 `
echo "= NG = ${TARGETHOST} : "` echo "${CHECKLOG}" | head -1 ` \
>>/tmp/__"${0##*/}"_mail.txt
echo "${TARGETHOST}:${TARGETPORT}" \
>>/tmp/__"${0##*/}"_this-time.tmp
fi
done
diff /tmp/__"${0##*/}"_last-time.tmp /tmp/__"${0##*/}"_this-time.tmp \
>/tmp/__"${0##*/}"_diff.tmp
CHECKSTR=`cat /tmp/__"${0##*/}"_diff.tmp | sed '/^$/d' \
``cat /tmp/__"${0##*/}"_last-time.tmp \
| sed '/^$/d'`
cp /tmp/__"${0##*/}"_this-time.tmp /tmp/__"${0##*/}"_last-time.tmp
rm /tmp/__"${0##*/}"_this-time.tmp
if [ "${CHECKSTR}" = "" ] ; then
echo "0" >/tmp/__"${0##*/}"_mail-count.txt
exit 0
fi
RECOVER=`cat /tmp/__"${0##*/}"_diff.tmp | grep '<' | wc -l`
NEWALERT=`cat /tmp/__"${0##*/}"_diff.tmp | grep '>' | wc -l`
###echo "==================================="
###echo "${RECOVER}"
###echo "==================================="
###echo "${NEWALERT}"
###echo "==================================="
if [ ! "${NEWALERT}" = "0" ] ; then
###debug
rm /tmp/__"${0##*/}"_mail_tmp.txt 2>/dev/null
touch /tmp/__"${0##*/}"_mail_tmp.txt
cat /tmp/__"${0##*/}"_mail.txt >/tmp/__"${0##*/}"_mail_tmp.txt
echo "### new alert !!! "`date '+%Y-%m-%d %H:%M:%S'`" ###" \
>/tmp/__"${0##*/}"_mail.txt
cat /tmp/__"${0##*/}"_diff.tmp | grep '>' >>/tmp/__"${0##*/}"_mail.txt
echo "########" >>/tmp/__"${0##*/}"_mail.txt
echo "" >>/tmp/__"${0##*/}"_mail.txt
cat /tmp/__"${0##*/}"_mail_tmp.txt >>/tmp/__"${0##*/}"_mail.txt
echo "1" >/tmp/__"${0##*/}"_mail-count.txt
cat /tmp/__"${0##*/}"_mail.txt | ${PG_MAIL} -s "${MAILSUB_NG}" "${MAILTO}"
exit 0
fi
if [ "${NEWALERT}" = "0" ] ; then
DIFFSTR=`cat /tmp/__"${0##*/}"_diff.tmp`
if [ "${DIFFSTR}" = "" ] ; then
touch /tmp/__"${0##*/}"_mail-count.txt
COUNT=`cat /tmp/__"${0##*/}"_mail-count.txt | tail -1`
COUNT=`expr 0${COUNT} + 1`
echo "${COUNT}" >/tmp/__"${0##*/}"_mail-count.txt
###debug
###echo "==================================="
###echo "COUNT=${COUNT}"
###echo "==================================="
if [ "${COUNT}" -gt "${MAILCOUNT}" ] ; then
exit 0
fi
cat /tmp/__"${0##*/}"_mail.txt | ${PG_MAIL} -s "${MAILSUB_NG}" "${MAILTO}"
exit 0
###else
###debug
###echo "==================================="
###echo "COUNT=${COUNT}"
###echo "==================================="
###cat /tmp/__"${0##*/}"_mail.txt
fi
if [ ! "${RECOVER}" = 0 ] ; then
###debug
###echo ""
###echo "### RECOVER ####"
###echo ""
echo "" >>/tmp/__"${0##*/}"_mail.txt
echo "### RECOVER "`date '+%Y-%m-%d %H:%M:%S'`" ###" \
>>/tmp/__"${0##*/}"_mail.txt
cat /tmp/__"${0##*/}"_diff.tmp \
| grep '<' \
| sed 's/= NG = //g' >>/tmp/__"${0##*/}"_mail.txt
cat /tmp/__"${0##*/}"_mail.txt | ${PG_MAIL} -s "${MAILSUB_OK}" "${MAILTO}"
fi
fi
--------