使用shell监控应用运行状态通过企业微信接收监控通知

目的:编写shell脚本来监控应用服务运行状态,若是应用异常则自动重启应用通过企业微信接收监控告警通知

知识要点:

  1. 使用shell脚本监控应用服务
  2. 使用shell脚本自动恢复异常服务
  3. 通过企业微信通知接收监控结果
  4. shell脚本使用数组知识,统计数据元素个数
  5. shell脚本使用变量叠加知识
  6. shell脚本使用算术知识

一、一键启停脚本

一键启停脚本目的是为了能够快速的批量查看服务器上运行的应用状态以及一键批量启动或者停止应用

bash 复制代码
#!/bin/bash
#一键启动、停止和查看云苍穹部分组件运行状态
#for app in  mysqld zookeeper rabbitmq-server redis-6379 nginx mdd mservice mservice-qing mc fileserver kafka logstash zipkin es;do
apps=(zookeeper rabbitmq-server redis-6379 nginx mdd  kafka logstash  es)
# for app in  zookeeper rabbitmq-server redis-6379 nginx mdd  kafka logstash  es ;do
for app in "${apps[@]}";do
        case $1 in
                start) systemctl start $app
                ;;
                
                # 检查应用是否运行 
                status) 
                    systemctl is-active $app 2>&1 >/dev/null # 引用正常运行会输出 active 字段,且返回结果为 0
                    if [ $? -eq 0 ];then

                      echo -e "\033[33m"
                      echo "$app" is running...
                      echo -e "\033[0m"

                    else
                      echo -e "\033[31m"
                      echo "$app is not running..." 
                      echo -e "\033[0m"
                    fi
                ;;

                stop) systemctl stop $app
                ;;

                restart) systemctl stop $app; 
                         sleep 1s; 
                         systemctl start $app
	          	 ## systemct  status $app
                ;;

                *) echo "usage $0 start|stop|status "
                ;;
        esac
done

二、应用服务监控脚本

编写应用服务监控脚本,配置定时任务,定时监控应用,一旦检查到应用内运行异常则自动重启,并将结果通知发送到企业微信。

bash 复制代码
#!/bin/bash
# 使用前提: 所有应用服务器都配置 systemd
# 定时任务:  */5 * * * * /local/monitorApp.sh 2>&1 /dev/null
# cat monitorApp.sh
# creator: @tudou
# date 2023-07-17 

# 需要检查的应用列表,可自行修改素组内容/元素为需要监控的应用服务名
apps=(zookeeper rabbitmq-server redis-6379 nginx mdd  kafka logstash  es)
# apps=(docker jenkins nginx)

# 企业微信
function Weichat(){
    # 请修改该为你的企业微信群组机器人
    local webhook_key="你的企业微信秘钥"

    # 发送get请求
    curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$webhook_key" \
        -H 'Content-Type: application/json' \
        -d "{\"msgtype\": \"text\",\"text\": {\"content\": \"$$resultMessages\"}}"

}


# 应用异常才发送企业微信通知
function SendMessages(){
    if [ -n "$messages" ] && [ "$restartCount" -gt 0 ];then
        
        resultMessages=$messages
        echo -e "$resultMessages"  # 在控制台输出结果
        
        # Weichat   # 企业微信发送结果通知
    fi

}

# 脚本监控动作
function AppAction(){

# 需要监控的应用名
    #for app in  mysqld zookeeper rabbitmq-server redis-6379 nginx mdd mservice mservice-qing mc fileserver kafka logstash zipkin es;do
    # apps=(zookeeper rabbitmq-server redis-6379 nginx mdd  kafka logstash  es)
    
    # 数组中元素的总数
    count=${#apps[@]}
    
    # 初始化应用异常数
    errorCount=0

    # 初始化应用正常数
    successCount=0

    # 初始化重启应用数
    restartCount=0
     
    # 初始化重启应用变量和结果变量
    unset restartApp
    unset messages

    # 遍历所有应用
    for app in "${apps[@]}"
    do
        # 核对应用是否运行状态(active)
        sudo systemctl is-active $app 2>&1 >/dev/null
        if [ $? -eq 0 ];then
           echo "$app is running..."

        else
           # 重启异常的应用
           sudo systemctl restart $app
            
           # 统计重启的应用数量
           let restartCount++
            
            # 用变量记录重启的应用名,将另一个字符串连接到变量的末尾
            #restartApp="${restartApp} \n$app"
            restartApp="${restartApp} $app"

           # 检查重启后应用是否正常
           systemctl is-active $app 2>&1 >/dev/null
           if [ $? -ne 0 ];then
              # 统计重启仍然失败的应用数量
              let errorCount++
           fi
        fi
    done



# 计算正常运行的应用数量
let successCount=$count-$errorCount

# 使用变量存储最后结果
    messages=$(cat << EOF
标题: 应用异常通知
监控的应用总数量:$count
重启后运行应用数量:$successCount
发生重启的应用数量: $restartCount
重启后仍异常的应用数量: $errorCount
发生重启的应用有: $restartApp
提示:请检查异常的原因
系统当前时间:$(date)
EOF
)

}


# 执行脚本函数
AppAction
SendMessages
相关推荐
喵喵酱仔__5 天前
web:pc端企业微信登录-vue版
企业微信
源源配蔡7 天前
Linux24.04 安装企业微信
企业微信·deepin·linux24.04
小阿鑫8 天前
微信授权全链路打通指南
企业微信·微信授权·企业微信授权·微信网页oauth
m0_7482509310 天前
【企业微信自建应用-前端篇】企业微信自建应用开发流程详细介绍
前端·企业微信
小袁同学.10 天前
企业微信可信域名个人配置方法,个人添加企业微信可信IP方法5.0版本,无论是否企业认证都通用。
网络协议·tcp/ip·企业微信
童安格粉丝10 天前
Grafana配置告警规则推送企微机器人服务器资源告警
机器人·企业微信·grafana·告警·dashboard·阈值
阿俊仔(摸鱼版)12 天前
python获取Windows事件日志并发送到企业微信邮箱
windows·python·企业微信
摆烂仙君1 个月前
企业微信定位打卡
人工智能·企业微信
蒙特网站1 个月前
钉钉与企业微信机器人:助力网站定时任务高效实现
机器人·钉钉·企业微信
007php0071 个月前
GoZero对接GPT接口的设计与实现:问题分析与解决
java·开发语言·python·gpt·golang·github·企业微信