zoukankan      html  css  js  c++  java
  • centos5.8下用shell脚本监控服务器

    此监控脚本适用于centos5.8,在其他系统下不能保证监控脚本全部有效,可以将监控脚本里面的命令逐一测试。

    配置邮件服务

    想通过linux监控网站或者系统状况并自动报警,如何使用脚本发出邮件给外部邮箱呢?

    CentOS5自带的mailx是8.1版本的,不支持配置外部公网邮箱,可升级到最新版本12.4。

    查看centos5.8自带的版本

    rpm -qa | grep mailx
    

    clip_image002

    官方yum没有12.4的版本,可以编译安装

    cd /usr/local
    wget http://sourceforge.net/projects/heirloom/files/latest/download?source=files
    tar jxvf mailx-12.4.tar.bz2
    cd mailx-12.4
    make
    make install UCBINSTALL=/usr/bin/install
    

    百度网盘下载mailx-12.4

    如此即安装完毕。这时,如果没有卸载旧版本的mailx,是不能直接使用mailx或mail命令的,否则使用的仍然是旧版mailx。调用路径为:解压路径/mailx-12.4/mailx。例如我解压在/usr/local下,那我要使用新版mailx并查看版本号,则可以用/usr/local/mailx-12.4/mailx  -V 查看。

    为使得新版mailx更加易用,我们可以利用alias和.bashrc将mail命令指向该新版mailx:

    vim /root/.bashrc
    

    添加一行:

    alias mail='/usr/local/mailx-12.4/mailx'
    

    即时生效:

    source /root/.bashrc
    

    接下来配置新版mailx使用外部邮箱发送邮件:

    编辑/etc/nail.rc(注意不是旧版的/etc/mail.rc):vi /etc/nail.rc

    添加两行:

    set from=lijc@wiselong.com smtp=smtp.exmail.qq.com
    set smtp-auth-user=lijc@wiselong.com smtp-auth-password=password smtp-auth=login
    

    第一行指明所使用的外部邮箱及smtp服务器,第二行指明外部邮箱使用的用户名和密码。

    到此可以在命令行直接发邮件到外部邮箱了:

    echo hello! | mailx -s test lijc@wiselong.com
    

    到外部邮箱一看,邮件即刻收到了。

    clip_image004

    当然我们也可以将一个文件的内容作为邮件的正文发出去

    mailx -s test lijc@wiselong.com < /usr/local/test.txt

    如果要让脚本发邮件,脚本里面的命令需要调用安装目录下的mailx,不然发不出去。

    /usr/local/mailx-12.4/mailx -s警告 lijc@wiselong.com < /usr/local/test.txt
    

    设置监控脚本

    Vim sysmon.sh
    #网络延迟监控
    #>每次结果都会更新
    ping -c 5 www.baidu.com > /tmp/ping.txt 
    #每次结果追加到log.txt,记录网络延迟。
    ping -c 5 www.baidu.com >> /tmp/log.txt
    #看/tmp/log.txt文件大小,以M为单位
    sizi=`du -sm /tmp/log.txt | awk '{print $1}'`
    #查看ping百度5次最小ping值
    ping=`cat /tmp/ping | grep "rtt" |awk '{print $4}' | awk -F. '{print $1}'`
    #比较最小ping值是否大于50
    if [ $ping -gt 50 ]
    then echo "警告:网络延迟超过50ms!" >> /tmp/alert.txt
    fi
    #较log.txt文件,大于1014M,发送报警
    if [ $sizi -gt 1024 ] then echo "警告:/tmp/log.txt超过1024M!" >> /tmp/alert.txt
    fi
    #磁盘监控 #因为我们公司云服务器磁盘分区一般只有3个挂载点,所以只过滤3行结果
    fenqu1=`df -h | grep "/$" |awk '{print $5}' | awk -F% '{print $1}'`
    fenqu2=`df -h | grep "/$" |awk '{print $5}' | awk -F% '{print $2}'`
    fenqu3=`df -h | grep "/$" |awk '{print $5}' | awk -F% '{print $3}'`
    if [ $fenqu1 -gt 90 ] then echo "警告:磁盘使用超过90%!" >> /tmp/alert.txt fi
    #fenqu2比较大小
    if [ $fenqu2 -gt 90 ]
    then echo "警告:磁盘使用超过90%!" >> /tmp/alert.txt
    fi
    #fenqu3比较大小
    if [ $fenqu3 -gt 90 ]
    then echo "警告:磁盘使用超过90%!" >> /tmp/alert.txt
    fi
    #CPU监控
    IDLE=`expr 100 - $(mpstat | grep "all" | awk '{print $10}' | awk -F. '{print $1}')`
    if [ $IDLE -gt 80 ]
    then echo "警告:CPU使用超过80%!" >> /tmp/alert.txt fi
    #内存监控
    USED=`free | grep "cache:" | awk '{print $3}'`
    TOTAL=`free | grep "Mem:" | awk '{print $2}'`
    neicun=`expr $USED * 100 / $TOTAL`
    if [ $neicun -gt 90 ]
    then echo "警告:内存使用超过90%!" >> /tmp/alert.txt
    fi
    #TCP连接数监控
    TCP=`netstat -a | grep "ESTABLISHED"| awk -FESTABLISHED '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'`
    if [ $TCP -eq 200 ]
    then echo "警告:TCP连接数超过200!" >> /tmp/alert.txt
    fi
    #HTTP监控 #此URL存在,能返回200值
    URL1=`curl -o /dev/null -s -w "%{http_code}" "http://baidu.com/index.html"`
    #此URL不存在,不能返回200值
    #URL2=`curl -o /dev/null -s -w "%{http_code}" "http://baidu.com/index111.html"`
    #判断返回值是否等于200,不等于将报警
    if [ $URL1 -ne 200 ]
    then echo "警告:http://baidu.com/index.html不可访问" > /tmp/alert.txt
    fi
    #if [ $URL2 -ne 200 ]
    #then # echo "警告:http://baidu.com/index111.html不可访问" > /tmp/alert.txt
    #fi
    #邮件报警 #判断是否存在/tmp/alert.txt文件
    #以上所有监控超过阀值会产生/tmp/alert.txt文件,一旦有此文件,将触发邮件报警
    if [ -f /tmp/alert.txt ]
    then /usr/local/mailx-12.4/mailx -s 115.29.185.2警告 lijc@wiselong.com < /tmp/alert.txt
    #删除之前有警报产生了/tmp/alert.txt文件,下次再产生会邮件报警,不产生不报警
    rm -rf /tmp/alert.txt
    fi
    

    设置任务计划

    每10分钟运行一次监控脚本

    chmod +x sysmon.sh
    crontab -e
    */10 * * * * /root/bin/sysmon.sh
    service crond restart
    
  • 相关阅读:
    前端程序员的进阶
    字符集的知识
    通晓多种编程语言的程序员,真香?
    理解 Docker
    免费开源软件的潜在安全风险
    技术编程人员成长的 9 个段位
    如何更好的设计 RESTful API
    selenium环境搭建:
    自动化测试有哪些?
    删除书籍:
  • 原文地址:https://www.cnblogs.com/theitnotes/p/4162921.html
Copyright © 2011-2022 走看看