nagios 自动恢复告警通知
2017-01-25 11:22
246 查看
nagios中在nagios告警时,有时候会禁用告警通知,监控恢复正常时禁用通知没有取消,导致下次监控不正常时没有告警通知;为防止这种情况,编写了恢复告警通知脚本,添加了恢复此类告警通知的例行任务
代码如下:
代码如下:
#!/usr/bin/env python #Desc: to change services'notification status(0 or 1) if current state of service is ok while enable_notification is False import os import re import sys import time nagios_home="/usr/local/nagios" cmd_file=nagios_home+"/var/rw/nagios.cmd" status_file=nagios_home+"/var/status.dat" host_list=[] service_list=[] def send_nagios_command(*args): '''Send a simple command to our local Nagios server. ''' global cmd_file if len(args) < 2: return False arg = '[%d] ' % int(time.time()) + ';'.join(j.decode('utf-8') for j in args) arg = arg.encode('utf-8') print('sending command: %s' % arg) try: fd = os.open(cmd_file, os.O_WRONLY) os.write(fd, arg + '\n') os.close(fd) except Exception as e: print e return False return True def init_data(datafile): '''initial data read from statusfile and store in list while each object store in dict ''' hoststatus={} servicestatus={} for line in datafile: line=line.strip() if line.endswith('{'): type=line.split(' ',1)[0] elif 'host_name' in line: key,val=line.split('=',1) if type=='hoststatus': hoststatus[key]=val if type=='servicestatus': servicestatus[key]=val elif 'service_description' in line: key,val=line.split('=',1) if type=='hoststatus': hoststatus[key]=val if type=='servicestatus': servicestatus[key]=val elif 'current_state' in line: key,val=line.split('=',1) if type=='hoststatus': hoststatus[key]=val if type=='servicestatus': servicestatus[key]=val elif 'notifications_enabled' in line: key,val=line.split('=',1) if type=='hoststatus': hoststatus[key]=val if type=='servicestatus': servicestatus[key]=val elif line=='}': if type=='hoststatus': host_list.append(hoststatus) hoststatus={} if type=='servicestatus': service_list.append(servicestatus) servicestatus={} '''main code''' with open(status_file,'r') as f: init_data(f) ''' for each_hoststatus in host_list: print each_hoststatus for each_servicestatus in service_list: print each_servicestatus ''' #print "need to change host:" for each_hoststatus in host_list: if each_hoststatus['current_state']=='0' and each_hoststatus['notifications_enabled']=='0': print each_hoststatus send_nagios_command('ENABLE_HOST_NOTIFICATIONS',each_hoststatus['host_name']) #print "need to change service:" for each_servicestatus in service_list: if each_servicestatus['current_state']=='0' and each_servicestatus['notifications_enabled']=='0': print each_servicestatus send_nagios_command('ENABLE_SVC_NOTIFICATIONS',each_servicestatus['host_name'],each_servicestatus['service_description']) sys.exit(0)
之后在crontab中添加个例行任务就可以了
相关文章推荐
- nagios 自动恢复告警通知
- 具有自动恢复功能的通知栏图标控件
- 具有自动恢复功能的通知栏图标控件
- 12.2 新特性:RMAN 自动恢复到 REDO 终点的步骤简化
- 小程序开发系列(八)利用SQL实现access_token的自动通知
- 数据库自动备份与恢复【定时】
- 根据别名推送通知(完成版)Jcenter自动集成
- 使用注解配置Spring框架自动代理通知
- win7笔记本电脑的无线网连接总是自动断开,重启之后才能恢复解决办法
- java实现对服务器的自动巡检邮件通知
- C# winForm 开机自动启动 并启动后最小化到任务栏 右侧通知栏并交互操作
- 微信支付告警通知接口与维权接口
- 什么是oracle自动恢复操作
- [钉钉通知系列]Jenkins发布后自动通知
- 关于ghost自动恢复镜像批处理命令
- [钉钉通知系列]Jenkins发布后自动通知 - 简玄冰 - 博客园
- sqlDependency监控数据库数据变化,自动通知
- App自动更新之通知栏下载(转)
- 通知公告TextSwitcher自动上下滚动带点击事件
- pika判断rebbitmq远程连接及自动恢复