• Python学习day16 监控系统


    Created on 2017年7月14日

    第1课 本节内容介绍 5Minutes
    毕业项目功能介绍
    架构讲解
    CMDB开发

    上节作业:
    将客户端发来的数据存放到后台并记录到日志中

     

    第2课 CMDB拾遗之Agent开发 35Minutes
    将Try的功能单独放在一个类中,并对类中的数据进行封装,以后直接调用类,用于判断

    #可以定义一个类,用来封装一些值,用于后续方法的判断,这样可以不用写太多的Try。
    class BaseResponse():
    def __init__(self):
    self.status = False
    self.data = None
    self.error = ''

    #这里引用上面的类,Try,出错则将相应的值放到类中,便于下面的调用
    def check_hostname():
    response = BaseResponse()
    try:
    hostname = os.environ['computername']
    response.status = True
    response.data = hostname
    except Exception,e:
    response.error = e.message

    return response

    #直接调用类中的值,来做进一步流程控制
    def show():
    result = check_hostname()
    if result.status:
    print result.data
    print 'ok'
    else:
    print result.error

    show()

     

    第3课 CMDB拾遗之API开发 63Minutes

    服务器信息:
    {'hostname':'',
    'sn':'',
    'model':''
    'cpu':'',
    'nic':{
    status:0,--这里可能用于判断,如果为0则不更新
    data:{
    eth1:{ip:xx,mac:xxx}
    }
    }
    }

    }

    第4课 Django扩展之自定义HttpRequest 34Minutes

    可以通过断点的方式向上追查哪个程序调用
    这里可以通过查看Request来检查POST和GET的来源配置
    这样就可以继承POST的源类,自己可以定义一个新类,用于写PUT的信息
    就可以做到自定义一个新的HttpRequest的方式

    可以通过request.POST找到下面的方法,更改就行:
    def _load_post_and_files(self):
    """Populate self._post and self._files if the content-type is a form type"""
    if self.method != 'POST':
    self._post, self._files = QueryDict(encoding=self._encoding), MultiValueDict()
    return
    if self._read_started and not hasattr(self, '_body'):
    self._mark_post_parse_error()
    return
    elif self.content_type == 'application/x-www-form-urlencoded':
    self._post, self._files = QueryDict(self.body, encoding=self._encoding), MultiValueDict()
    else:
    self._post, self._files = QueryDict(encoding=self._encoding), MultiValueDict()


    第5课 监控系统架构分析 42Minutes

    可分布式的C/S架构监控
    可自定义监控模板/监控插件
    WEB罗布展示/监控画图
    监控画图的历史数据如何最小化存储又不失真

    Client Agent:
    1.从服务器获取模板,通过Hostname
    2.得到插件,监控数据
    3.生成报警信息
    4.发送数据到API
    API:
    1.处理并保存信息
    2.报警策略
    后台管理:
    1.生成各种图表
    2.基本信息管理
    3.调用其他API


    第6课 监控系统之Agent开发 16Minutes

    #监控基中一个Agent的写法:
    import commands
    def load_monitor():
    shell_command = 'uptime'
    status,result = commands.getstatusoutput(shell_command)
    if status != 0:
    value_dic = {'status':status}
    else:
    value_dic = {}
    uptime = result.split(',')[:1][0]
    load1,load5,load15 = result.split('load average:')[1].split[',']
    value_dic = {
    'uptime':uptime,
    'load1':load1,
    'load5':load5,
    'load15':load15,
    'status':status
    }
    return value_dic



    #-----------------------index.py----------------
    template = {}

    while True:
    for key,value in config.items():
    currenttime,interel,lasttime = time.time(),value['interval'],value['last_time']
    if currenttime-lasttime < interval:
    pass
    else:
    plugin_name = value['plugin_name']
    func = getattr(plugin_api,plugin_name)
    data = func()
    print data
    congig[key]['last_time'] = currenttime
    time.sleep(10)


    第7课 监控系统之数据库表结构设计一 13Minutes
    第8课 监控系统之数据库表结构设计二 21Minutes
    第9课 监控系统之数据库表结构设计三 17Minutes
    一堆的表,表套表
    主要4张表:
    监控项: Items
    监控服务:service
    服务模板:service_template
    阀值:condition

    第10课 监控系统之API开发 26Minutes

    #--------get_config--------------------------------------------

    def get_config(request):
    ret = {'status':0,'data':'','message':''}
    try:
    data = {}
    hostname = request.GET.get('hostname',None)
    if not hostname:
    return HttpResponse(json.dumps(ret))
    hostObj = models.Host.objects.get(hostname=hostname)
    hostname = hostObj.hostname
    host_group = hostObj.group
    service_templates = host_group.servie_template.all()
    for item in service_templates:
    temp = {}
    temp['last_time'] = 0
    temp['interval'] = item.check_interval
    temp['plugin_name'] = item.service.plugin
    temp['element'] = {}

    for cond in item.conditions.all():
    item_key = cond.item.key
    if temp['element'].has_key(item.key):
    temp['element'][item_key].append(object)
    else:
    temp['element'][item_key]= [{}]
    data[item.key] = temp
    ret['data'] = data
    ret['statis'] = 1


    第11课 监控系统之完善Agent功能 10Minutes

    while True:
    for key,value in config.items():
    currenttime,interel,lasttime = time.time(),value['interval'],value['last_time']
    if currenttime-lasttime < interval:
    pass
    else:
    plugin_name = value['plugin_name']
    func = getattr(plugin_api,plugin_name)
    data = func()
    #根据获取的值和阀值做比对
    #将值和信息一起发给API
    print data
    congig[key]['last_time'] = currenttime
    time.sleep(10)

    --------------------------------------------------------
    def submit_data(self,host,port,source,params,timeout):
    headers = {"Content-type": "application/x-www-form-urlencoded",
    "Accept": "text/plain"}
    try:
    conn = httplib.HTTPConnection(host,port,timeout)
    conn.request('POST',source,params,headers)
    response = conn.getresponse()
    original = response.read()
    except Exception,e:
    raise e
    return original
    '''
    等同于上面的代码
    url_str = 'http://%s%s'%(host,url_path)
    data = urllib.urlencode(service_data)
    req = urllib2.urlopen(url_str,data)
    result = req.read()


    第12课 监控系统之EasyUI和Highstock的使用 21Minutes

    EasyUI更好用,比Bootstarp更少些
    Highcharts

    第13课 监控系统之结束语 2Minutes

     

     

     

     

     

     

     

  • 相关阅读:
    如何用正确的方法写出高质量软件的75条体会(转)
    使用javascript动态添加onclick事件,
    签名和重载
    C#文件后缀名详解
    配置SQL Server 2005 Express的身份验证方式,以及如何启用sa登录名。
    CSS选择符及优先级计算
    关于软件版本的解释
    数据结构形象解释
    CSS属性选择符
    [转载]Repeater三层嵌套
  • 原文地址:https://www.cnblogs.com/syother/p/7197952.html
Copyright © 2020-2023  润新知