zoukankan      html  css  js  c++  java
  • 分布式监控系统开发【day38】:监控trigger表结构设计(一)

    一、需求讨论

    1、zabbix触发器的模板截图

     1、zabbix2.4.7

    2、zabbix3.0

    2、模板与触发器关联的好处

    好处就是可以批量处理,比如我说我有1000机器都要监控cpu、内存、IO的监控

    3、模板触发器多对多的优缺点

    1、优点:

    可以批量引用,不用重复创建相同的模板,比如我说我有1000机器都要监控cpu、内存、IO的监控创建相同的触发器,

    2、缺点:

    模板1更改触发器的阀值会影响所有的模板

    3、生产不建议使用多对多的关系,这样灵活性就会很差,而且修改模板1会影响别的模板,这样会出现很多坑

    4、表达式的创建考虑的逻辑处理

    二、实现代码

    1、触发器表

    class Trigger(models.Model):
        name = models.CharField(u'触发器名称',max_length=64)
        severity_choices = (
            (1,'Information'),
            (2,'Warning'),
            (3,'Average'),
            (4,'High'),
            (5,'Diaster'),
        )
        #expressions = models.ManyToManyField(TriggerExpression,verbose_name=u"条件表达式")
        severity = models.IntegerField(u'告警级别',choices=severity_choices)
        enabled = models.BooleanField(default=True)
        memo = models.TextField(u"备注",blank=True,null=True)
    
        def __str__(self):
            return "<serice:%s, severity:%s>" %(self.name,self.get_severity_display())

    2、触发器表达式表

    class TriggerExpression(models.Model):
        trigger = models.ForeignKey('Trigger',verbose_name=u"所属触发器")
        service = models.ForeignKey(Service,verbose_name=u"关联服务")
        service_index = models.ForeignKey(ServiceIndex,verbose_name=u"关联服务指标")
        specified_index_key = models.CharField(verbose_name=u"只监控专门指定的指标key",max_length=64,blank=True,null=True)
        operator_type_choices = (('eq','='),('lt','<'),('gt','>'))
        operator_type = models.CharField(u"运算符",choices=operator_type_choices,max_length=32)
        data_calc_type_choices = (
            ('avg','Average'),
            ('max','Max'),
            ('hit','Hit'),
            ('last','Last'),
        )
        data_calc_func= models.CharField(u"数据处理方式",choices=data_calc_type_choices,max_length=64)
        data_calc_args = models.CharField(u"函数传入参数",help_text=u"若是多个参数,则用,号分开,第一个值是时间",max_length=64)
        threshold = models.IntegerField(u"阈值")
        logic_type_choices = (('or','OR'),('and','AND'))
        logic_type = models.CharField(u"与一个条件的逻辑关系",choices=logic_type_choices,max_length=32,blank=True,null=True)
    
        def __str__(self):
            return "%s %s(%s(%s))" %(self.service_index,self.operator_type,self.data_calc_func,self.data_calc_args)
  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/luoahong/p/9558352.html
Copyright © 2011-2022 走看看