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

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内存描述之内存节点node--Linux内存管理(二)

    1 内存节点node 1.1 为什么要用node来描述内存 这点前面是说的很明白了, NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对 ...

  2. c/c++ linux epoll系列1 创建epoll

    linux epoll系列1 创建epoll 据说select和poll的弱点是,随着连接(socket)的增加,性能会直线下降. epoll不会随着连接(socket)的增加,性能直线下降. 知识点 ...

  3. localStorage和sessionStorage数据存储

    var arr=[]; for(var i=0;i<4;i++){ arr[i]=i+i; } console.log(arr.toString()); //将json数据转化为字符串 var ...

  4. (十)Modifying Your Data

    Elasticsearch provides data manipulation and search capabilities in near real time. By default, you ...

  5. Windows将自己的代码发布到Github上

    1.在GitHub上创建一个repository 2.在自己的电脑上选择工作的文件夹使用Git Bash clone刚刚创建的repository 3.此时本地git应该已经连接了GitHub,如果没 ...

  6. Python Revisited (变量)

    目录 = 浅拷贝 深拷贝` 函数的默认参数为可变类型时 危险 全局变量与临时变量 global 在函数里面进行复制 再看一个例子 numpy里的bug? 待续 @ 首先,需要指出的是,Python的变 ...

  7. 【Beta阶段】展示博客

    Beta阶段展示博客 blog software buaa 1.团队成员简介 Email:qianlxc@126.com Free time:8:00 7:00 a.m ~ 11:00 12:00p. ...

  8. instanceof关键字的理解

    instanceof,两个单词组成,instance of,意为, "… 是 …的实例". 本身包含null值的判断.但是有不少人,先来个 obj != null,然后来个 obj ...

  9. mysqldump 导出

    导出单张表数据:mysqldump -h127.0.0.1  -uroot -p database_name table_name > user_action.sql

  10. PhotoShop不用魔棒、钢笔 建立较平整的选区 P进电脑屏幕里

    不用魔棒.抽出.钢笔等,还可以直接变形图建立调整选区,这种方法比钢笔抽出感觉简单一些,比魔棒仔细一些. 抽出或钢笔:抽出弄错了偏移了还要擦除,调整笔刷,抽出后可能还有毛边,需要用橡皮擦除: 钢笔,错了 ...