shell脚本结合zabbix玩转故障自愈
收到zabbix故障报警,匹配相应的规则触发不同的自愈机制.当然这个脚本功能不仅仅如此.
[TOC]
脚本作用
- 利用zabbix实现故障自愈
- http监控自愈
- tcp端口监控自愈
- 微信/邮件消息通知
- 多方式远程批量执行
- ……
实现逻辑(Zabbix故障自愈)
脚本内容
|
|
使用示例
zabbix添加告警自愈脚本和相应参数
1. Actions设置
对Actions进行特殊设置,Default subject / Default message ,消息内容是规则判断的主要依据。
图1
图2
图3
Default subject
1{EVENT.ID}_1#故障:{HOSTNAME1}:{TRIGGER.NAME}Default message
1triggervalue|{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
Default subject
1{EVENT.ID}_0#已恢复:{HOSTNAME1}:{TRIGGER.NAME}Default message
1triggervalue|{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 设置
Users需要关联该报警自愈的媒介
4. 上传脚本
将policeRecover上传到Zabbix服务器的alertscripts目录,并修改为可执行权限
|
|
磁盘空间不足,匹配规则配置后自动恢复
1. 配置磁盘空间不足自愈规则(rule.config)
|
|
2. 自愈
模拟触发报警
zabbix收到报警
触发自愈规则
成功或失败发送微信或邮件消息
应用端口不存在时,匹配规则配置后自动恢复
1. 配置端口不存在自愈规则(rule.config)
|
|
2. 自愈
- 模拟端口不存在
2.触发报警和规则
3.自愈成功
4.失败的情况
比如如果你的cmd配置错误
接口返回异常时,匹配规则配置后自动恢复
1. 配置web监控(具体细节自行谷歌)
监控url,校验返回码和require
2. 设置接口自愈规则
|
|
3. 模拟网页404
访问前
模拟故障后
4. 触发报警和规则
5. 自愈
自定义规则,执行相应的恢复操作
其他自定义规则,可以根据相应的返回KEY,做相应的自愈操作。
一切你想要自愈的操作都可以做到。
需要注意如果是salt-api/ansible等远程执行传参数的时候,如果传特殊符号需要转义,ansible也不支持管道等符号
功能说明
配置文件
全局配置文件:common.config
|
|
规则配置文件:rule.config
|
|
日志
其他功能
告警收敛
将收集到数据保存到redis或mongodb中,进行报警数据聚合和分析,分析出有价值的信息。后续在补充这个功能
脚本复用
1. 邮件消息发送
邮件发送
123# main "$1" "$2"source ${commonConf}sendMail "邮件的主体" "邮件的内容"发送给某个传参过来的用户
1234# main "$1" "$2"source ${commonConf}toEmail=$1sendMail "邮件的主体" "邮件的内容"
2. 微信消息发送
微信消息
123# main "$1" "$2"source ${commonConf}sendWeixin "微信消息"发送给某个传参过来的用户
1234# main "$1" "$2"source ${commonConf}sendUsers=$1sendWeixin "微信消息"发送整个部门
1234# main "$1" "$2"source ${commonConf}isSendAll=0sendWeixin "微信消息"发送个某个部门
12345# main "$1" "$2"source ${commonConf}isSendAll=0PartyID=$1sendWeixin "微信消息"
3. 远程执行
salt-API接口
1234# main "$1" "$2"source ${commonConf}getsaltToken "[saltUrl]" "[saltUsername]" "[saltPassword]"runsaltTask "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]"免秘钥ssh执行
123# main "$1" "$2"source ${commonConf}keyLessRun "[ssh用户名]" "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]"[expect]ssh执行
123# main "$1" "$2"source ${commonConf}sshExpectRun "[ssh用户名]" "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]" "[ssh密码]"ansible远程执行
123# main "$1" "$2"source ${commonConf}ansibleRun "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]"sshpass远程执行
123# main "$1" "$2"source ${commonConf}sshPassRun "[ssh用户名]" "[执行主机]" "[执行命令]" "[超时时间]" "[临时文件]" "[锁文件]" "[ssh密码]"
4. 监控url返回码,不正常时重启应用
|
|