自动监控url是否可用,如不可用则重启应用,并做相应的报警策略。

先上图

#!/bin/bash 
#author: QingFeng
#qq: 530035210
#blog: http://my.oschina.net/pwd/blog 
#自动监控url是否可用,如不可用则重启应用,并做相应的报警策略。
#缺省的配置如下
 
logdir=/data/log/check          #日志路径
log=$logdir/log.log            #日志文件 
is_font=1                #终端是否打印日志: 1打印 0不打印 
is_log=0                 #是否记录日志: 1记录 0不记录
key="data-camp"  #进程关键字
exec_stop="/etc/init.d/data-camp  stop"  #停应用命令
exec_start="/etc/init.d/data-camp  start" #启动应用命令
 
datef(){
date "+%Y-%m-%d %H:%M:%S"
}
 
print_log(){
if [[ $is_log -eq 1  ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1  ]];then
echo -e "[ $(datef) ] $1"
fi
}

#定义重启
derestart(){

if [[  $1 == "" ]];then
print_log "$FUNCNAME():应用关键字不能为空"
exit
fi

if [[  $2 == "" ]];then
print_log "$FUNCNAME():启动文件不能为空"
exit
fi

if [[  $2 == "" ]];then
print_log "$FUNCNAME():启动参数口不能为空"
exit
fi

ppid=0
ppid=$(ps axu |grep "$1" |grep -v grep |grep -v "$0" |wc -l)
$2 $3 
ppid=$(ps axu |grep "$1" |grep -v grep |grep -v "$0" |wc -l)
echo $ppid > /tmp/restart.num
print_log "$FUNCNAME(): $1的进程数为:$ppid"

}

#场景一: 当网站返回码不为200,则重启应用.

check_code(){
if [[  $1 == "" ]];then
print_log "$FUNCNAME():服务器地址不能为空"
exit
fi

if [[  $2 == "" ]];then
print_log "$FUNCNAME():服务器端口不能为空"
exit
fi

print_log "$FUNCNAME():开始检测-[$1:$2]服务器的网站状态返回码."
code=$(curl -m 8 -o /dev/null -s -w  %{http_code} http://$1:$2/verdict/session/LSGJA52U7CH055974/latest/result)

if [[  $code -ne 200    ]];then
print_log "$FUNCNAME():[$1:$2]服务器的网站状态返回码不正常,开始重启应用--$code."
print_log "$FUNCNAME():执行命令: $exec_stop"
derestart  "$key"  "$exec_stop"
num2=$(cat /tmp/restart.num)
if [[ $num2 -ne 0   ]];then
print_log "$FUNCNAME():停应用失败."
fi 
print_log "$FUNCNAME():执行命令: $exec_start"
sleep 3
derestart  "$key"  "$exec_start"
num2=$(cat /tmp/restart.num)
if [[ $num2 -eq 0   ]];then
print_log "$FUNCNAME():启动应用失败."
fi

print_log "$FUNCNAME():重启应用成功."
else
print_log "$FUNCNAME():[$1:$2]服务器的网站状态返回码正常--$code."
fi 
}

#场景二: 检测网站http返回的时间

check_timeout(){
if [[  $1 == "" ]];then
print_log "$FUNCNAME():服务器地址不能为空"
exit
fi

if [[  $2 == "" ]];then
print_log "$FUNCNAME():服务器端口不能为空"
exit
fi

print_log "$FUNCNAME():开始检测-[$1:$2]服务器的网站超时时间."
httptime=`curl  -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer:%{time_starttransfer}\ntime_total: %{time_total}\n" "http://$1:$2/verdict/session/LSGJA52U7CH055974/latest/result" |grep time_total|awk -F ":" ‘{print $2*1000}‘`

taketime=$(expr $httptime / 1000)

if [[  $httptime -gt 60000    ]];then
print_log "$FUNCNAME():[$1:$2]服务器的网站响应时间不正常,开始重启应用--$httptime ms."
print_log "$FUNCNAME():执行命令: $exec_stop"
derestart  "$key"  "$exec_stop"
num2=$(cat /tmp/restart.num)
if [[ $num2 -ne 0   ]];then
print_log "$FUNCNAME():停应用失败."
fi
print_log "$FUNCNAME():执行命令: $exec_start"
sleep 3
derestart  "$key"  "$exec_start"
num2=$(cat /tmp/restart.num)
if [[ $num2 -eq 0   ]];then
print_log "$FUNCNAME():启动应用失败."
fi

print_log "$FUNCNAME():重启应用成功."
else
print_log "$FUNCNAME():[$1:$2]服务器的网站响应时间正常--$httptime ms/$taketime s."
fi
}

check_code "localhost" "6500"
check_timeout "localhost" "6500"
时间: 2024-12-12 17:10:42

自动监控url是否可用,如不可用则重启应用,并做相应的报警策略。的相关文章

zabbix自动发现监控url

1.在监控客户机上 web_site_code_status.sh: #!/bin/bash # function:monitor tcp connect status from zabbix source /etc/bashrc >/dev/null 2>&1 source /etc/profile >/dev/null 2>&1 #/usr/bin/curl -o /dev/null -s -w %{http_code} http://$1/ web_site_

zabbix实现网络发现、自动注册、自动监控

网络发现是zabbix最具特色的功能之一,它能够根据用户事先定义的规则自动添加监控的主机或服务等 Zabbix的网络发现功能可以基于如下信息进行 ip地址范围 可用的服务(ftp,ssh,http,tcp,....) zabbix_agent的响应 snmp_agent的响应 网络发现通常包含两个阶段:discovery和actions 发现事件discovery: service:自动发现已有监控主机的服务 host:发现新的主机 四类事件:discovered,lost;up,downloa

构建生产环境可用的高可用kubernetes集群

kubernetes集群三步安装 构建生产环境可用的高可用kubernetes集群 | sealos项目地址 特性 [x] 支持任意节点的etcd集群自动构建,且etcd集群使用安全证书,通过static pod方式启动,这样可以通过监控pod来监控etcd集群健康状态 [x] 支持多master节点,允许任意一台master宕机集群功能不受影响 [x] calico使用etcd集群,配置安全证书,网络管控数据无单点故障 [x] 包含dashboard, heapster coreDNS add

从零开始搭建Prometheus自动监控报警系统(企业级)

从零搭建Prometheus监控报警系统 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本. 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目. Prometheus目前在开源社区相当活跃. Prometh

zabbix自动监控网络设备juniper防火墙

1.配置juniper防火墙SNMP 登陆到juniper页面或使用SSH链接配置,此处使用web界面配置 1)定位到Configuration > Report Settings > SNMP,配置端口管理信息如图 2)点击New Community创建团体名,配置版本等,如图: 3)在Host IP Address/Netmask填写链接IP地址和子网,选择版本,点击Add添加 4)定位到Network > Interfaces (List)选择链接接口编辑,勾选允许snmp链接 到

Zabbix监控(十二):自动监控Linux端口

1.客户端新建脚本 [[email protected] ~]# vi /usr/local/zabbix_agent/sbin/discovertcpport.sh  #!/bin/bash portarray=(`netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`) #namearray=(`netstat -tnlp|egrep -i

002-Zabbix-网络设备自动监控(cisco)

网络设备都是多端口多监控项目,要是一个一个添加的话,那能可以累人的.本人开始玩zabbix的时候也是一个端口一个端口添加的,搞了好久才添加完一台交换机.突然想是不是有自动监控交换的方法,通过百度一顿搜索了,找到了好多文章,根据相关文章的查看,终于实现了这个自动监控网络设备的方法 实现过程:创建Templates-定义Discovery-在Discovery-创建item,Graphs 1,首先创建模板,步骤如下:Configuration-templates-Create template 2,

【通讯协议】动手解剖《中华人民共和国环境保护行业标准(HJ/T 212-2005):污染源在线自动监控(监测)系统数据传输标准》

记得几年前,看到<中华人民共和国环境保护行业标准(HJ/T 212-2005):污染源在线自动监控(监测)系统数据传输标准> 这个协议,当时看的头都大了,最终没有下手去设计支持他.直到最近,客户说:你们VOC仪器不错啊,要是能支持HJ212传输协议就好了... 头脑出现当年阅读那个协议时的纠结,如今居然真的有客户想要我支持这个麻烦的协议,没办法,必须的做啊,也许做出来还是独家呢?哈哈 令我惊喜的是这次读这篇传输协议标准,我居然很容易就懂了,觉得其实这个协议挺简单的,而且写的还不错,面面俱到.

New UI-设置view的可用与不可用

New UI-设置view的可用与不可用  --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http://blog.csdn.