網站首頁 編程語言 正文
shell腳本配合zabbix實現tomcat的故障自愈
1.背景及實現方式方法
Tomcat運行JAVA類的程序代碼經常會導致內存溢出,往往都是收到告警后再去處理,收到報警再處理就會拖延故障解決的時間,因此就需要靠故障自愈的機制來解決人為干預的成本。
服務實現自愈的方式有很多種:
- 通過shell腳本+定時任務的方式
- 通過shell腳本檢測應用程序的狀態,狀態為1表示異常為0表示正常,當檢測到狀態為1時就觸發自愈腳本,完成程序的故障自愈。
- 通過腳本來檢測需要配合定時任務來實現,存在一定的弊端,可能需要每隔5分鐘就要檢測一次,多多少少會影響服務器性能。
- 藍鯨Pass故障自愈平臺
- 藍鯨自動化運維平臺有故障自愈模塊,可以輕松獲取zabbix告警信息然后實現故障自愈。
- 如果只是為了實現自愈而使用藍鯨平臺,就有點小材大用了,藍鯨平臺搭建非常復雜,并且需要的服務器數量也居多,不建議使用此種方式。
- 藍鯨實現JAVA程序故障自愈的文章:https://jiangxl.blog.csdn.net/article/details/118731222
- shell腳本+zabbix觸發器動作
- 最為推薦的一種故障自愈方式。
- 在zabbix中添加服務狀態的監控項,并配置觸發器,然后通過配置zabbix的動作功能,當收到服務狀態異常的觸發器告警時,再遠程服務器中執行自愈腳本,實現程序的故障自愈。
- 此方式也并不是十全十美,例如一個服務器上有10個tomcat,端口都不相同,無法通過zabbix觸發器告警獲取故障服務的端口號,因此一個tomcat就需要配置一個zabbix動作。
shell+zabbix實現故障自愈大致實現步驟:
1、在zabbix中添加服務的狀態監控以及觸發器。
2、編寫故障自愈恢復腳本,不同端口的服務都需要編寫單獨的腳本。
3、配置zabbix動作功能,為每一個需要故障自愈的tomcat鏡像配置。
2.編寫故障自愈腳本
#!/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
3.配置zabbix動作機制實現Tomcat故障自愈
實現目標:實現故障自愈的同時還要發送消息提醒。
3.1.創建動作
填寫動作的名稱,并關聯服務狀態異常的觸發器。
3.2.配置故障自愈消息內容以及執行自愈腳本
1)故障自愈告警信息如下
-----------故障自愈事件觸發-------
故障:{TRIGGER.STATUS},服務器:{HOSTNAME1}
故障_觸發器名稱: ?{EVENT.NAME} ?
IP地址:{HOST.CONN}
故障 ?時間: ?{EVENT.DATE} {EVENT.TIME}
故障 ?事件: ?{ITEM.NAME}:{ITEM.VALUE}
2)添加執行遠程命令的動作
zabbix實現自愈就是通過在遠程主機上執行命令進行自愈的。
操作類型選擇遠程命令—>在目標列表中填寫tomcat所在的服務器—填寫執行故障自愈腳本的命令。
3.3.動作創建完成
4.觀察故障自愈
原文鏈接:https://blog.csdn.net/weixin_44953658/article/details/123268526
相關推薦
- 2022-10-17 多階段構建優化Go?程序Docker鏡像_Golang
- 2022-07-08 python?讀寫csv文件方式(創建,追加,覆蓋)_python
- 2022-09-25 Windows 10主機上的VMware Workstation出現“VMware Workstat
- 2022-04-08 從頭學習C語言之if語句的使用_C 語言
- 2021-12-02 docker容器時區錯誤問題_docker
- 2022-03-19 K8S中五種控制器的介紹以及使用_云其它
- 2022-08-11 利用python繪制線型圖_python
- 2022-08-11 C#中using關鍵字的使用方法示例_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支