Linux服务器定时健康检查,发生故障自动微信告警
此脚本适用于于各种Linux环境,可以实现各种监控项目,可自定义阀值,实现不同监控效果
已在原有脚本基础上做了简化,提取了主要功能
目前实现的有:
1、磁盘监控
2、内存监控
3、cpu负荷监控
4、进程数监控
5、iptables 状态检查(若防火墙未开启,启动防火墙)
6、多端口检查
其中若一项失败,微信提醒对应失败的监控项
脚本如下所示:
#!/bin/bash
source /etc/profile
Echo_Colour(){
        echo -e "[\033[$1;1m$2\033[0m]"
}
Print_Format(){
        printf "|%-12s|%15s|%10s|\n" "$1" "$2" "$3"
}
Print_Format2(){
        printf "+%-12s+%15s+%10s+\n" "------------" "---------------" "----------"
}
Print_Select(){
        Num1="$1"
        Num2="$2"
        if [ "`echo "$Num1 > $Num2"|bc`" == "" ];then
                Print_Format "$3" "$4" "$5"
        fi
}
Output_(){
        TrueFalse=$
        PrintVar=$
        PrintResult=$
        if [[ -z $TrueFalse && -n "$PrintVar" ]];then
                PrintVar=`printf "%-45s" "${PrintVar}"`
                echo -n -e "\033[32;49;1m[`date +%F\ %T`]\t${PrintVar}\033[39;49;0m"
        elif [[ -n $TrueFalse && "$TrueFalse" == "" ]];then
                Echo_Colour "" "$PrintResult"
        elif [[ -n $TrueFalse && "$TrueFalse" == "" ]];then
                Echo_Colour "" "$PrintResult"
        else
                Echo_Colour "" "syntax error";exit
        fi
}
Output_Select(){
        Num1="$1"
        Num2="$2"
        PrintTrue="$3"
        PrintFalse="$4"
        RetrunExit="$5"
        if [ "$Num1" == "$Num2" ];then
                Output_ "" "" "$PrintTrue"
        else
                Output_ "" "" "$PrintFalse"
                $RetrunExit
        fi
}
weixin(){
#CropID 企业Id
#Secret 管理组的凭证密钥
CropID="wx80179d3a3eb67***"
Secret="ZyqFs4qfUiXcz8plHFbhCWkF3JEjj7vASkZjs8YTRqKxq1yAx-U46foyNXNKz2qw"
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
#AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
Content=`cat $TMP`
curl -l -H "Content-type: application/json" -X POST -d "{\"touser\":\"@all\",\"msgtype\":\"text\",\"toparty\":\"1\",\"agentid\":\"1\",\"text\":{\"content\": \"Server Check Monitor:\n$Content\"}, \"safe\":\"0\"}" $PURL &>/tmp/weixin.log
}
server_check(){
        Cpucore="`cat /proc/cpuinfo | grep -c processor`"
        Cpuload="`uptime|awk -F, '{print $(NF-1)}'|tr -d " "`"
        Cpuidle="`vmstat|awk '/[0-9]+/{print $(NF-2)}'`"
        MemTotal="`free -m|awk '/Mem:/{print $2}'`"
        MemUse="`free -m|awk '/-\/+/{print $3}'`"
        MemFree="`echo "scale=;($(($MemTotal-$MemUse))) / $MemTotal*"|bc|cut -d. -f1`"
        SwapTotal="`free -m|awk '/Swap:/{print $2}'`"
        SwapUse="`free -m|awk '/Swap/{print $3}'`"
        SwapFree="`echo "scale=;($(($SwapTotal-$SwapUse))) / $SwapTotal*"|bc|cut -d. -f1`"
        DiskUse1="`df -h|awk '/\/$/{print $(NF-3)}'`"
        DiskUse1Free="`df -h|awk '/\/$/{print $(NF-1)}'|tr -d "%"`"
        DiskUse1Free="`echo "scale=; - $DiskUse1Free"|bc`"
        DiskUse2="`df -h|awk '/\/data$/{print $(NF-3)}'`"
        DiskUse2Free="`df -h|awk '/\/data$/{print $(NF-1)}'|tr -d "%"`"
        DiskUse2Free="`echo "scale=; - $DiskUse2Free"|bc`"
        eth0Link="`ethtool eth0|awk '/Link/{print $NF}'`"
        eth0Speed="`ethtool eth0|awk '/Speed/{print $NF}'`"
        eth0Duplex="`ethtool eth0|awk '/Duplex/{print $NF}'`"
        eth1Link="`ethtool eth1|awk '/Link/{print $NF}'`"
        eth1Speed="`ethtool eth1|awk '/Speed/{print $NF}'`"
        eth1Duplex="`ethtool eth1|awk '/Duplex/{print $NF}'`"
        if `/sbin/iptables -L -n|grep -q "Chain INPUT (policy DROP)"` ;then
                        Iptables=Yes
                        Iptables_bc=
        else
                /bin/sh /data/shelltools/web_iptable.sh >>$LogFile >&
        if `/sbin/iptables -L -n|grep -q "Chain INPUT (policy DROP)"`;then
                        Iptables=Yes
                        Iptables_bc=
                else
                        Iptables=No
                        Iptables_bc=
                fi
        fi
}
Game_Check(){
        GameOnLineNum=`netstat -ntp|awk '/ESTABLISHED/{print $4}'|grep -P -c ":9200|:9300"`
        GameJavaProNum="`jps |grep -c "Server"`"
        GameTomcatProNum="`jps |grep -c Bootstrap`"
        GameNginxProNum="`ps -ef |grep -v grep|grep -c "nginx: master process"`"
}
Send_Warning(){
        TMP=`mktemp`
        echo "${Site}:${IP} ERROR" >>$TMP >&
        Print_Format2 >>$TMP >&
        Print_Format "Site" "Name" "Warning" >>$TMP >&
        Print_Format2  >>$TMP >&
        Print_Select "$Cpuload" "$Cpucore" "$Site" "CPU Load" "$Cpuload" >>$TMP >&
        Print_Select "" "$Cpuidle" "$Site" "CPU Idle" "$Cpuidle%" >>$TMP >&
        Print_Select "" "$MemFree" "$Site" "Mem Idle" "$MemFree%" >>$TMP >&
        Print_Select "" "$DiskUse1Free" "$Site" "/" "$DiskUse1Free%" >>$TMP >&
        Print_Select "" "$DiskUse2Free" "$Site" "/data" "$DiskUse2Free%" >>$TMP >&
        Print_Select "" "$GameJavaProNum" "$Site" "JavaPro" "$GameJavaProNum" >>$TMP >&
        Print_Select "" "$GameTomcatProNum" "$Site" "TomcatPro" "$GameTomcatProNum" >>$TMP >&
        Print_Select "" "$GameNginxProNum" "$Site" "NginxPro" "$GameNginxProNum" >>$TMP >&
        Print_Select "" "$Iptables_bc" "$Site" "iptables" "$Iptables_bc" >>$TMP >&
        nc -nvz -w  $IP  >>$LogFile >&
        Print_Select "$?" "" "$Site" "$IP" "Web 80 Port Fail" >>$TMP >&
        nc -nvz -w  $IP  >>$LogFile >&
        Print_Select "$?" "" "$Site" "$IP" "SSH 22 Port Fail" >>$TMP >&
        Print_Format2
        sed -i '/ 2: parse error/d' $TMP
        if [ `cat $TMP|wc -l` -gt  ];then
                cd /tmp/
                weixin
        fi
        #cat $TMP
        rm -f $TMP
}
main()
{
    LogFile=/root/check.log
    Site=`hostname`
    IP=`ifconfig eth0|grep "inet addr"|awk -F: '{print $2}'|awk '{print $1}'`
    Alarm=`awk -F":" '/alarm/{print $2}' /root/config |sed 's/ //g'`
    server_check >>/dev/null
    Game_Check >>/dev/null
    if [ $Alarm = ON ];then
        Send_Warning
    fi
}
main
#取消微信告警
#echo alarm:OFF > /root/config 
auto_Check.sh
需要微信告警执行:
#echo alarm:ON > /root/config 【此为微信告警开关】
效果图如下(Java进程低于5个、80端口不通,微信告警):

Linux服务器定时健康检查,发生故障自动微信告警的更多相关文章
- 设置linux服务器定时与时间服务器同步
		
在一些大公司经常出现这样一个情况:公司或一些机关单位的内部业务系统的应用服务器以及数据都是做的多机集群部署而且基本都是linux系统,而且都是内部网,不与外网通讯的.这样经常就会出现一个情况,我发送任 ...
 - 从Windows 服务器通过sync向Linux服务器定时同步文件
		
本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...
 - window、linux系统与linux服务器之间使用svn同步及自动部署代码的方法
		
摘要: 在家用PC,在公司用办公电脑对一个项目的代码进行修改时,会遇到代码同步的问题.本文讲解了代码同步及自动部署的解决办法. 实现方法: 1.首先在linux服务器上和linux上安装svn(sud ...
 - redis健康检查与故障转移
		
哨兵三个定时监控任务 每隔10s每隔sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构 每隔2S,每个sentinel节点会向redis数据节点的__sentiel__:hell ...
 - 磁盘大保健 保持你的Linux服务器存储健康
		
df du -sh *| sort -nr du -h --max-depth=1 / du -h --max-depth=1 /* find . -type f -size +1000000k 查找 ...
 - Linux服务器定时脚本
		
crontab -e 进入编辑模式,同vi编辑器操作. 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的 ...
 - Nginx负载均衡中后端节点服务器健康检查的操作梳理
		
正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...
 - Nginx负载均衡中后端节点服务器健康检查的一种简单方式
		
摘自:https://cloud.tencent.com/developer/article/1027287 一.利用nginx自带模块ngx_http_proxy_module和ngx_http_u ...
 - nginx  backend 健康检查
		
ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的n ...
 
随机推荐
- jQuery基础语法知识梳理
			
一.attr() attr()方法设置或返回元素的属性. attr(属性名):获取元素属性名的值. attr(属性名,属性值):设置元素属性名的值. 例子: <a href=”http://12 ...
 - python 的内存回收,及深浅Copy详解
			
一.python中的变量及引用 1.1 python中的不可变类型: 数字(num).字符串(str).元组(tuple).布尔值(bool<True,False>) 接下来我们讲完后你就 ...
 - 【学习总结】Git学习-参考廖雪峰老师教程二-安装Git
			
学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...
 - ~/.bashrc与/etc/profile的区别
			
~/.bashrc:该文件包含专用于某个用户的bash shell的bash信息,当该用户登录时以及每次打开新的shell时,该文件被读取. /etc/profile中设定的变量(全局)的可以作用于任 ...
 - centos yum install oracle java
			
How to install Java on CentOS 7 | Linuxizehttps://linuxize.com/post/install-java-on-centos-7/ CentOS ...
 - Python技术之书籍汇总
			
近日,一直在学习Python,发现有关的书籍还是很多值得一读的,所以在此总结一下.以后慢慢去研读吧!!! Python入门 <Python编程快速上手——让繁琐工作自动化> 作者: [美] ...
 - 理解ORM的前提:数据库中的范式和约束
			
理解ORM的前提:数据库中的范式和约束 一.数据库中的范式: 范式, 英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出 ...
 - [转帖]windows7/windows NT介绍
			
windows7/windows NT介绍 原文应该是IT168发布的 但是一直没找到 感觉看了之后 明白了很多 技术都是互相融合的 没有严格意义上的对立直说. Windows 7/Windows ...
 - [转帖]BRD、MRD 和 PRD
			
来源: https://www.zhihu.com/question/19655491 BRD 商业需求文档 Business Requirement Document MRD 市场需求文档 Mark ...
 - 使用NFS时的一些问题
			
当我把nfs服务端共享目录/usr/local/data/test删掉时,在nfs客户端却没办法把之前挂载在这上面的当前从机上的/usr/local/data/test删除,出现 bash: cd: ...