zoukankan      html  css  js  c++  java
  • tomcat监控脚本(监控进程,测试接口,告警动作为发送邮件)

    服务器环境:centos7.2 64位 tomcat8.5.6

    tomcat 监控功能共需要两个脚本,如下:
    initMonitor.sh

    #!/bin/sh
    #初始化监控脚本相关变量
    export tomcat_name=apache-tomcat-8.5.6
    export tomcat_home=/usr/local/apache-tomcat-8.5.6
    #测试接口访问地址
    export webUrl=127.0.0.1:8080/yanglao/sysUserController/sysTest
    #监控脚本日志路径
    export tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log
    export email_address=ruixin_yu@asdc.com.cn
    #执行tomcat监控脚本
    
    #获取当前脚本所在目录
    baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd)
    $baseDirForScriptSelf/tomcatMonitor.sh
    

    tomcatMonitor.sh

    #!/bin/sh
    # 获取tomcat进程ID /usr/local/tomcat_ds_api
    TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')  
    # tomcat启动程序
    StartTomcat=$tomcat_home/bin/startup.sh
    # 日志输出 
    if [ -f $tomcatMonitorLog ]; then
       echo "日志文件已创建"
    else
       echo "日志文件为创建,马上创建!"
        touch $tomcatMonitorLog
    fi
    #tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log 
    TryConnection(){
        echo $tomcat_name 
        echo '$tomcat_name'
      TryTomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')  
      echo "[info]开始重新查看tomcat进程:$TryTomcatID...[$(date +'%F %H:%M:%S')]"  
      if [[ $TryTomcatID ]];then
        echo "[info]当前tomcat进程ID为:$TryTomcatID,继续重新检测接口..."  
        # 检测是否启动成功(成功的话接口会返回状态"200") 
        TomcatServiceCodeTry=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code}) 
        if [[ $TomcatServiceCodeTry -eq 200 ]];then  
            echo "[info]系统接口返回码为$TomcatServiceCodeTry,tomcat重启成功,访问系统接口正常......"  
            echo "[error]发送告警关闭邮件"  
            echo "tomcat重启成功,访问系统接口正常 [$(date +'%F %H:%M:%S')]"|mail -s "智能养老项目告警关闭" $email_address
        else
        sleep 30
        TryConnection
        fi  
      else 
        sleep 30
        TryConnection
      fi
    }
    
    Monitor() 
    {  
      echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"  
      if [[ $TomcatID ]];then # 这里判断TOMCAT进程是否存在 
        echo "[info]当前tomcat进程ID为:$TomcatID,继续检测系统接口..."  
        # 检测是否启动成功(成功的话接口会返回状态"200") 
        TomcatServiceCode=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code}) 
        if [[ $TomcatServiceCode -eq 200 ]];then
            echo "[info]接口返回码为$TomcatServiceCode,tomcat运行正常,访问系统接口正常......"  
        else  
            echo "[error]访问系统接口出错,请注意......状态码为$TomcatServiceCode"  
            echo "[error]访问系统接口出错,开始重启tomcat"  
            echo "[error]发送告警开启邮件"  
            echo "由于访问系统接口出错,tomcat开始自动重启 [$(date +'%F %H:%M:%S')]"|mail -s "智能养老项目告警开启" $email_address
            kill -9 $TomcatID  # 杀掉原tomcat进程 
            sleep 3  
            rm -rf $TomcatCache # 清理tomcat缓存 
            $StartTomcat  
            sleep 3m
            TryConnection #检查是否启动成功
        fi  
      else  
        echo "[error]tomcat进程不存在!tomcat开始自动重启..."  
        echo "[info]$StartTomcat,请稍候......"  
        echo "[error]发送告警开启邮件"  
        echo "由于tomcat进程不存在 tomcat开始自动重启 [$(date +'%F %H:%M:%S')]"|mail -s "智能养老项目告警开启" $email_address
        rm -rf $TomcatCache  
        $StartTomcat  
        sleep 3m
        TryConnection #检查是否启动成功
      fi  
      echo "------------------------------"  
    }  
    Monitor>>$tomcatMonitorLog
    

    前期准备:

    1. 安装crontab
    2. 配置邮件发送环境

    脚本介绍:

    1. initMonitor.sh中可配置脚本中使用的变量,除参数配置外,此脚本中将调用tomcatMonitor.sh,此脚本再次调用的原因是export所设置的变量,仅在该shell以及它的子shell中有效。
    2. tomcatMonitor.sh为tomcat监控的业务逻辑脚本

    使用说明:
    1.将initMonitor.sh,tomcatMonitor.sh两个脚本放入服务器同级目录下(如:/usr/bin/yanglao)
    2.如需配置脚本对应变量,请编辑initMonitor.sh,不需要更改的可跳过此步
    3.使用crontab设置定时执行initMonitor.sh:
    1)# crontab -e
    2 )插入/5 * * * /usr/bin/yanglao/initMonitor.sh
    3)#systemctl reload crond
    #systemctl restart crond
    经过以上操作,脚本即可运行,开始检测tomcat。

    检测范围:tomcat进程关闭 , 系统接口无法访问
    告警动作:发送邮件至initMonitor.sh设置的邮件,并重启tomcat。
    重启后对tomcat重新进行检测,检测运行正常后,发送告警关闭邮件

    http://www.itwendao.com/article/detail/153863.html

    c:>curl -sL -w "%{http_code}" "www.baidu.com" -o /dev/null
    200
     
     
     
    我是状态码,还好不是返回250
    c:>curl -sL -w "我是状态码:%{http_code}" www.baidu.com -o /dev/null
    我是状态码:200
     
     
    ##从apache中剔除此节点
    sed -i 's/worker.controller.balance_workers=tomcat1,tomcat2,tomcat3/worker.controller.balance_workers=tomcat2,tomcat3/g' /usr/local/apache2/conf/workers.properties
    /usr/local/apache2/bin/apachectl graceful
  • 相关阅读:
    hdu 1716 排列
    codevs 2597 团伙
    创建了一个静态数组,越界访问为什么不报错
    hdu 2083 简易版之最短距离
    hdu 2073 无限的路
    hdu 2060 Snooker
    hdu 1877
    hdu 1042 N!
    hdu 1799 循环多少次?
    百练:2972 确定进制
  • 原文地址:https://www.cnblogs.com/sos-blue/p/6819470.html
Copyright © 2011-2022 走看看