时间:2022-10-18 11:54:21 | 栏目:Shell | 点击:次
shell脚本配合zabbix实现tomcat的故障自愈
Tomcat运行JAVA类的程序代码经常会导致内存溢出,往往都是收到告警后再去处理,收到报警再处理就会拖延故障解决的时间,因此就需要靠故障自愈的机制来解决人为干预的成本。
服务实现自愈的方式有很多种:
shell+zabbix实现故障自愈大致实现步骤:
1、在zabbix中添加服务的状态监控以及触发器。
2、编写故障自愈恢复脚本,不同端口的服务都需要编写单独的脚本。
3、配置zabbix动作功能,为每一个需要故障自愈的tomcat镜像配置。
#!/bin/bash
java_node=java-7180
java_dir=/data/tomcat/${java_node}
java_port=`grep 'protocol="HTTP/1.1"' ${java_dir}/conf/server.xml |awk -F'"' '{if(NR==1){print $2}}'`
host_ip=192.168.10.100
dtime=`date +%F" "%H:%M:%S`
day=`date +%F`
selflheal_logdir=/var/log/java_selflheal
echo "${dtime} ${java_node} 开始自愈..." >>${selflheal_logdir}/selflheal-${day}.log
#关闭tomcat
ps aux | grep $java_dir | grep -v grep | awk '{print $2}' |xargs kill -9
#启动服务
su - www -c "${java_dir}/bin/startup.sh"
if [ $? -eq 0 ];then
sleep 10s
for i in {1..20}
do
sleep 3s
echo "第$i次尝试"
ava=`curl -s http://${host_ip}:${java_port}/check`
if [[ "$ava" = "true" ]];then
echo "${dtime} ${java_node} 自愈成功!!!" >>${selflheal_logdir}/selflheal-${day}.log
echo "=====================================================" >>${selflheal_logdir}/selflheal-${day}.log
break
fi
if [ $i -ge 20 ];then
echo "${dtime} ${java_node} 自愈不成功!!!" >>${selflheal_logdir}/selflheal-${day}.log
echo "=====================================================" >>${selflheal_logdir}/selflheal-${day}.log
exit 1
fi
done
fi
实现目标:实现故障自愈的同时还要发送消息提醒。
填写动作的名称,并关联服务状态异常的触发器。

1)故障自愈告警信息如下
-----------故障自愈事件触发-------
故障:{TRIGGER.STATUS},服务器:{HOSTNAME1}
故障_触发器名称: {EVENT.NAME}
IP地址:{HOST.CONN}
故障 时间: {EVENT.DATE} {EVENT.TIME}
故障 事件: {ITEM.NAME}:{ITEM.VALUE}
2)添加执行远程命令的动作
zabbix实现自愈就是通过在远程主机上执行命令进行自愈的。
操作类型选择远程命令—>在目标列表中填写tomcat所在的服务器—填写执行故障自愈脚本的命令。


