nagios 自动恢复告警通知

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中添加个例行任务就可以了
时间: 2024-10-12 16:21:25

nagios 自动恢复告警通知的相关文章

wordpressQQ邮件告警通知+Baidu网盘自动备份数据

1.邮箱设置 2.网盘设置 3.同步策略 前言:目前自建网址的需求越来越多,但是一些网站的维护和消息通知机制,一直不太适宜:所以本章基于QQ邮箱和百度网盘实现简单的邮箱告警和网盘同步,让我们更好的管理我们的个人网址 <h5 id=1>一.配置自动发送到QQ邮箱:</h5> 设置并取得 smtp.qq.com 的 使用 授权密码QQ首页或者网页登录到QQ邮箱点击设置选择账户设置一值下滑找到POP3样式的服务,然后开启服务短信验证身份 返回POP3默认密钥服务端详细配置 [[email

Zabbix自定义、SMS、邮件告警通知

Zabbix告警媒介 Zabbix的触发器到了要发送告警通知的情况下,需要一个之间介质来接收和传递它的消息给我们这些可爱的运维们er,以往通常用Nagios(Nginos有着强大完善的告警机制),用脚本发送邮件或者微信来到达报警.这里的脚本其实就算得上一种媒介了. Zabbix的四种告警媒介 · E-mail 邮件告警(zabbix 3.0后升级了邮件告警客户端,使用起来还是很方便的) · Jabber Jabber有第三方插件,能让Jabber用户和MSN.YahooMessage.ICQ等I

什么是oracle自动恢复操作

这是由系统进行的恢复.无需人的管理和操作.一般当系统由于突然掉电而出现故障时用这种方法.当再次启动数据库就会进行自动恢复.    不像简单的DOS系统,oracle系统在运行时有许多事务要处理,并且存在许多进程.无论此时人是否对系统进行了操作,这些事务和进程都是存在并运行着的.因此,oracle系统非常复杂,绝不允许中途突然关电源,那样会使系统受到损害.    但是有时并非人自愿的,电源不好而突然掉电,或是未通知的突然停电,而又没有使用不间断电源UPS,则此时数据库系统将难免受到损害.由于掉电,

新一代-亚马逊自动恢复EC2系统

构造高可用性和高可靠性系统的一项重要原则是假定失效(Design forfailure).换言之,你的设计模型应具有正如亚马逊的首席技术官(CTO)沃纳?威格尔(Werner Vogels)曾说的"一切事物随时有可能失效"的特性.幸运的是,现代数据中心.网络和服务器具有高可靠性,且很少发生故障.然而,若你把偶尔的故障当成是既定的,并简单建立一个在发生故障后能恢复且保持运行的系统,则你能建立一个强大的系统. 新一代自动恢复 今天我想告诉你一个新的EC2功能,当某项EC2实例遭受损害时,该

脚本分享-MYSQL服务+主从+告警通知监控

1.配置MYSQL本地免密登录 账号密码会信息会记录到用户家目录下的".mylogin.cnf"文件中,若你想重新输入密码登录的话则删除此文件即可. [[email protected] ~]# mysql_config_editor set --user=root --host=localhost --port=3306 --password Enter password: 2.配置邮件转发 我们需要安装邮件客户端软件"Mailx",然后配置公司公共邮箱用于邮件发

Zabbix实现电话、邮件、微信告警通知的实践分享

众所周知Zabbix 是一款用来监控IT基础设施的监控套件,同时也具有很多方便运维人员使用的优秀功能,如:支持多条件告警,支持多种告警方式,支持多组模板.支持模板继承,因此在众多的开源运维监控软件中独占鳌头,受到了众多企业青睐.暇瑜不掩,Zabbix在告警方式还是有一定局限性,如Email发送告警配置繁琐,需要调用邮件引擎脚本通过 SMTP 发送邮件:如用微信接收告警,需要申请一个微信公众号,接入复杂周期较长:如用短信接收告警,短信网关良莠不齐稳定性无法保证:如用语音接收告警,模板定义重口难调.

快速实现钉钉告警通知、处理告警、关闭告警

钉钉目前已经成为大多数公司必备的软件,无论是上下班快速方便的远程打卡,从而避免了迟到的尴尬局面:还是快速的接收公司第一手消息,从而有效的加快工作的效率. 对于实现告警通知到钉钉群当中,目前部分主流监控系统可以通过编写代码的方式实现,但是通知的告警内容不够明显,导致寻找关键问题原因的时间过长,并且也无法判定告警是否被处理,这就会大幅影响运维人员的工作效率. 睿象云智能告警平台Cloud Alert(以下简称为CA)作为中国第一个?SaaS?模式的云告警平台,就完美的解决了上述问题,从CA平台接入到

htc M8 无法自动恢复数据连接(4g)的问题解决

情况如下:htc m8 tdd-lte的双待手机,4g.2g同时在线. 本月出现,在短时间没有信号的情况后,无法恢复数据连接,哪怕是edge,更不论4g了. 尝试各种方法无解.最后咨询10086解决此问题. 这个应该不是手机的问题,貌似是移动端的2g edge数据流量被关闭/错误设置导致的.   我感觉像是2g-3g-4g之间切换需要依次回落或者升级.因为双待,4g信号开机是有的,可以上网,但是电梯等4g消失的情况发生后,需要借助于2g/3g的数据连接再恢复到4g,没有2g/3g的数据连接就恢复

微信支付开发(7) 告警通知

本文介绍微信支付中如何获得告警通知. 一.告警通知 为了及时通知商户异常,提高商户在微信平台的服务质量.微信后台会向商户推送告警通知,包括发货延迟.调用失败.通知失败等情况,通知的地址是商户在申请支付时填写的告警通知URL,在"公众平台-服务-服务中心-商户功能-商户基本资料-告警通知URL"可以查看.商户接收到告警通知后需要尽快修复其中提到的问题,以免影响线上经营. 告警通知URL接收的postData中还将含xml数据,格式如下: <xml> <AppId>