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

news2024/10/5 12:46:08

目的:编写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

 二、应用服务监控脚本

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[黑苹果EFI]Lenovo ThinkPad T490电脑 Hackintosh 黑苹果引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Lenovo ThinkPad T490 处理器Intel Intel Core i5 8265U (Quad Core)已驱动 内存16 GB:8 GB Samsung DDR 4 2666 Mhz *2已驱动 硬盘PC SN520 NVM…

maven项目使用java命令行运行类的main方式示例

因为需要测试一个东西,本地测试无问题,测试环境一直有问题,就想在测试环境测试下 直接写了个测试类,main方法直接运行测试逻辑 测试类写好,发现自己不会使用命令行运行 运行测试类一直报"错误: 找不到或无法加载主类" 折腾好久,终于找到两个帖子 记录下来,避免自己下…

Docker容器常用命令大全:熟练掌握使容器优化更加高效

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

mysql查询当天/昨天/近7天/近30天/本月/上个月/本季度/上季度/本年/上一年 数据

查询当天数据 select * from tab where FROM_UNIXTIME(fabutime, %Y%m%d) 20230717; mysql TO_DAYS(date) 函数 TO_DAYS(date) 给定一个日期date, 返回一个天数 (从年份0开始的天数 )。 mysql> SELECT TO_DAYS(950501); -> 728779 mysql查询今天、昨天、7天、近30天…

【Linux后端服务器开发】TCP协议

目录 一、TCP报头结构 二、确认应答机制 三、超时重传机制 四、连接管理机制 五、滑动窗口 六、拥塞控制 七、应答策略 一、TCP报头结构 TCP全称为传输控制协议&#xff08;Transmission Control Protocol&#xff09;&#xff0c;数据在传输过程需要严格的控制 TCP协议…

CONNECT BY 介绍以及用法

CONNECT BY 介绍以及用法 CONNECT BY作用是&#xff0c;NNECT BY用来查询树形数据&#xff0c; CONNECT BY 语句的用法 语句格式&#xff1a; start with 条件A connect by prior orgid parentorgid 用法 情况1&#xff1a; start with 条件A connect by…

【树链】CF1702 G

Problem - G2 - Codeforces 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;一条树链可以被分为两部分&#xff1a;左半部分和右半部分 我们可以把所有可能是链上的点排序&#xff0c;把深度最大的点默认成起点st&#xff0c;接下来去找终点ed ed在和st不同的链上 且 …

MSA【1】:Segment Anything Model for Medical Image Analysis: an Experimental Study

文章目录 前言1. Abstraction & Introduction1.1. Abstraction1.2. Introduction1.2.1. What is SAM?1.2.2. How to segment medical images with SAM? 2. Methodology2.1. SAM is used in the process of segmentation of medical images2.1.1. Semi-automated annotati…

【压力传感器】LPS22DFTR、LPS33KTR 绝对 压力,ADP5131 排气式压力计 50kPa 6-DIP

LPS22DFTR MEMS纳米压力传感器是一款超紧凑型压阻式绝对压力传感器&#xff0c;可用作数字输出气压计。LPS22DF的功耗更低&#xff0c;与上一代产品相比压力噪声更低。该器件包括一个传感元件和一个IC接口&#xff0c;通过I2C、MIPI I3CSM或SPI接口从传感元件向应用程序进行通信…

蒙德里安的梦想

题目 求把 NM 的棋盘分割成若干个 12 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4 时&#xff0c;共有 5 种方案。当 N2&#xff0c;M3 时&#xff0c;共有 3 种方案。 如下图所示&#xff1a; 输入格式 输入包含多组测试用例。 每组测试用例占一行&…

GO语言基础-04-数据类型-04-map(map的排序)

文章目录 1. 按value排序1.1 思路1.2 语法1.3 完整示例 2. 按key排序2.1 思路2.2 语法示例2.3 完整示例2.4 完整示例 1. 按value排序 1.1 思路 map本身的顺序不可控&#xff0c;我们考虑如下方法实现排队&#xff1a; 思路一&#xff1a;通过一个切片来接收拍好队的map成员思…

多线程应用场景

文章目录 前言一、CountDownLatch倒计时锁二、如何控制线程并发数&#xff1f;三、浅聊ThreadLocal1.ThreadLocal定义2.ThreadLocal源码解读3.关于ThreadLocal的一个案例 总结 前言 本篇介绍多线程中的应用场景&#xff0c;比如倒计时锁CountDownLatch、信号量Semaphore、以及…

【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块5

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

一种简化的3D点云车道线自动识别标注一些思考

0. 简介 作为3D车道线训练来说&#xff0c;数据集是至关重要的&#xff0c;而使用点云的精确性来完成准确的车道线地图构建是一个非常重要且有趣的事情。下面我们将会从一个例子开始&#xff0c;分阶段来告诉大家该怎么样去完成一个简单的3D点云车道线自动识别标注工具。 1. …

WordPress作为可扩展的企业级解决方案

网络商业世界就像一片汪洋大海&#xff0c;大型企业是大海中最大的鱼。然而&#xff0c;只因为你比其他人都大&#xff0c;并不意味着你不能逆流而上。相反&#xff0c;企业业务面临的挑战更大&#xff0c;对网站的技术要求更高。 多年来&#xff0c;大型公司通常依赖最昂贵的…

爆肝整理,接口自动化测试面试题+答案,25k*15薪如何达成的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、请问你是如何做…

MB10S-ASEMI迷你贴片整流桥50MIL芯片MB10S

编辑&#xff1a;ll MB10S-ASEMI迷你贴片整流桥50MIL芯片MB10S 型号&#xff1a;MB10S 品牌&#xff1a;ASEMI 芯片个数&#xff1a;4 封装&#xff1a;MBS-4 恢复时间&#xff1a;50ns 工作温度&#xff1a;-50C~150C 浪涌电流&#xff1a;30A 正向电流&#xff1a;1…

HttpRunner自动化测试之辅助函数debugtalk.py

辅助函数debugtalk.py Httprunner框架中&#xff0c;使用yaml或json文件进行用例描述&#xff0c;无法做一些复杂操作&#xff0c;如保存一些数据跨文件调用&#xff0c;或者实现一些复杂逻辑判断等&#xff0c;为了解决这个问题&#xff0c;引入了debugtalk.py辅助函数来进行一…

Linux操作系统升级低版本的OpenSSH到9.3的高版本

OpenSSH 9.3之前的版本存在各种各样的安全漏洞&#xff0c;为此&#xff0c;我们需要将OpenSSH升级到最新的9.3的版本。 执行&#xff1a;ssh -V&#xff0c;我们可以查看当前的openssh版本 为了避免升级过程中出现意外而导致服务器无法正常使用&#xff0c;建议操作前先对服务…

插槽的使用!!

什么是插槽 插槽&#xff08;Slot&#xff09;是 vue 为组件的封装者提供的能力。允许开发者在封装组件时&#xff0c;把不确定的、希望由用户指定的部分定义为插槽。可以把插槽认为是组件封装期间&#xff0c;为用户预留的内容的占位符 即&#xff1a;使用者来决定某一块区域…