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

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. MySQL常用数值函数

    数值函数: 用来处理很多数值方面的运算,使用数值函数,可以免去很多繁杂的判断求值的过程,能够大大提高用户的工作效率. 1.ABS(x):返回 x 的绝对值 mysql> select abs(- ...

  2. SQLServer之通过视图修改数据

    通过视图增删改数据注意事项 需要对目标表的 UPDATE.INSERT 或 DELETE 权限(取决于执行的操作). 如果视图引用多个基表,则不能删除行. 如果视图引用多个基表,只能更新属于单个基表的 ...

  3. c/c++ 继承与多态 由子类向父类的转换规则

    问题1:子类B可以有3种方式(public, protected, private)继承父类A,用哪种方式继承,用户代码才能把子类B的对象转换成父类A的对象呢? 只用当子类B以public方式继承父类 ...

  4. java8 快速实现List转map 、分组、过滤等操作

    利用java8新特性,可以用简洁高效的代码来实现一些数据处理. 定义1个Apple对象: public class Apple { private Integer id; private String ...

  5. powerdesigner生成mysql带注释的ER图

    1.安装PowerDesigner的 参考 https://blog.csdn.net/sinat_34104446/article/details/79885141 2配置逆向工程 2.1新建模型p ...

  6. 用一条SQL语句显示所有可能的比赛组合

    一个叫team的表,里面只有一个字段name,一共有4 条纪录,分别是a.b.c.d,对应四个球队,现在四个球队进行比赛,用一条SQL语句显示所有可能的比赛组合. select * from team ...

  7. windows10 1903 64位系统

    近日,微软完成并开始推送Windows 10 2019年的第一个重大升级的预览版本,版本号是v1903,命名则是2019年5月更新版. 点击下载windows10

  8. SQLServer之修改索引

    使用SSMS数据库管理工具修改索引 使用表设计器修改索引 表设计器可以修改任何类型的索引,修改索引的步骤相同,本示例为修改唯一非聚集索引. 1.连接数据库,选择数据库,选择数据表->右键点击表- ...

  9. OKR源自德鲁克和格鲁夫,跟谷歌是天作之合:4星|《这就是OKR》

    这就是OKR,[美]约翰杜尔(John Doerr),中信出版社,9787508696881 作者以实习生的身份加入英特尔,跟格鲁夫有交集,见证了格鲁夫在英特尔创立OKR的过程和英特尔使用OKR作为管 ...

  10. PSQLException: FATAL: no pg_hba.conf entry for host "127.0.0.1", user "ambari", database "ambari", SSL off

    On your Postgres server, you will need to update your pg_hba.conf file to allow access for the ambar ...