如何利用Shell监控站群状态?解决方案

/ 1评 / 0

站群是一个很庞大的IP+域名的群体,多则几千个,少则几十个起码的!那么这么多的站群怎么去监控它的状态是正常的呢?现在市面上很多比如阿里云监控,监控宝什么的一大堆.但是Sandy懒的很不想一个一个去添加,所以Sandy还是比较倾向于Shell.网站很多大神都写有方案,看了一下基本都是15年之前写的.前人累积 后人拾遗,那么Sandy就来更新以及抄袭一下大神之作.废话不多说~"来屎狗"

老规矩这里要先列出执行脚本的环境:

操作系统:Ubuntu 16.x

使用到的组件:sendmail mutt

1.安装sendmail

apt-get install sendmail
/etc/init.d/sendmail start

需要安装sendmail并开启防火墙的25端口,如果你需要收邮件110端口也要开!

2.安装mutt邮件客户端,并设置相关信息

apt-get install mutt
vi /root/.muttrc
set charset="utf-8"           #设置发邮件编码
set use_envelope_from=yes
set rfc2047_parameters=yes    #解决附件乱码问题
set realname="报警"           #发件人别名
set use_from=yes              #指定是否显示别名
set from=root@localhost       #发送人地址,当前主机名称,若配置其他邮箱,需配置协议主机名和密码

3.建立url列表

vi url
www.baid1u.com #故意写错百度域名,等会测试用!多个域名则一行一个

4、创建脚本:check_web.sh

#!/bin/bash
#====================================================
# Author: sandy
# Last modified: 2018-4-17 
# Filename: check_web.sh
# blog:http://blog.e9china.net
#====================================================
while true
do
    Mail="xxxxx@163.com" 
    FailCount=0
    Retval=0
    GetUrlStatus() {
    for ((i=1;i<=3;i++))     #使用i++判断访问次数,如果wget两次超时则判断网站异常
    do
        wget -T 3 --tries=1 --spider http://${1} >/dev/null 2>&1
        #-T超时时间,--tries尝试1次,--spider蜘蛛
        [ $? -ne 0 ] && let FailCount+=1;    #访问超时时,$?不等于0,则FailCount加1
    done
    if [ $FailCount -gt 1 ];then
        Retval=1
        Date=`date +%F" "%H:%M`
        echo -e "时间 : $Date\n问题 : $url 您的网站未能运行,请赶紧处理!" | mutt -s "WEB网站监控" $Mail
    else
        Retval=0
    fi
        return $Retval        #如果返回值为0,就正常退出循环,不为0则继续循环
     }
for url in `cat url | sed '/^#/d'`
do
    #GetUrlStatus $url && echo yes || echo no
    GetUrlStatus $url
done
sleep 2m            #死循环,设置没2分钟运行一次
done

5.检查文件

root@host:~# ls
root@host:~# check_web.sh  Mail  url #如果检查以后出现报警就多出一个sent的文件

6.测试运行

bash check_web.sh

在生成环境下使用

root@host:~# screen -S web
root@host:~# bash check_web.sh

也可以使用crontab来,具体方法就不多说.具体看以往的帖子

  1. Semnew说道:

    巧妙的利用Google AdSense的网页级广告增加自己的收入 老板.这个文章我为什么不可以评论..

发表评论

邮箱地址不会被公开。 必填项已用*标注