CMDB项目之监控模板template设计

  1. 用过zabbix的人都知道各种监控项目都是建立在模板的基础上,然后自己也模仿做一个监控系统

  2. 先画张关系图,是自己以后设计监控系统的模板图


    设计一个父类template模板类,接下来就是各种具体的模板,比如linux监控的模板、Windows监控的模板或者是自定义模板等等,再拿linux的模板来说,linuxTemplate下面肯定监控CPU、内存、硬盘等信息,暂且把这些监控的服务都称为一个服务的集合service list,然后CPU下面才是真正的每一个监控项,如cpu的iowait、usage、idle等等


  3. models设计


  4. class Templates(models.Model):  #monitor template
        name = models.CharField(max_length=50, unique=True)
        service_list =  models.ManyToManyField('ServiceList')
        
        def __unicode__(self):
            return self.name

  定义了一个Template类,有该模板的名字,主意Template和ServiceList这两个类的对应关系:多对多,即意味着一个模板可以对应多个服务集合,一个服务集合也可以对应多个模板,就像linuxTemplate会包含CPU、MEM等,CPU也可以属于LinuxTemplate和WinTemplate一样

class ServiceList(models.Model): 
    name = models.CharField(max_length=50,unique=True)
    service = models.ForeignKey('Services')
    check_interval = models.IntegerField(default=300)
    conditons = models.ManyToManyField('Conditions',verbose_name=u'监控阀值',null=True,blank=True)
   
    description = models.TextField()
   
    def __unicode__(self):
        return self.name

上面是ServiceList类,正如前面提到的,ServiceList包含Services,所以service这一列是ServicesList的外键;此外ServiceList还和Conditions也是多对多的关系,每个服务集合都有监控计算阀值的方法,而这些计算方法也可以被多个服务集合所使用


再看看Conditions(监控报警阀值计算)这个类

class Conditions(models.Model):
    name = models.CharField(max_length=100,unique=True)
    item = models.ForeignKey('Items', verbose_name=u'监控值')
    formula = models.ForeignKey('Formulas', verbose_name=u'运算函数',null=True,blank=True)
    operator = models.ForeignKey(Operators,verbose_name=u'运算符',null=True,blank=True)
    data_type = models.CharField(default='char',max_length=32, verbose_name=u'数据类型')
    threshold = models.CharField(max_length=64, verbose_name=u'阀值')
    def __unicode__(self):
        return self.name

同样,有name列,还有外键item‘监控值’、formula‘运算函数’、operator‘运算符’、data_type'数据类型'、threshold‘阀值’


同理,看下Conditions类关联的一些类表

Items类:

class Items(models.Model): # monitor item
    name = models.CharField(max_length=50, unique=True)
    key = models.CharField(max_length=100,unique=True)
    data_type_option = (('float','Float'),('string','String'),('integer', 'Integer') ) 
    data_type = models.CharField(max_length=50, choices=data_type_option)
    unit = models.CharField(max_length=30,default='%')
    enabled = models.BooleanField(default=True)
    def __unicode__(self):
        return self.name

Formulas类

class Formulas(models.Model):
    name = models.CharField(max_length=64,unique=True)
    key = models.CharField(max_length=64,unique=True)
    memo = models.TextField()
    
    def __unicode__(self):
        return self.name

Operators类

class Operators(models.Model):
    name = models.CharField(max_length=32,unique=True)    
    key = models.CharField(max_length=32)    
    memo = models.TextField()
    def __unicode__(self):
        return self.name

基本上监控模板表结构算是设计完了

你可能感兴趣的:(python,template,监控)