分布式监控系统开发【day38】:报警策略设计(二)

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

1、好处:

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

2、坏处:

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

二、解决问题与代码实现

1、trigger发生后,如何报警

1、解决了什么问题

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

2、代码实现

2、报警动作列表

1、解决了什么问题

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

2、代码实现

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

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、创建动作列表

猜你喜欢

转载自www.cnblogs.com/luoahong/p/9564389.html