监控系统--建表

  1. 刚学习django,模仿zabbix写个监控系统

    环境:python 2.7.8

    django 1.8.3

    mysql 5.1.73

    开发工具:eclipse

  2. 创建了一个my_cmdb的项目,在下面再创建一个web的app
  3. 设计表结构:
  4. #_*_coding:utf-8_*_
    import sys
    reload(sys) 
    sys.setdefaultencoding("utf-8") 
    from django.db import models
    
    from django.contrib.auth.models import User
    # Create your models here.
    class UserProfile(models.Model):
        user = models.OneToOneField(User)
        email = models.EmailField()
        def __unicode__(self):
            return ‘%s‘ % self.user
    
    class Idc(models.Model):
        name=models.CharField(max_length=50,unique=True)
        def __unicode__(self):
            return self.name
    
    class Group(models.Model):
        name = models.CharField(max_length=50,unique=True)
        display_name = models.CharField(max_length=50)
        template_list = models.ManyToManyField(‘Templates‘)
        def __unicode__(self):
            return self.display_name
    
    class Host(models.Model):
        hostname=models.CharField(max_length=50, unique=True)
        display_name = models.CharField(max_length=50, unique = True)
        ip = models.IPAddressField(unique=True)
        child_of = models.ForeignKey(‘TrunkServers‘, null=True,blank=True)
        idc = models.ForeignKey(Idc, null=True, blank=True)
        group = models.ManyToManyField(Group, null=True, blank=True)
        template_list = models.ManyToManyField(‘Templates‘,null=True,blank=True)
        custom_services = models.ManyToManyField(‘Services‘,null=True,blank=True)
        port = models.IntegerField(default=‘22‘)
        os = models.CharField(max_length=20, default=‘linux‘, verbose_name=‘Operating System‘)
    
        #snmp related
        status_monitor_on = models.BooleanField(default=True)
        snmp_on = models.BooleanField(default=True)
        snmp_version = models.CharField(max_length=10,default=‘2c‘)
        snmp_community_name = models.CharField(max_length=50,default=‘public‘)
        snmp_security_level = models.CharField(max_length=50,default=‘auth‘)
        snmp_auth_protocol = models.CharField(max_length=50,default=‘MD5‘)
        snmp_user = models.CharField(max_length=50,default=‘triaquae_snmp‘)
        snmp_pass = models.CharField(max_length=50,default=‘my_pass‘)
    
        def __unicode__(self):
            return self.display_name
    
    class ServerStatus(models.Model):
        host = models.OneToOneField(‘Host‘)
        hostname = models.CharField(max_length=100)
        host_status = models.CharField(max_length=10,default=‘Unkown‘)
        ping_status = models.CharField(max_length=100,default=‘Unkown‘)
        last_check = models.CharField(max_length=100,default=‘N/A‘)
        host_uptime = models.CharField(max_length=50,default=‘Unkown‘)
        attempt_count = models.IntegerField(default=0)
        breakdown_count = models.IntegerField(default=0)
        up_count = models.IntegerField(default=0)
        snmp_alert_count = models.IntegerField(default=0)
        availability = models.CharField(max_length=20,default=0)
        def __unicode__(self):
            return self.host
    
    class TrunkServers(models.Model):
        name = models.CharField(max_length=50,unique=True)
        description = models.CharField(max_length=150,blank=True)
        ip_address = models.IPAddressField()
        port = models.IntegerField(default = 9998)
        def __unicode__(self):
            return self.name
    
    class Templates(models.Model):  #monitor template
        name = models.CharField(max_length=50, unique=True)
        service_list =  models.ManyToManyField(‘ServiceList‘)
        graph_list = models.ManyToManyField(‘Graphs‘,blank=True,null=True)
        # = models.ManyToManyField(‘Group‘,blank=True,null=True)
        
        def __unicode__(self):
            return self.name
    
    class Services(models.Model):  #services list
        name = models.CharField(max_length=50,unique=True)
        monitor_type_list = ((‘agent‘,‘Agent‘),(‘snmp‘,‘SNMP‘),(‘wget‘,‘Wget‘))
        monitor_type = models.CharField(max_length=50, choices=monitor_type_list)
        plugin = models.CharField(max_length=100) 
        item_list = models.ManyToManyField(‘Items‘)
        #trigger_list = models.ManyToManyField(‘triggers‘,blank=True)
        #trigger = models.ForeignKey(‘Triggers‘, null=True,blank=True)
        
        #flexible_intervals = 
        def __unicode__(self):
            return self.name
    
    class Items(models.Model): # monitor item
        name = models.CharField(max_length=50, unique=True)
        key = models.CharField(max_length=100,unique=True)
        data_type_option = ((‘float‘,‘Float‘),(‘string‘,‘String‘),(‘integer‘, ‘Integer‘) ) 
        data_type = models.CharField(max_length=50, choices=data_type_option)
        unit = models.CharField(max_length=30,default=‘%‘)
        enabled = models.BooleanField(default=True)
        def __unicode__(self):
            return self.name
    
    class ServiceList(models.Model): 
        name = models.CharField(max_length=50,unique=True)
        service = models.ForeignKey(‘Services‘)
        check_interval = models.IntegerField(default=300)
        conditons = models.ManyToManyField(‘Conditions‘,verbose_name=u‘阀值列表‘,null=True,blank=True)
        #expression = models.CharField(max_length=1000)
        description = models.TextField()
        ‘‘‘
        serverity_list = ((‘information‘,‘Information‘),
                           ( ‘warning‘ ,‘Warning‘),
                           (‘critical‘, ‘Critical‘),
                           (‘urgent‘,‘Urgent‘),
                           (‘disaster‘,‘Disaster‘) )
        serverity = models.CharField(max_length=30, choices=serverity_list)
        ‘‘‘
        #dependencies 
        def __unicode__(self):
            return self.name
    
    class Graphs(models.Model):
        name = models.CharField(max_length=50, unique=True)
        datasets = models.ManyToManyField(‘Items‘)
        graph_type = models.CharField(max_length=50)
        def __unicode__(self):
            return self.name
    
        
    class Actions(models.Model):
        name = models.CharField(max_length=100,unique=True)
        condition_list = models.ManyToManyField(‘Conditions‘)
        operation_list = models.ManyToManyField(‘Operations‘)
        subject = models.CharField(max_length=100)
        message = models.CharField(max_length=250)
        recovery_notice = models.BooleanField(default=True)
        recovery_subject = models.CharField(max_length=100)
        recovery_message = models.CharField(max_length=250)
        enabled = models.BooleanField(default=True)
        def __unicode__(self):
            return self.name
    class Formulas(models.Model):
        name = models.CharField(max_length=64,unique=True)
        key = models.CharField(max_length=64,unique=True)
        memo = models.TextField()
        
        def __unicode__(self):
            return self.name 
        
    class Operators(models.Model):
        name = models.CharField(max_length=32,unique=True)    
        key = models.CharField(max_length=32)    
        memo = models.TextField()
        def __unicode__(self):
            return self.name 
         
    class Conditions(models.Model):
        name = models.CharField(max_length=100,unique=True)
        item = models.ForeignKey(‘Items‘, verbose_name=u‘监控值‘)
        formula = models.ForeignKey(‘Formulas‘, verbose_name=u‘运算函数‘,null=True,blank=True)
        operator = models.ForeignKey(Operators,verbose_name=u‘运算符‘,null=True,blank=True)
        data_type = models.CharField(default=‘char‘,max_length=32, verbose_name=u‘数据类型‘)
        threshold = models.CharField(max_length=64, verbose_name=u‘阀值‘)
        def __unicode__(self):
            return self.name
    
    class Operations(models.Model):
        send_to_users = models.ManyToManyField(‘UserProfile‘)
        send_to_groups = models.ManyToManyField(‘Group‘)
        notifier_type = ((‘email‘,‘Email‘),(‘sms‘,‘SMS‘))
        send_via = models.CharField(max_length=30,choices=notifier_type)
        notice_times = models.IntegerField(default=5)
        notice_interval = models.IntegerField(default=300, verbose_name=‘notice_interval(sec)‘)
    """
    class plugins(models.Model):
        name = models.CharField(max_length=50)
        description = models.CharField(max_length=150, blank=True)
        plugin_file_name = models.CharField(max_length=150)
        def __unicode__(self):
    	return self.name
    """

5.将设计的表添加到admin.py中

from django.contrib import admin
import models

# Register your models here.
# Register your models here.
admin.site.register(models.Idc)
admin.site.register(models.Host)
admin.site.register(models.Group)
admin.site.register(models.UserProfile)
admin.site.register(models.ServerStatus,)
admin.site.register(models.Templates)
admin.site.register(models.Services)
admin.site.register(models.Items,)
admin.site.register(models.ServiceList)
admin.site.register(models.Graphs)
admin.site.register(models.Operations)
admin.site.register(models.Actions)
admin.site.register(models.TrunkServers)
admin.site.register(models.Conditions)
admin.site.register(models.Formulas)
admin.site.register(models.Operators)
admin.site.register(models.TaskCenter)
admin.site.register(models.TaskLog)

6.使用eclipse 直接makemigrations——migrate--run,启动程序

7.

Performing system checks...

System check identified some issues:

WARNINGS:
web.Host.custom_services: (fields.W340) null has no effect on ManyToManyField.
web.Host.group: (fields.W340) null has no effect on ManyToManyField.
web.Host.ip: (fields.W900) IPAddressField has been deprecated. Support for it (except in historical migrations) will be removed in Django 1.9.
	HINT: Use GenericIPAddressField instead.
web.Host.template_list: (fields.W340) null has no effect on ManyToManyField.
web.ServiceList.conditons: (fields.W340) null has no effect on ManyToManyField.
web.Templates.graph_list: (fields.W340) null has no effect on ManyToManyField.
web.TrunkServers.ip_address: (fields.W900) IPAddressField has been deprecated. Support for it (except in historical migrations) will be removed in Django 1.9.
	HINT: Use GenericIPAddressField instead.

System check identified 7 issues (0 silenced).
March 04, 2016 - 06:17:27
Django version 1.8.3, using settings ‘my_cmdb.settings‘
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

8.输入http://127.0.0.1:8000/admin/ 进入后台,但提示需要账号密码

9.在my_cmdb项目的目录下,python manage.py createsuperuser 创建admin的账号密码

10.进入后台

可以对数据操作了

时间: 2024-09-30 15:44:37

监控系统--建表的相关文章

分布式监控系统Ganglia简介及安装

一.Ganglia简介 Ganglia是一款为HPC(高性能计算) 集群设计的可扩展性 的分布式监控系统,它可以监视和显示集群中节点的各种状态信息,他由运行在各个节点上的gmond守护进程来采集 CPU.内存.磁盘利用率.I/O负载.网络流量情况等方面的数据.然后汇总到gmetad守护进程下,使用rrdtool存储数据,然后将历史数据以曲线方式通过PHP页面呈现. Ganglia监控系统由三部分组成,分别是gmond.gmetad.webfrontend gmond  一个守护进程运行在每个需要

Python运维三十六式:用Python写一个简单的监控系统

市面上有很多开源的监控系统:Cacti.nagios.zabbix.感觉都不符合我的需求,为什么不自己做一个呢 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 首先数据库建表 建立一个数据库“falcon”,建表语句如下: 1 CREATE TABLE `stat` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 3 `host` varchar(256) DEFAULT NULL, 4 `mem_fr

机房监控系统解说---传感器篇

一般的大中型企业因为需要办公的人数较多,内部数据交换频繁,办公设备也比较多以通常都会建有一个独立的机房,用于支撑企业办公设备正常运作.机房里面一般都会有各种电源.配线.服务器.空调等各种设备.都说机房重地需要注意的安全事项比较多1.消防安全:防火.配备灭火器.消防栓.消防龙头等,安装防火门,装修材料应具有阻燃特性.建有消防通道,逃生路线指示,火灾报警设备. 2.防盗安全:安装红外.微波防盗传感器,监控设备,对机箱等设备加锁防止部件被盗. 3.电气保护:配备漏电保护,防止人员电击.配备防雷设施,防

Oracle-常用系统数据字典表、系统包功能分类

近期因为用到了一些关于系统的一些信息,索性搜集了一点关于Oracle数据库系统的一些系统表.功能等,方便日后查看.日后待补充. 原文地址:https://blog.csdn.net/demonson/article/details/53189513: [查看用户下属的一些表及其他结构信息] 查看表:user_tables.all_tables.dba_tables查看表字段:user_tab_columns.all_ tab_columns.dba_tab_columns查看表注释:user_

Docker容器监控系统初探

https://www.jianshu.com/p/abfa502e43a6 随着线上服务的全面docker化,对docker容器的监控就很重要了.SA的监控系统是物理机的监控,在一个物理机跑多个容器的情况下,我们是没法从一个监控图表里面区分各个容器的资源占用情况的.为了更好的监控容器运行情况,更重要的是为了后续的容器动态调度算法需要的大量运行时数据的搜集,经过调研后,基于CAdvisor + InfluxDB + Grafana搭建了这套容器监控系统. 1 容器监控方案选择 在调研容器监控系统

项目一. 移动物体监控系统

项目一. 移动物体监控系统 Sprint0-产品设计与规划 第1课-产品功能展示 我们在学校的时候,做项目开发,可能就是想到了哪里就做哪里.但是在实际公司的开发过程中,我们是要严格的按照公司的流程来进行的. 项目开发分成了准备阶段和开发阶段: 我们的最后效果就是,利用摄像头和音响完成连接,如图: 当有移动物体在摄像头面前移动时,摄像头能采集图像和视频,并且发出报警的声音.通过访问对应的局域网,我们可以通过网页访问,如下: 第2课-产品功能模型设计 第3课-Product Backlog规划 我们

基于Android平台的i-jetty网站智能农业监控系统

基于android平台i-jetty网站的智能农业监控系统 摘要:传统的监控系统,一般是基于PC的有线通信传输,其有很多不足之处,如功耗较高.布线成本高.难度大,适应性差,可扩展性不强,增加新的通信线路需要再次布线施工,而且维护起来也比较麻烦,一旦线路出问题,需要繁琐的检查.而嵌入式Web监控系统是基于物联网技术,其无线通信技术具有成本低廉.适应性强.扩展性强.信息安全.使用维护简单等优点. 智能农业中,种植大棚是通过大棚内安装温湿度以及光照传感器,来对农作物的环境参数进行实时采集,由Web监控

监控开发之如何开发简单高性能扩展性强的监控系统

关于如何快速开发一套属于自己的运维监控系统. 记得刚入行的时候,对于监控方面,用的是nagios和cacti,现在大多数中小公司好多都开始搞zabbix了,熟悉zabbix的人,知道他的性能的瓶颈其实主要还是在数据库上,尤其是zabbx_server 针对数据库一些不高效逻辑的查询和写入引起的. 同事针对zabbix开发也搞了半年了,和他交流了下,有很多的想法. zabbix 有些查询完全可以从缓存里面取值,比如redis.memcached,不用非要从数据库里面来搞个消耗性能的大查询,有些监控

小米开源监控系统Open-Falcon安装使用笔记

前言 近期爆出Zabbix有严重bug,加上一直对zabbix的性能.UI不满.所以这次想钻研一下最近很火的open-falcon,源于小米公司的开源项目,赞一个. 一.官网介绍 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择.当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案.之后,随着业务规模的持续快速