本节内容
为什么要做监控?
常用监控系统设计讨论
监控系统架构设计
监控表结构设计
为什么要做监控?
一个简版的类Zabbix监控系统
自动化开发项目的程序设计思路及架构解藕原则
监控系统需求讨论
1.可监控常用系统服务、应用、网络设备等
2.一台主机上可监控多个不同服务、不同服务的监控间隔可不同
3.同一个服务在不同主机上的监控间隔、报警阈值可不同
5.告警级别:
-
- 通知给特定的用户
- 升级设定
6.历史数据 的存储和优化
-
-
7. 数据可视化,如何做出简洁美观的用户界面?
8.如何实现单机支持5000+机器监控需求?
9.采取何种通信方式?主动、被动?
10.如何实现监控服务器的水平扩展?
采用什么架构?
•主动通信? Snmp,wget…
•被动通信?Agent ---how to communicate with the monitor server
•Socket server –> Sockect client
采用HTTP好处
1.接口设计简单
2.容易水平扩展做分布式
3.socket稳定成熟,省去较多的通信维护精力
Http特性:
1.短连接
2.无状态
3.安全认证
4.被动通信
监控系统架构设计
display: none;" onclick="cnblogs_code_hide('c7cb8531-c6f1-4f2f-9df1-8dd4f8a69fe5',event)" src="https://www.jb51.cc/res/2019/02-10/23/405b18b4b6584ae338e0f6ecaf736533.gif" alt="">
django.db
name = models.CharField(max_length=64,unique= ip_addr = models.GenericIPAddressField(unique= host_groups = models.ManyToManyField(,blank=True)
templates = models.ManyToManyField(,blank=True)
monitored_by_choices = (, (, (, monitored_by = models.CharField(u,max_length=64,choices= status_choices= (1, (2, (3, (4, status = models.IntegerField(u,choices=status_choices,default=1 memo = models.TextField(u,blank=True,null=
name = models.CharField(max_length=64,unique= templates = models.ManyToManyField(,blank= memo = models.TextField(u,null=
name = models.CharField(max_length=64 key =models.CharField(max_length=64 data_type_choices = (, (, (, data_type = models.CharField(u,max_length=32,choices=data_type_choices,default= memo = models.CharField(u,max_length=128,null= %s.%s %
name = models.CharField(u名称,unique= interval = models.IntegerField(u,default=60 plugin_name = models.CharField(u插件名,default= items = models.ManyToManyField(,verbose_name=u,blank= memo = models.CharField(u,null=
监控系统需求讨论
1.可监控常用系统服务、应用、网络设备等
2.一台主机上可监控多个不同服务、不同服务的监控间隔可不同
3.同一个服务在不同主机上的监控间隔、报警阈值可不同
5.告警级别:
- 通知给特定的用户
- 升级设定
6.历史数据 的存储和优化
7. 数据可视化,如何做出简洁美观的用户界面?
8.如何实现单机支持5000+机器监控需求?
9.采取何种通信方式?主动、被动?
10.如何实现监控服务器的水平扩展?
采用什么架构?
•主动通信? Snmp,wget…
•被动通信?Agent ---how to communicate with the monitor server
•Socket server –> Sockect client
采用HTTP好处
1.接口设计简单
2.容易水平扩展做分布式
3.socket稳定成熟,省去较多的通信维护精力
Http特性:
1.短连接
2.无状态
3.安全认证
4.被动通信
监控系统架构设计
display: none;" onclick="cnblogs_code_hide('c7cb8531-c6f1-4f2f-9df1-8dd4f8a69fe5',event)" src="https://www.jb51.cc/res/2019/02-10/23/405b18b4b6584ae338e0f6ecaf736533.gif" alt="">
django.db
name = models.CharField(max_length=64,unique= ip_addr = models.GenericIPAddressField(unique= host_groups = models.ManyToManyField(,blank=True)
templates = models.ManyToManyField(,blank=True)
monitored_by_choices = (, (, (, monitored_by = models.CharField(u,max_length=64,choices= status_choices= (1, (2, (3, (4, status = models.IntegerField(u,choices=status_choices,default=1 memo = models.TextField(u,blank=True,null=
name = models.CharField(max_length=64,unique= templates = models.ManyToManyField(,blank= memo = models.TextField(u,null=
name = models.CharField(max_length=64 key =models.CharField(max_length=64 data_type_choices = (, (, (, data_type = models.CharField(u,max_length=32,choices=data_type_choices,default= memo = models.CharField(u,max_length=128,null= %s.%s %
name = models.CharField(u名称,unique= interval = models.IntegerField(u,default=60 plugin_name = models.CharField(u插件名,default= items = models.ManyToManyField(,verbose_name=u,blank= memo = models.CharField(u,null=
django.db
name = models.CharField(max_length=64,unique= ip_addr = models.GenericIPAddressField(unique= host_groups = models.ManyToManyField(,blank=True)
templates = models.ManyToManyField(,blank=True)
monitored_by_choices = (, (, (, monitored_by = models.CharField(u,max_length=64,choices= status_choices= (1, (2, (3, (4, status = models.IntegerField(u,choices=status_choices,default=1 memo = models.TextField(u,blank=True,null=
name = models.CharField(max_length=64,unique= templates = models.ManyToManyField(,blank= memo = models.TextField(u,null=
name = models.CharField(max_length=64 key =models.CharField(max_length=64 data_type_choices = (, (, (, data_type = models.CharField(u,max_length=32,choices=data_type_choices,default= memo = models.CharField(u,max_length=128,null= %s.%s %
name = models.CharField(u名称,unique= interval = models.IntegerField(u,default=60 plugin_name = models.CharField(u插件名,default= items = models.ManyToManyField(,verbose_name=u,blank= memo = models.CharField(u,null=