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

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

知识要点:

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

一、一键启停脚本

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

#!/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

使用shell监控应用运行状态通过企业微信接收监控通知_第1张图片

 二、应用服务监控脚本

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

#!/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

 

你可能感兴趣的:(linux,企业微信)