在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:policeRecover开源软件地址:https://gitee.com/lookingdreamer/policeRecover开源软件介绍:shell脚本结合zabbix玩转故障自愈
[TOC] 高清版doc,请撮: http://lookingdreamer.gitee.io/policerecover脚本作用
实现逻辑(Zabbix故障自愈)脚本内容[root@blueking policeRecover]# tree -L 1.├── common.config #全局配置文件├── policeRecover.sh #核心执行脚本├── rule.config #规则配置文件 └── temp #临时存储文件 1 directory, 3 files 使用示例zabbix添加告警自愈脚本和相应参数1. Actions设置
图1图2图3
{EVENT.ID}_1#故障:{HOSTNAME1}:{TRIGGER.NAME}
triggervalue|{TRIGGER.VALUE}#hostname|{HOSTNAME1}#ipaddress|{IPADDRESS}#hostgroup|{TRIGGER.HOSTGROUP.NAME}#triggernseverity|{TRIGGER.NSEVERITY}#triggername|{TRIGGER.NAME}#triggerkey|{TRIGGER.KEY1}#triggeritems|{ITEM.NAME}#itemvalue|{ITEM.VALUE}#eventid|{EVENT.ID} Recovery operations
{EVENT.ID}_0#已恢复:{HOSTNAME1}:{TRIGGER.NAME}
triggervalue|{TRIGGER.VALUE}#hostname|{HOSTNAME1}#ipaddress|{IPADDRESS}#hostgroup|{TRIGGER.HOSTGROUP.NAME}#triggernseverity|{TRIGGER.NSEVERITY}#triggername|{TRIGGER.NAME}#triggerkey|{TRIGGER.KEY1}#triggeritems|{ITEM.NAME}#itemvalue|{ITEM.VALUE}#eventid|{EVENT.ID} 2. Media types设置3. Users 设置
4. 上传脚本
[root@localhost policeRecover]# ls common.config policeRecover.sh rule.config temp 磁盘空间不足,匹配规则配置后自动恢复1. 配置磁盘空间不足自愈规则(rule.config)serial:2||env:dev||isactive:1||triggervalue:{=,1}||ipaddress:{like,192.168.3%}||triggername:{like,Free disk space is less than%}||triggerkey:{=,vfs.fs.size[/var,pfree]}||itemvalue:{lt,20}||cmd:echo '' && echo 删除前/var大小&& du -sh /var && find /var/log/logcenter/ -type f -mtime +10 -exec rm -f {} \\; && echo 10天前的文件删除成功 && echo 删除后/var大小&& du -sh /var||ischeck:1||returncode:0||returnreqiure:{like,%成功%}||returntimeout:60||runlevel:5 2. 自愈
应用端口不存在时,匹配规则配置后自动恢复1. 配置端口不存在自愈规则(rule.config)serial:1||env:dev||isactive:1||triggervalue:{=,1}||ipaddress:{=,192.168.3.85}||triggername:{like,8080 service is down on%}||triggerkey:{=,net.tcp.port[,8080]||itemvalue:{=,0}||cmd:/bin/bash /usr/local/tomcat/bin/startup.sh ||ischeck:1||returncode:200||returnreqiure:{like,%started%}||returntimeout:60||runlevel:1 2. 自愈
2.触发报警和规则 3.自愈成功 4.失败的情况
接口返回异常时,匹配规则配置后自动恢复1. 配置web监控(具体细节自行谷歌)
2. 设置接口自愈规则serial:3||env:dev||isactive:1||triggervalue:{=,1}||ipaddress:{=,192.168.3.102}||triggername:{like,首页200监控%}||triggerkey:{=,web.test.rspcode[3.102首页,首页]||itemvalue:{=,404}||cmd:/etc/init.d/nginx restart||ischeck:1||returncode:200||returnreqiure:{like,%success%}||returntimeout:60 3. 模拟网页404访问前模拟故障后 4. 触发报警和规则5. 自愈自定义规则,执行相应的恢复操作
功能说明配置文件全局配置文件:common.config#!/bin/bash#基础配置文件#1.0 规则配置相关#skipRuleParams:规则配置中跳过校验的字段#2.0 微信消息相关#CropID:微信企业号CropID,后台可查#Secret:微信企业号Secret,后台可查#AppID:企业号中的应用id#PartyID:企业号中的部门id,多个部门用‘|’分隔#isSendAll:0(只发送给个人) 1(发送给部门所有人)#sendUsers:部门成员id(微信号) 当isSendAll为0时发送给${sendUsers},多个用户用空格间隔#3.0 发送邮件相关(telnet发送无需安装mutt等组件)#smtp:邮件发送主机#smtpDomain:邮件发送后缀域名,比如[email protected],则配置为abc.com#from:邮件发送者#usernameBase64:邮件用户名base64#passwordBase64:邮件密码base64#toEmail:发送给谁,多个收件人用空格间隔#4.0 不同环境下的基础配置项#*Conf为不同环境下的配置项目,规则配置中将会用到#devConf开发环境配置#testConf测试环境配置#zzbConf准生产环境配置(预生产环境)#comConf生产环境配置#4.1 自愈远程执行方式一: 自定义api远程执行#api:自定义api sync:是否同步(true或false默认异步) async:是否异步(true或false默认异步) #rex_env:执行环境(默认local,即本地环境) auth_type:认证类型(可选:password,key,config) 、#user:用户名 password:密码 salt_env:api的执行环境(默认saltapi-com,可选saltapi-dev)#returncode:全局默认http返回码/bash执行返回码 returntimeout:全局默认http超时时间/bash连接超时时间#4.2 自愈远程执行方式二: salt-api远程执行#saltUrl:salt-api的url地址 saltUsername:salt-api的用户名 saltPassword:salt-api的密码 #4.3 自愈远程执行方式三: ssh expect && 自愈远程执行方式四: sshpass #sshUsername:全局ssh用户名(如规则配置不存在取全局) sshPassword:全局ssh密码(如规则配置不存在取全局)#4.4 自愈远程执行方式五: ssh免秘钥执行 && 自愈远程执行方式六: ansible#5.0 全局执行级别#runlevel:当规则配置项不存在取全局默认执行方式#runlevel:0(自定义api) 1(salt-api) 2(免秘钥ssh执行) 3(ssh expect函数执行) 4(ansible远程执行) 5(sshpass) 规则配置文件:rule.config#!/bin/bash#规则库配置#一行代表1条规则配置,排除全局配置中配置的${skipRuleParams}中要跳过校验的字段以外,其他字段都是必须校验的字段,以||为间隔#1.0 非规则库校验的字段#skipRuleParams#serial:序号(唯一) env:执行环境 dev:读取全局配置devConf test:读取全局配置testConf 52zzb:读取全局配置zzbConf com:读取全局配置comConf #isactive:0(不启用该条规则) 1(启用该条规则) #cmd:自愈执行命令 #1.1 自愈执行后校验返回结果#ischeck: 0(不校验返回结果) 1(校验返回结果)#returncode(http返回码/执行返回值) returnreqiure(返回内容判断) returntimeout(返回超时时间/连接超时时间,单位秒)#2.0 规则配置中远程执行方式#runlevel:0(自定义api) 1(salt-api) 2(免秘钥ssh执行) 3(ssh expect函数执行) 4(ansible远程执行) 5(sshpass) 不存在时:取全局的runlevel#3.0 规则库配置#除了skipRuleParams中排除的字段,其他字段为zabbix返回要校验的字段,可以为1个或多个字段(无限制,根据你的zabbix内容设置)#解释我使用到几个关键字段#3.1 举例#triggervalue:{=,1} 条件1: triggervalued=1时,也即故障报警时#ipaddress:{=,192.168.3.102} 条件2: 故障主机为192.168.3.102#triggername:{like,Free disk space is less than%} 条件3: 故障名称为Free disk space is less than开头时#triggerkey:{=,vfs.fs.size[/var,pfree]} 条件4: 故障报警的key,这里指的/var空间不足时#itemvalue:{lt,20} 条件5: 故障报警key的值,这里指的是/var的空间不足20%时#以上条件为并且条件,只有都成立时才会触发cmd自愈.也可以只有2个条件或者更多的条件比如条件4和条件2,看你的报警需求#3.2 规则库的规则格式#||zabbix设置的key:{条件,预期值}||#3.3 规则库的支持条件#数值比较(支持浮点数) gt:大于 lt:小于 ge:大于等于 le:小于等于 eq:等于#字符串相等 =#模糊匹配 string%: 以string开头 %string: 以string结尾 %string%: 中间包含string 日志其他功能告警收敛
脚本复用1. 邮件消息发送
# main "$1" "$2"source ${commonConf}sendMail "邮件的主体" "邮件的内容"
# main "$1" "$2"source ${commonConf}toEmail=$1sendMail "邮件的主体" "邮件的内容" 2. 微信消息发送
# main "$1" "$2"source ${commonConf}sendWeixin "微信消息"
# main "$1" "$2"source ${commonConf}sendUsers=$1sendWeixin "微信消息"
# main "$1" "$2"source ${commonConf}isSendAll=0sendWeixin "微信消息"
# main "$1" "$2"source ${commonConf}isSendAll=0PartyID=$1sendWeixin "微信消息" 3. 远程执行
# main "$1" "$2"source ${commonConf}getsaltToken "[saltUrl]" "[saltUsername]" "[saltPassword]"runsaltTask "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]"
# main "$1" "$2"source ${commonConf}keyLessRun "[ssh用户名]" "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]"
# main "$1" "$2"source ${commonConf}sshExpectRun "[ssh用户名]" "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]" "[ssh密码]"
# main "$1" "$2"source ${commonConf}ansibleRun "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]"
# main "$1" "$2"source ${commonConf}sshPassRun "[ssh用户名]" "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]" "[ssh密码]" 4. 监控url返回码,不正常时重启应用code=$(curl -m 8 -o /dev/null -s -w %{http_code} ${url})if [[ $code != "200" ]];then#执行上面的远程指令fi |
请发表评论