一、策略和动作多对多的好处坏处

1、好处:

相同服务,相同策略的服务可以不用重复写好多次触发器

2、坏处:

1、策略A给小李和小罗发邮件
2、策略B给小胡和小崔发邮件
3、策略A是第三部发邮件
4、策略B是第五步发邮件

二、解决问题与代码实现

1、trigger发生后,如何报警

1、解决了什么问题

1、问题恢复自定义通知
2、触发是触发器决定,报警不报警是报警中心说了算,一个是收集部门,一个是处理部门
3、报警的次数报警升级阈值
4、通知组别
5、脚本名称相当与故障自愈

2、代码实现

class ActionOperation(models.Model):
"""报警动作列表"""
action_type_choices = ((0,'Email'),(1,'weixin'),(3,'Script'),)
action_type = models.CharField(u"动作类型",choices=action_type_choices,default='email',max_length=64)
step = models.SmallIntegerField(u"第n次告警",default=1,help_text="当trigger触发次数小于这个值时就执行这条记录里报警方式")
notifiers= models.ManyToManyField('UserProfile',verbose_name=u"通知对象",blank=True)
script_name = models.CharField(max_length=128,blank=True,null=True)
_msg_format = '''Host({hostname},{ip}) service({service_name}) has issue,msg:{msg}''' #通知的格式
msg_format = models.TextField(u"消息格式",default=_msg_format)
def __str__(self):
return self.name

2、报警动作列表

1、解决了什么问题

1、触发和动作是多对一
2、动作列表
3、报警多少次与多少次中间报警
4、报警策略,一个策略包含很多动作
5、策略和动作多对多的好处坏处

2、代码实现

class Action(models.Model):
"""定义trigger发生后,如何报警"""
name = models.CharField(max_length=64,unique=True)
triggers = models.ManyToManyField('Trigger',blank=True,help_text=u"想让哪些trigger触发当前报警动作")
interval = models.IntegerField(u'告警间隔(s)',default=300)
recover_notice = models.BooleanField(u'故障恢复后发送通知消息',default=True)
recover_subject = models.CharField(max_length=128,blank=True,null=True)
recover_message = models.TextField(blank=True,null=True) enabled = models.BooleanField(default=True) def __str__(self):
return self.name

三、和去年写的代码的区别

1、区别内容:

1、之前的triggers关联的是模板
2、之前是多对多,现在是一对多

2、区别的代码:

1、之前的triggers关联的是模板

host_groups = models.ManyToManyField('HostGroup',blank=True) #在template里已经关联了主机和tirgger了,为什么这里还要有
hosts = models.ManyToManyField('Host',blank=True)

2、之前triggers是多对多,现在是一对多

triggers = models.ManyToManyField('Trigger',blank=True,help_text=u"想让哪些trigger触发当前报警动作")

四、后台操作

1、admin注册文件

from django.contrib import admin

from django import forms
from monitor import models
# Register your models here. from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import ReadOnlyPasswordHashField class HostAdmin(admin.ModelAdmin):
list_display = ('id','name','ip_addr','status')
filter_horizontal = ('host_groups','templates') class TemplateAdmin(admin.ModelAdmin):
filter_horizontal = ('services','triggers') class ServiceAdmin(admin.ModelAdmin):
filter_horizontal = ('items',)
list_display = ('name','interval','plugin_name')
#list_select_related = ('items',) class TriggerExpressionInline(admin.TabularInline):
model = models.TriggerExpression
#exclude = ('memo',)
#readonly_fields = ['create_date'] class TriggerAdmin(admin.ModelAdmin):
list_display = ('name','severity','enabled')
inlines = [TriggerExpressionInline,]
#filter_horizontal = ('expressions',) class TriggerExpressionAdmin(admin.ModelAdmin):
list_display = ('trigger','service','service_index','specified_index_key','operator_type','data_calc_func','threshold','logic_type') admin.site.register(models.Host,HostAdmin)
admin.site.register(models.HostGroup)
admin.site.register(models.Template,TemplateAdmin)
admin.site.register(models.Service,ServiceAdmin)
admin.site.register(models.Trigger,TriggerAdmin)
admin.site.register(models.TriggerExpression,TriggerExpressionAdmin)
admin.site.register(models.ServiceIndex)
admin.site.register(models.Action)
admin.site.register(models.ActionOperation)
#admin.site.register(models.ActionCondtion,ActionConditionAdmin)
admin.site.register(models.Maintenance)
admin.site.register(models.UserProfile,UserProfileAdmin)
admin.site.register(models.EventLog)

2、后台创建表达式

1、创建截图

2、创建完成

3、表达式列表

3、triggers和表达式有关联表达式吗?

1、反向的关联

  1. triggers和表达式有关联表达式吗?
  2. 反向的,triggers表达式关联的trigger
  3. 正常在在admin应该是triggeradmin里能看到trigger
  4. 没有直接关联的,我想看到反向关联的数据

2、实现代码如下:

class TriggerExpressionInline(admin.TabularInline):
model = models.TriggerExpression
#exclude = ('memo',)
#readonly_fields = ['create_date']
class TriggerAdmin(admin.ModelAdmin):
list_display = ('name','severity','enabled')
inlines = [TriggerExpressionInline,]
#filter_horizontal = ('expressions',

4、创建触发器列表

5、创建动作列表

分布式监控系统开发【day38】:报警策略设计(二)的更多相关文章

  1. Python之路,Day20 - 分布式监控系统开发

    Python之路,Day20 - 分布式监控系统开发   本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...

  2. 分布式监控系统开发【day38】:报警策略队列处理(五)

    一.目录结构 二.报警策略队列处理 1.入口MonitorServer import os import sys if __name__ == "__main__": os.env ...

  3. 分布式监控系统开发【day37】:需求讨论(一)

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控需求讨论 如何实现监控服务器的水平扩展? 监控系统架构设计 一.为什么要做监控? 熟悉IT监控系统的设计原理 开发一个简版的类Zabbix监控系统 ...

  4. Python之分布式监控系统开发

    为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求 ...

  5. day26 分布式监控系统开发

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设 ...

  6. 分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)

    一.需求讨论 1.请问如何解决延迟问题 1000台机器,每1分钟循环一次但是刚好第一次循环第一秒刚处理完了,结果还没等到第二分钟又出问题,你那必须等到第二次循环,假如我这个服务很重要必须实时知道,每次 ...

  7. 分布式监控系统开发【day38】:报警自动升级代码解析及测试(八)

    一.报警自动升级代码解析 发送邮件代码 def action_email(self,action_obj,action_operation_obj,host_id,trigger_data): ''' ...

  8. 分布式监控系统开发【day38】:主机存活检测程序解析(七)

    一.目录结构 二.入口 1.文件MonitorServer.py import os import sys if __name__ == "__main__": os.enviro ...

  9. 分布式监控系统开发【day38】:监控trigger表结构设计(一)

    一.需求讨论 1.zabbix触发器的模板截图 1.zabbix2.4.7 2.zabbix3.0 2.模板与触发器关联的好处 好处就是可以批量处理,比如我说我有1000机器都要监控cpu.内存.IO ...

随机推荐

  1. Linux Shell 返回值之 PIPESTATUS

    BASH SHELL中,通常使用 $? 来获取上一条命令的返回码,对于管道中的命令,使用$?只能获取管道中最后一条命令的返回码,例如: 下面的例子 /djdjal/dajiojidksj.file是一 ...

  2. Python距离放弃拉近的day03

    新的一天,依旧是内容补充,补充了数学没有的运算符,in和not in,就是判断in前面的东西是不是在后面的数据中,然后新课讲了平常最常用的字符串的方法,引号的里面全部都是字符串,在其中就会又如何判断这 ...

  3. java 常用工具整理

    mapUtil map操作工具类 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 ...

  4. Html 改变原有标签属性

    内容简要: 当标签内内容 达到某以条件的时候改变当前标签属性 例如原标签为<tr> 当tr内的值符合某一条件时把<tr>变成<a>标签 例:当订单状体编程已支付的时 ...

  5. 6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇-优化升级(安装Apache (Web服务器)软件,测试HTTP)

    为了和SDK升级保持协议一致,花了两天时间实现了用LUA开发,MQTT+HTTP方式实现远程升级 安装Apache主要是为了实现通过HTTP下载资源 升级介绍: 0,用户点击检查更新时,APP首先通过 ...

  6. Surging1.0发布在即,.NET开发者们,你们还在等什么?

    Surging1.0发布在即,.NET开发者们,你们还在等什么? 开源,是近三十年来互联网经久不衰的话题.它不仅仅是一种技术分享的形态,更是一种开放,包容,互利共赢的互联网精神. 不到30年前,大神林 ...

  7. 关于mysql中unique的插入Duplicate key

    MySQL数据库中 如果在后台中不做判断是否unique的column是否存在的话,直接把数据操作给dao层再传给DB的话,就会报重复的唯一值.如果确实是不希望先取出判断unique的column是否 ...

  8. iOS 基础:Frames、Bounds 和 CGGeometry

    https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...

  9. chattr文件锁

    chattr文件锁 chattr 和lsattr [root@1 ~]# whereis chattr #---查看chattr命令 chattr: /usr/bin/chattr /usr/shar ...

  10. javascript生成指定范围的随机整数

    JavaScript有提供一个生成值区间在(0, 1)的随机小数的函数. Math.random(); // 0.10529863457509858 如果你和喜欢的人一起执行这个函数,之后生成的随机小 ...