分佈式監控系統開發【day38】:報警策略設計(二)

1、策略和動做多對多的好處壞處

一、好處:

相同服務,相同策略的服務能夠不用重複寫好屢次觸發器python

二、壞處:

一、策略A給小李和小羅發郵件
二、策略B給小胡和小崔發郵件
三、策略A是第三部發郵件
四、策略B是第五步發郵件express

2、解決問題與代碼實現

一、trigger發生後,如何報警

一、解決了什麼問題

一、問題恢復自定義通知
二、觸發是觸發器決定,報警不報警是報警中心說了算,一個是收集部門,一個是處理部門
三、報警的次數報警升級閾值
四、通知組別
五、腳本名稱至關與故障自愈django

二、代碼實現

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

二、報警動做列表

一、解決了什麼問題

一、觸發和動做是多對一
二、動做列表
三、報警多少次與多少次中間報警
四、報警策略,一個策略包含不少動做
五、策略和動做多對多的好處壞處3d

二、代碼實現

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

3、和去年寫的代碼的區別

一、區別內容:

一、以前的triggers關聯的是模板
二、以前是多對多,如今是一對多orm

二、區別的代碼:

一、以前的triggers關聯的是模板對象

host_groups = models.ManyToManyField('HostGroup',blank=True) #在template裏已經關聯了主機和tirgger了,爲何這裏還要有
hosts = models.ManyToManyField('Host',blank=True)

二、以前triggers是多對多,如今是一對多blog

triggers = models.ManyToManyField('Trigger',blank=True,help_text=u"想讓哪些trigger觸發當前報警動做")

4、後臺操做

一、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)

二、後臺建立表達式

一、建立截圖ip

二、建立完成ci

三、表達式列表it

三、triggers和表達式有關聯表達式嗎?

一、反向的關聯

  1. triggers和表達式有關聯表達式嗎?
  2. 反向的,triggers表達式關聯的trigger
  3. 正常在在admin應該是triggeradmin裏能看到trigger
  4. 沒有直接關聯的,我想看到反向關聯的數據

二、實現代碼以下:

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',

四、建立觸發器列表

五、建立動做列表

相關文章
相關標籤/搜索