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)
  • 相关阅读:
    laydate指定日期不可选
    kindeditor上传及播放视频的问题
    【Mood】八上期末考
    关于Java注解(annotation)的简单理解
    关于RabbitMQ的简单理解
    关于MongoDB的简单理解(三)--Spring Boot篇
    关于MongoDB的简单理解(二)--Java篇
    关于linux系统密码策略的设置(转载)
    mysq 报错, sql语句在数据库里运行正常, 在内网测试正常,打包放外网的时候就报下面错误
    java mybatisplus+springboot服务器跨域问题
  • 原文地址:https://www.cnblogs.com/luoahong/p/9558352.html
Copyright © 2011-2022 走看看