分布式监控系统开发【day38】:报警策略设计(二)
一、策略和动作多对多的好处坏处

1、好处:
相同服务,相同策略的服务可以不用重复写好多次触发器
2、坏处:
1、策略A给小李和小罗发邮件
2、策略B给小胡和小崔发邮件
3、策略A是第三部发邮件
4、策略B是第五步发邮件
二、解决问题与代码实现
1、trigger发生后,如何报警
1、解决了什么问题
1、问题恢复自定义通知
2、触发是触发器决定,报警不报警是报警中心说了算,一个是收集部门,一个是处理部门
3、报警的次数报警升级阈值
4、通知组别
5、脚本名称相当与故障自愈
2、代码实现
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
2、报警动作列表
1、解决了什么问题
1、触发和动作是多对一
2、动作列表
3、报警多少次与多少次中间报警
4、报警策略,一个策略包含很多动作
5、策略和动作多对多的好处坏处
2、代码实现
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
三、和去年写的代码的区别
1、区别内容:
1、之前的triggers关联的是模板
2、之前是多对多,现在是一对多
2、区别的代码:
1、之前的triggers关联的是模板
host_groups = models.ManyToManyField('HostGroup',blank=True) #在template里已经关联了主机和tirgger了,为什么这里还要有
hosts = models.ManyToManyField('Host',blank=True)
2、之前triggers是多对多,现在是一对多
triggers = models.ManyToManyField('Trigger',blank=True,help_text=u"想让哪些trigger触发当前报警动作")
四、后台操作
1、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)
2、后台创建表达式
1、创建截图

2、创建完成

3、表达式列表

3、triggers和表达式有关联表达式吗?
1、反向的关联
- triggers和表达式有关联表达式吗?
- 反向的,triggers表达式关联的trigger
- 正常在在admin应该是triggeradmin里能看到trigger
- 没有直接关联的,我想看到反向关联的数据
2、实现代码如下:
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',
4、创建触发器列表

5、创建动作列表

分布式监控系统开发【day38】:报警策略设计(二)的更多相关文章
- Python之路,Day20 - 分布式监控系统开发
Python之路,Day20 - 分布式监控系统开发 本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...
- 分布式监控系统开发【day38】:报警策略队列处理(五)
一.目录结构 二.报警策略队列处理 1.入口MonitorServer import os import sys if __name__ == "__main__": os.env ...
- 分布式监控系统开发【day37】:需求讨论(一)
本节内容 为什么要做监控? 常用监控系统设计讨论 监控需求讨论 如何实现监控服务器的水平扩展? 监控系统架构设计 一.为什么要做监控? 熟悉IT监控系统的设计原理 开发一个简版的类Zabbix监控系统 ...
- Python之分布式监控系统开发
为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求 ...
- day26 分布式监控系统开发
本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设 ...
- 分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)
一.需求讨论 1.请问如何解决延迟问题 1000台机器,每1分钟循环一次但是刚好第一次循环第一秒刚处理完了,结果还没等到第二分钟又出问题,你那必须等到第二次循环,假如我这个服务很重要必须实时知道,每次 ...
- 分布式监控系统开发【day38】:报警自动升级代码解析及测试(八)
一.报警自动升级代码解析 发送邮件代码 def action_email(self,action_obj,action_operation_obj,host_id,trigger_data): ''' ...
- 分布式监控系统开发【day38】:主机存活检测程序解析(七)
一.目录结构 二.入口 1.文件MonitorServer.py import os import sys if __name__ == "__main__": os.enviro ...
- 分布式监控系统开发【day38】:监控trigger表结构设计(一)
一.需求讨论 1.zabbix触发器的模板截图 1.zabbix2.4.7 2.zabbix3.0 2.模板与触发器关联的好处 好处就是可以批量处理,比如我说我有1000机器都要监控cpu.内存.IO ...
随机推荐
- Linux学习历程——Centos 7 touch命令
一.命令介绍 touch 命令用于创建空白文件,以及设置文件的时间. ----------------------------------------------------------------- ...
- ubuntu16.04系统深度学习开发环境、常用软件环境(如vscode、wine QQ、 360wifi驱动(第三代暂无))搭建相关资料
事后补充比较全面的(找对资料真的省一半功夫):https://www.jianshu.com/p/5b708817f5d8?from=groupmessage Ubuntu16.04 + 1080Ti ...
- 复制命令(ROBOCOPY)
ROBOCOPY 命令: // 描述: 相比较 xcopy.copy 来说,复制的功能就强大很多, xcopy.copy 是单线程的,robocopy是多线程的,但是和一些专业的复制软件相比速度还是 ...
- MySQL 5.7.13 的一个BUG
mysql今天从5.6切到5.7,在测试环境中,日志是全部打印的,发现打了一个警告: Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for ...
- admin组件
Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS 看到它 ...
- Redis学习笔记(1)——Redis简介
一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...
- zookeeper安装教程(zookeeper3.4.5为例)
zookeeper有单机.伪集群.集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式.下边对这三种部署方式逐一进行讲解. 一.单机安装 1.1 下载 进入要下载的版本的目录,选择.tar.g ...
- VScode:保存格式化问题,ESLint插件和编辑器本身冲突
我喜欢使用ESLint来保持我的代码的规范性,但是最近遇到问题:就是ctrl+s后变得如下: 我已经解决了:发现原来是编辑器本身的格式化和插件带的格式化起冲突,因为我把两者同时启用:FormatOnS ...
- 文本分类实战(三)—— charCNN模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- 洛谷 P1908 逆序对
\[传送门qwq\] 题目描述 猫猫\(TOM\)和小老鼠\(JERRY\)最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计. 最近,\(TOM\)老猫查阅 ...