CMDB項目之監控模板template設計

  1. 用過zabbix的人都知道各種監控項目都是建立在模板的基礎上,然後自己也模仿做一個監控系統

  2. 先畫張關係圖,是自己以後設計監控系統的模板圖

    wKioL1bU7MKwx7aiAABFiFf9gak452.png

    設計一個父類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

基本上監控模板表結構算是設計完了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章