一、表结构关系图

二、表结构需求讨论

1、主机表(Host)

1、解决了什么问题?

1、如果我不想让它监控了,就有一个开关的东西给它禁掉
2、主机存活状态检测间隔

2、代码

class Host(models.Model):
name = models.CharField(max_length=64,unique=True)
ip_addr = models.GenericIPAddressField(unique=True)
host_groups = models.ManyToManyField('HostGroup',blank=True) # A B C
templates = models.ManyToManyField("Template",blank=True) # A D E
monitored_by_choices = (
('agent','Agent'),
('snmp','SNMP'),
('wget','WGET'),
)
monitored_by = models.CharField(u'监控方式',max_length=64,choices=monitored_by_choices)
status_choices= (
(1,'Online'),
(2,'Down'),
(3,'Unreachable'),
(5,'Problem'),
)
host_alive_check_interval = models.IntegerField(u"主机存活状态检测间隔", default=30)
status = models.IntegerField(u'状态',choices=status_choices,default=1)
memo = models.TextField(u"备注",blank=True,null=True) def __str__(self):
return self.name

2、主机组表(HostGroup)

1、解决了什么问题?

当你有1000台的主机,当有900台需要用到同一个模板的时候我就把这个主机添加到同一个组里,然后让这个组添加这个模板就可以

2、代码

class HostGroup(models.Model):
name = models.CharField(max_length=64,unique=True)
templates = models.ManyToManyField("Template",blank=True)
memo = models.TextField(u"备注",blank=True,null=True) def __str__(self):
return self.name

3、监控指标对应关系表(ServiceIndex)

1、解决了什么问题?

1、一个服务里面,会不会包含多个指标?
2、指标信息要不要存?那我存它干嘛?要不要监控指标了?
3、mysql里存的配置关系客户端需要不需要存?
因为客户端的监控插件里面已经知道要监控那些指标,不需要服务器给客户端传过去
4、既然客户端不需要,那服务器要存它干嘛?
  1、触发报警
  2、前端图形展示

5、每个服务存储的监控指标关系
6、对指标的格式要求必须在这里定义
7、你这个指标名为什么一定是唯一的?假如入linux和windows都有iowat这个指标,所以我有必要设置他们不一样吗?

2、代码

class ServiceIndex(models.Model):
name = models.CharField(max_length=64) #Linux cpu idle
key =models.CharField(max_length=64,unique=True) #idle
data_type_choices = (
('int',"int"),
('float',"float"),
('str',"string")
)
data_type = models.CharField(u'指标数据类型',max_length=32,choices=data_type_choices,default='int')
memo = models.CharField(u"备注",max_length=128,blank=True,null=True) def __str__(self):
return "%s.%s" %(self.name,self.key)

4、服务表(Service)

1、解决了什么问题?

1、客户端从服务端拿到的配置如何存储到数据库里,这个属于服务,是不是应该有一个服务表
2、服务名要不要是唯一的呢?
3、服务器主要把服务名给它,还有一个监控间隔给它
4、客户端采用的是插件形式的,肯定有一个插件列表的对应关系
5、一个插件就是一个脚本,比如服务名是cpu执行的插件名叫CpuMinone

2、代码

class Service(models.Model):
name = models.CharField(u'服务名称',max_length=64,unique=True)
interval = models.IntegerField(u'监控间隔',default=60)
plugin_name = models.CharField(u'插件名',max_length=64,default='n/a')
items = models.ManyToManyField('ServiceIndex',verbose_name=u"指标列表",blank=True)
has_sub_service = models.BooleanField(default=False,help_text=u"如果一个服务还有独立的子服务 ,选择这个,比如 网卡服务有多个独立的子网卡") #如果一个服务还有独立的子服务 ,选择这个,比如 网卡服务有多个独立的子网卡
memo = models.CharField(u"备注",max_length=128,blank=True,null=True) def __str__(self):
return self.name

5、模板表(Template)

1、解决了什么问题?

  1、当你有1000台的主机,当有900台需要用到同一个模板的时候我就把这个主机添加到同一个组里,然后让这个组添加这个模板就可以

2、一个模板可以包含多个服务

2、代码

class Template(models.Model):
name = models.CharField(u'模版名称',max_length=64,unique=True)
services = models.ManyToManyField('Service',verbose_name=u"服务列表")
#triggers = models.ManyToManyField('Trigger',verbose_name=u"触发器列表",blank=True)
def __str__(self):
return self.name

6、自定义用户(UserProfile)

1、解决了什么问题?

2、代码

class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=64,blank=True,null=True) def __str__(self):
return self.name

三、完整表结构代码 

from django.db import models
from django.contrib.auth.models import User
# Create your models here. class Host(models.Model):
name = models.CharField(max_length=64,unique=True)
ip_addr = models.GenericIPAddressField(unique=True)
host_groups = models.ManyToManyField('HostGroup',blank=True) # A B C
templates = models.ManyToManyField("Template",blank=True) # A D E
monitored_by_choices = (
('agent','Agent'),
('snmp','SNMP'),
('wget','WGET'),
)
monitored_by = models.CharField(u'监控方式',max_length=64,choices=monitored_by_choices)
status_choices= (
(1,'Online'),
(2,'Down'),
(3,'Unreachable'),
(5,'Problem'),
)
host_alive_check_interval = models.IntegerField(u"主机存活状态检测间隔", default=30)
status = models.IntegerField(u'状态',choices=status_choices,default=1)
memo = models.TextField(u"备注",blank=True,null=True) def __str__(self):
return self.name class HostGroup(models.Model):
name = models.CharField(max_length=64,unique=True)
templates = models.ManyToManyField("Template",blank=True)
memo = models.TextField(u"备注",blank=True,null=True) def __str__(self):
return self.name class ServiceIndex(models.Model):
name = models.CharField(max_length=64) #Linux cpu idle
key =models.CharField(max_length=64,unique=True) #idle
data_type_choices = (
('int',"int"),
('float',"float"),
('str',"string")
)
data_type = models.CharField(u'指标数据类型',max_length=32,choices=data_type_choices,default='int')
memo = models.CharField(u"备注",max_length=128,blank=True,null=True) def __str__(self):
return "%s.%s" %(self.name,self.key) class Service(models.Model):
name = models.CharField(u'服务名称',max_length=64,unique=True)
interval = models.IntegerField(u'监控间隔',default=60)
plugin_name = models.CharField(u'插件名',max_length=64,default='n/a')
items = models.ManyToManyField('ServiceIndex',verbose_name=u"指标列表",blank=True)
has_sub_service = models.BooleanField(default=False,help_text=u"如果一个服务还有独立的子服务 ,选择这个,比如 网卡服务有多个独立的子网卡") #如果一个服务还有独立的子服务 ,选择这个,比如 网卡服务有多个独立的子网卡
memo = models.CharField(u"备注",max_length=128,blank=True,null=True) def __str__(self):
return self.name class Template(models.Model):
name = models.CharField(u'模版名称',max_length=64,unique=True)
services = models.ManyToManyField('Service',verbose_name=u"服务列表")
#triggers = models.ManyToManyField('Trigger',verbose_name=u"触发器列表",blank=True)
def __str__(self):
return self.name class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=64,blank=True,null=True) def __str__(self):
return self.name

  

分布式监控系统开发【day37】:表结构设计(二)的更多相关文章

  1. Python之路,Day20 - 分布式监控系统开发

    Python之路,Day20 - 分布式监控系统开发   本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...

  2. 分布式监控系统开发【day37】:需求讨论(一)

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控需求讨论 如何实现监控服务器的水平扩展? 监控系统架构设计 一.为什么要做监控? 熟悉IT监控系统的设计原理 开发一个简版的类Zabbix监控系统 ...

  3. day26 分布式监控系统开发

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设 ...

  4. Python之分布式监控系统开发

    为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求 ...

  5. 分布式监控系统开发【day38】:监控trigger表结构设计(一)

    一.需求讨论 1.zabbix触发器的模板截图 1.zabbix2.4.7 2.zabbix3.0 2.模板与触发器关联的好处 好处就是可以批量处理,比如我说我有1000机器都要监控cpu.内存.IO ...

  6. 分布式监控系统开发【day37】:填充表配置项目(三)

    一.注册站点初始化数据库 1.目录结构 2.初始化数据库 python3 manage.py makemigrations python3 manage.py migrate #django2.0之前 ...

  7. 分布式监控系统开发【day37】:服务端生成配置数据(四)

    一.目录结构 二.引子与代码 1.客户端获取服务列表接口 1.解决了什么问题 客户端要给我获取服务列表的的时候,他肯定要告诉他是谁?他怎么告诉我,客户端必须有一个id号 Saltsack你装一个客户端 ...

  8. 分布式监控系统开发【day37】:监控客户端开发(五)

    一.目录结构 二.模块方法调用关系总图 三.入口文件main 1.解决了说明问题 1.客户端就干了一件事情,干什么事情 收集数据汇报给服务端? 但是我这个客户端是插件形式2.首先必须要传一个参数,st ...

  9. 分布式监控系统开发【day38】:报警策略设计(二)

    一.策略和动作多对多的好处坏处 1.好处: 相同服务,相同策略的服务可以不用重复写好多次触发器 2.坏处: 1.策略A给小李和小罗发邮件2.策略B给小胡和小崔发邮件3.策略A是第三部发邮件4.策略B是 ...

随机推荐

  1. Xshell连接linux主机

    一.获取linux主机的ip地址.用户名.密码 二.xshell里面建立连接 三.打开连接,操作远程linux主机

  2. Hive的命名空间

    Hive的命名空间分为:hiveconf , system, env 和 hivevar 1.hiveconf 的命名空间指的是hive-site.xml下面配置的环境变量 2.system的命名空间 ...

  3. LeetCode算法题-Reverse Words in a String III(Java实现)

    这是悦乐书的第259次更新,第272篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第126题(顺位题号是557).给定一个字符串,您需要反转句子中每个单词中的字符顺序,同 ...

  4. some settings for spacemacs golang

    spacemacs 中的 golang配置 spacemacs 中的 golang layer 已经有很多默认的配置了, 但是都是针对在 GOPATH 下的配置. 如果你的项目不再默认 的 GOPAT ...

  5. Maven构建项目出现No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 你应该 ...

  6. HybridStart发布v1.0测试版

    HybridStart是一款多webview模式的混合应用前端开发框架,本来只是作者自用的一套混合应用开发模板,为了进一步提高混合应用开发效率,近期着重在框架高通用性和易用性方面做了较大改进,比如将U ...

  7. bootstrapt 使用遇到问题

    1.布局的时候什么时候用xs,sm,md,lg? small grid (≥ 768px) = .col-sm-*, medium grid (≥ 992px) = .col-md-*, large ...

  8. vue2.0阻止事件冒泡

    <!--picker弹窗--><transition name="fade"> <div class="picker_wrap" ...

  9. springMVC第二天——高级参数绑定与其它特性

    大纲摘要: 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 2.@RequestMapping注解的使用 3.Controller方法返回值 4.Springmvc中异常处理 5 ...

  10. 基于 HTML5 WebGL 的 3D 工控裙房系统

    前言 工业物联网在中国的发展如火如荼,网络基础设施建设,以及工业升级的迫切需要都为工业物联网发展提供了很大的机遇.中国工业物联网企业目前呈现两种发展形式并存状况:一方面是大型通讯.IT企业的布局:一方 ...