精华内容
下载资源
问答
  • 如何实现系统监控,自动发送错误日志的邮件呢? 只需配置配置settings文件即可。 1.设置发送邮件配置信息 邮件会发送到ADMINS设定的邮件列表中。 SERVER_EMAIL ='sender@qq.com' DEFAULT_FROM_EMAIL ='...

    一、监控所有的request请求

    如何实现系统监控,自动发送错误日志的邮件呢?

    只需配置配置settings文件即可。

    1.设置发送邮件配置信息

    邮件会发送到ADMINS设定的邮件列表中。

    SERVER_EMAIL ='sender@qq.com'
    
    DEFAULT_FROM_EMAIL ='sender@qq.com'
    
    ADMINS = (('receiver','receiver@qq.com'),)
    
    EMAIL_HOST ='smtp.exmail.qq.com'
    
    EMAIL_HOST_USER ='sender@qq.com'
    
    EMAIL_HOST_PASSWORD ='123456'
    
    EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'

    2.配置LOGGING

    1)配置mail_admin的handler

    level为日志级别

    django.utils.log.AdminEmailHandler为django处理系统日志发送邮件的handler

    在没有配置filter参数情况下,默认发送系统5XX状态的错误日志

    'handlers': {
    
        'mail_admin': {
    
        'level':'ERROR',
    
        'class':'django.utils.log.AdminEmailHandler',
    
        'include_html':False,
    
        }
    
    }

    2)配置django.request模块的logger
    将django的request模块配置如上的mail_admin handler

    'loggers': {
    
        'django.request': {
    
        'handlers': ['default','mail_admin'],
    
        'propagate':True,
    
        'level':'ERROR',
    
        },
    
    }

      在这里还是要推荐下我自己建的Python开发学习群:725479218,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴

    二、监控非request请求

    如何监控例如系统的定时任务等非用户发起的功能模块,我们可以自定义一个decorator来解决这个问题。

    utils.send_exception_email(email_list,title,exc)为发送邮件的方法,可以自己实现,非常简单

    def decorator_error_monitor(title):
    
        def wrap(f):
    
            def wrapped_f(*args,**kwargs):
    
                try:
    
                    result = f(*args,**kwargs)
    
                    return result
    
               except:
    
                   exc = traceback.format_exc()
    
                   utils.send_exception_email(email_list,title,exc)
    
                   raise Exception(exc)
    
                return wrapped_f
    
            return wrap

    对需要监控的方法使用decorator

    @decorator_error_monitor("清算错误")
    
    def do_settlement(users):
    
        for user in users:
    
            process_settlement_for_one_user(user)

    效果如下

    以上监控方法,简单实用,无需开发额外的日志监控系统,可以在第一时间发现系统的问题,并得知系统的错误日志,帮助快速的定位问题。

    展开全文
  • 来源:http://www.jianshu.com/p/42e4287ffeda话不多说,直入正题。先上图,看一下监控的效果。如下是监控我们网站系统错误的邮件。包含了请求...

    640?wx_fmt=jpeg

    来源:http://www.jianshu.com/p/42e4287ffeda



    话不多说,直入正题。

    先上图,看一下监控的效果。

    如下是监控我们网站系统错误的邮件。包含了请求的url地址,以及详细的异常信息。

    640?wx_fmt=jpeg

    一、监控所有的request请求

    如何实现系统监控,自动发送错误日志的邮件呢?只需配置配置settings文件即可。


    1.设置发送邮件配置信息

    邮件会发送到ADMINS设定的邮件列表中。

    SERVER_EMAIL ='sender@qq.com'
    DEFAULT_FROM_EMAIL ='sender@qq.com'
    ADMINS = (('receiver','receiver@qq.com'),)
    EMAIL_HOST ='smtp.exmail.qq.com'
    EMAIL_HOST_USER ='sender@qq.com'
    EMAIL_HOST_PASSWORD ='123456'
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

    2.配置LOGGING

    1)配置mail_admin的handler

    level为日志级别

    django.utils.log.AdminEmailHandler为django处理系统日志发送邮件的handler

    在没有配置filter参数情况下,默认发送系统5XX状态的错误日志

    'handlers': {
        'mail_admin': {
        'level':'ERROR',
        'class':'django.utils.log.AdminEmailHandler',
        'include_html':False,
        }
    }

    2)配置django.request模块的logger

    将django的request模块配置如上的mail_admin handler

    'loggers': {
        'django.request': {
        'handlers': ['default','mail_admin'],
        'propagate':True,
        'level':'ERROR',
        },
    }

    二、监控非request请求

    如何监控例如系统的定时任务等非用户发起的功能模块,我们可以自定义一个decorator来解决这个问题。

    utils.send_exception_email(email_list,title,exc)为发送邮件的方法,可以自己实现,非常简单

    def decorator_error_monitor(title):
        def wrap(f):
            def wrapped_f(*args, **kwargs):
                try:
                    result = f(*args, **kwargs)
                    return result
                except:
                    exc = traceback.format_exc()
                    utils.send_exception_email(email_list, title, exc)
                    raise Exception(exc)
    
            return wrapped_f
    
        return wrap

    对需要监控的方法使用decorator

    @decorator_error_monitor("清算错误")
    def do_settlement(users):
        for user in users:
            process_settlement_for_one_user(user)

    监控效果如下图所示:

    640?wx_fmt=png

    小结

    以上监控方法,简单实用,无需开发额外的日志监控系统,可以在第一时间发现系统的问题,并得知系统的错误日志,帮助快速的定位问题。



    推荐阅读:

    1111,你的能量够买包卫生巾吗?

    展开全文
  • Django搭建简易监控系统

    千次阅读 2015-10-13 14:52:23
    下面详细讲一讲如何利用django搭建一套简易的服务器监控系统。 客户端服务端模式,客户端通过脚本抓取本地性能参数,然后提交POST请求给django服务端,把数据传给服务端。服务端接收到数据后先保存到本地数据库中,...

    背景

    Django是使用最广泛的用python写的开源WEB框架,用它可以搭建一套WEB系统,它也可以和其他开源组件,如cellery组合使用,扩展性比较强。

    下面详细讲一讲如何利用django搭建一套简易的服务器监控系统。

    客户端服务端模式,客户端通过脚本抓取本地性能参数,然后提交POST请求给django服务端,把数据传给服务端。服务端接收到数据后先保存到本地数据库中,用户在浏览器端输入对应URL来展示数据库中的数据信息。

    正文

    下载安装django,我这里以1.4版本为例。

    创建项目

    django-admin.py startproject test_site

    运行完命令后,在当前目录下会生成一个目录:test_site, 进去后你会发现有一些已经创建好的python文件。

    启动django服务

    python manage.py runserver 0.0.0.0:8080

    执行完命令后,你可以在浏览器端输入IP:8080就可以正常访问了,前提是你的浏览器端和django服务所在的电脑能联通,而且端口没有被防火墙挡住,若这一步有问题请留言讨论,这里不再赘述。

    配置django数据库

    django内置了几种数据库的接口:mysql, postgresql, sqlite3 , oracle。我这里以最简单的sqlite3为例来讲。

    在test_site/test_site目录下有个setting.py,打开,找到DATABASES这一段,把ENGINE的值设为django.db.backends.sqlite3,NAME的值写数据库的绝对路径,比如:/opt/django/db/sqlite3.db。

    创建app

    每个项目下可以有多个app,我们先创建一个monitor_metric。

    python manage.py startapp monitor_metric

    执行完后,你会在当前目录下看到monitor_metric目录。

    打开test_site/test_site/setting.py,在INSTALLED_APPS段中添加刚刚创建的app:monitor_metric。

    打开test_site/test_site/urls.py,添加一行:

    url(r'^monitor_metric/', include('monitor_metric.urls')),

    打开test_site/monitor_metric/models.py,内容如下:

    from django.db import models
    # Create your models here.
    class ServerMetric(models.Model):
        id = models.IntegerField(primary_key=True, db_column='ID') # Field name made lowercase.
        history_ip = models.CharField(max_length=45)
        history_datetime = models.DateTimeField()
        history_cpu_load = models.CharField(max_length=45)
        history_disk_usage = models.CharField(max_length=45)
        history_memory_usage = models.CharField(max_length=45)
        class Meta:
            db_table = u'server_metric'

    打开test_site/monitor_metric/views.py,内容如下:

    # Create your views here.
    # -*- coding: utf-8 -*-
    # Create your views here.
    import os,sys,time
    from django.http import HttpResponse
    from django.shortcuts import render_to_response
    #from django.template import Context
    from django.template.loader import get_template
    from monitor_metric.models import ServerMetric
    from django.conf import settings
    from django.template import RequestContext
    from public.views import *
    from django.core.paginator import Paginator, InvalidPage, EmptyPage
    from django.utils.log import logger
    from django.views.decorators.csrf import csrf_exempt
    def index(request):
        res_template_dist={'system_name': settings.SYSTEM_NAME}
        return render_to_response('monitor_metric.html',res_template_dist)
    def monitor_metric_display(request):
            MetricObj = ServerMetric.objects.order_by('-id')
            Metric_string_prefix = "Host IP" +"&nbsp;&nbsp;\t" +"Date Time" +"&nbsp;&nbsp;\t" +"CPU load average" +"&nbsp;&nbsp;\t" +"Disk usage" +"&nbsp;&nbsp;\t" +"Memory usage"+"<BR>"
            Metric_string = ""
            for e in MetricObj:
                    Metric_string +=  e.history_ip+ "&nbsp;&nbsp;\t"+ str(e.history_datetime)+"&nbsp;&nbsp;\t"+e.history_cpu_load+"&nbsp;&nbsp;\t"+e.history_disk_usage +"&nbsp;&nbsp;\t"+e.history_memory_usage+ "<BR>"
            return HttpResponse(Metric_string_prefix+Metric_string)
    @csrf_exempt
    def monitor_metric_writedb(request):
            if request.method == 'POST':
                    #return HttpResponse( "POST request have been fulfilled")
                    history_ip=request.POST['history_ip']
                    history_datetime=request.POST['history_datetime']
                    history_cpu_load=request.POST['history_cpu_load']
                    history_disk_usage=request.POST['history_disk_usage']
                    history_memory_usage=request.POST['history_memory_usage']
                    historyobj = ServerMetric(
                                            history_ip=history_ip, \
                                            history_datetime=history_datetime, \
                                            history_cpu_load=history_cpu_load, \
                                            history_disk_usage=history_disk_usage, \
                                            history_memory_usage=history_memory_usage, \
                                            )
                    try:
                            historyobj.save()
                    except Exception,e:
                            return HttpResponse("入库失败,请与管理员联系!"+str(e))
                    Response_result="OK"
                    return HttpResponse(Response_result)
            else:
                    return HttpResponse("非法提交!")

     

    这里我们定义了三个函数,index()是定义浏览器访问默认页的,monitor_metric_display()是定义在浏览器显示的数据信息的,monitor_metric_writedb()是从客户端获取POST信息并保存到数据库中。

    cat test_site/monitor_metric/urls.py,

    from django.conf.urls.defaults import *
    urlpatterns = patterns('monitor_metric.views',
        (r'^$','index'),
        (r'monitor_metric_writedb/$','monitor_metric_writedb'),
        (r'monitor_metric_display/$','monitor_metric_display'),
    )

    这个是浏览器访问的url将被指定的函数执行。

    根据models.py生成相应的数据库结构。

    python manage.py syncdb

    执行完后会生成/opt/django/db/sqlite3.db,你可以看下里面有哪些数据库,

    sqlite3 /opt/django/db/sqlite3.db
    .schema
    .tables

    服务端已经搞好了,现在去客户端,创建目录monitor_metric,新建文件config.py

    #!/usr/bin/env python
    Net_driver = "eth0"
    Server_address = "10.9.214.15"
    Connect_TimeOut = 3

    Server_address指的是django服务端的ip.

    新建文件collect_metric.py

    #!/usr/bin/env python
    #coding:utf-8
    import sys
    import os
    import socket
    import fcntl
    import struct
    import logging
    from config import *
    import urllib,httplib
    from datetime import datetime
    import psutil
    socket.setdefaulttimeout(Connect_TimeOut)
    logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s [%(levelname)s] %(message)s',
                filename=sys.path[0]+'/omsys.log',
                filemode='a')
    def get_local_ip(ethname):
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            addr = fcntl.ioctl(sock.fileno(), 0x8915, struct.pack('256s', ethname))
            return socket.inet_ntoa( addr[20:24] )
        except Exception,e:
            logging.error('get localhost IP address error:'+str(e))
            return "127.0.0.1"
    def post_metric(http_get_param=""):
        try:
            http_client =httplib.HTTPConnection(Server_address ,8080, timeout=Connect_TimeOut)
            headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
            http_client.request('POST','/monitor_metric/monitor_metric_writedb/', http_get_param, headers)
            response =http_client.getresponse()
            print response.status, response.reason
            f = open('./response_page', 'w')
            f.write(response.read())
            if response.status != 200:       
                logging.error('response http status error:'+str(response.status))
                sys.exit()
        except Exception, e:
            logging.error('connection django-cgi server error:'+str(e))
            sys.exit()
        finally:
            if http_client:
                http_client.close()
            else:
                logging.error('connection django-cgi server unknown error.')
                sys.exit()
    Sysip = get_local_ip(Net_driver)
    History_Id = "1"
    History_datetime = str(datetime.now())
    History_cpu_load = os.getloadavg()[0]
    History_disk_usage = psutil.disk_usage('/')[3]
    History_memory_usage = psutil.virtual_memory()[2]
    params = {'history_id':History_Id, 'history_ip':Sysip, 'history_datetime':History_datetime, 'history_cpu_load':History_cpu_load, 'history_disk_usage':History_disk_usage, 'history_memory_usage':History_memory_usage}
    encoded_params = urllib.urlencode(params)
    post_metric(encoded_params)

    这个脚本是抓取客户端性能参数的。

    执行

    python collect_metric.py

    若返回200 OK, 说明POST请求执行成功,同学们做到这一步的时候肯定会遇到各种问题,请不要着急,collect_metric.py中已经把POST请求的返回html页面保存到response_page中了, 你可以把response_page拷到django服务器中,通过浏览器查看里面的报错信息,这样一步一步慢慢调试。

    成功后在浏览器中输入

    http://IP:8080/monitor_metric/monitor_metric_display/ 

    就可以看到ip,cpu load average, memory usage, disk usage等信息了。

     

    补充:

    在调试过程中你会碰到csfr token的问题,这是django的跨站访问保护的机制(cross site request forgery protection),具体意思是防止恶意网站通过获取正常网站的cookie来进行破坏活动。

    碰到这个问题有两种解决方法:

    a.在服务端禁用CSRF

    from django.views.decorators.csrf import csrf_exempt
    @csrf_exempt
    def monitor_metric_writedb(request):

    b.把CSRF token作为参数,放在post data里面传送给django。

    若同学们有任何疑问,请留言,共同探讨。

    展开全文
  • 话不多说,直入正题。...如何实现系统监控,自动发送错误日志的邮件呢?只需配置配置settings文件即可。 1.设置发送邮件配置信息 邮件会发送到ADMINS设定的邮件列表中。 SERVER_EMAIL ='sender@qq.com' DEFAULT_FR...

    话不多说,直入正题。

    先上图,看一下监控的效果。

    如下是监控我们网站系统错误的邮件。包含了请求的url地址,以及详细的异常信息。
    在这里插入图片描述

    一、监控所有的request请求

    如何实现系统监控,自动发送错误日志的邮件呢?只需配置配置settings文件即可。

    1.设置发送邮件配置信息

    邮件会发送到ADMINS设定的邮件列表中。

    SERVER_EMAIL ='sender@qq.com'
    DEFAULT_FROM_EMAIL ='sender@qq.com'
    ADMINS = (('receiver','receiver@qq.com'),)
    EMAIL_HOST ='smtp.exmail.qq.com'
    EMAIL_HOST_USER ='sender@qq.com'
    EMAIL_HOST_PASSWORD ='123456'
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    

    2.配置LOGGING

    1)配置mail_admin的handler

    level为日志级别

    django.utils.log.AdminEmailHandler为django处理系统日志发送邮件的handler

    在没有配置filter参数情况下,默认发送系统5XX状态的错误日志

    'handlers': {
        'mail_admin': {
        'level':'ERROR',
        'class':'django.utils.log.AdminEmailHandler',
        'include_html':False,
        }
    }
    

    2)配置django.request模块的logger

    将django的request模块配置如上的mail_admin handler

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
    群里还有不错的视频学习教程和PDF电子书!
    '''
    'loggers': {
        'django.request': {
        'handlers': ['default','mail_admin'],
        'propagate':True,
        'level':'ERROR',
        },
    }
    

    二、监控非request请求

    如何监控例如系统的定时任务等非用户发起的功能模块,我们可以自定义一个decorator来解决这个问题。

    utils.send_exception_email(email_list,title,exc)为发送邮件的方法,可以自己实现,非常简单

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
    群里还有不错的视频学习教程和PDF电子书!
    '''
    def decorator_error_monitor(title):
        def wrap(f):
            def wrapped_f(*args, **kwargs):
                try:
                    result = f(*args, **kwargs)
                    return result
                except:
                    exc = traceback.format_exc()
                    utils.send_exception_email(email_list, title, exc)
                    raise Exception(exc)
    
            return wrapped_f
    
        return wrap
    

    对需要监控的方法使用decorator

    @decorator_error_monitor("清算错误")
    def do_settlement(users):
        for user in users:
            process_settlement_for_one_user(user)
    

    监控效果如下图所示:
    在这里插入图片描述
    小结

    以上监控方法,简单实用,无需开发额外的日志监控系统,可以在第一时间发现系统的问题,并得知系统的错误日志,帮助快速的定位问题。

    展开全文
  • 话不多说,直入正题。 先上图,看一下监控的效果。 如下是监控我们网站系统错误的邮件。包含了请求的url地址,以及详细的...如何实现系统监控,自动发送错误日志的邮件呢? 只需配置配置settings文件即可。 1....
  • django-system-monitor, 在 Django 管理面板中,简单的系统监控 django-system-monitorDjango 管理面板中的简单系统监视特性CPU使用情况内存使用磁盘使用情况( 带分区)网络使用情况使用的最高 10内存仅使用 Django ...
  • 很久没有写博客了,最近,一直忙着学习和开发监控系统,平台是Python+Django。 转载于:https://blog.51cto.com/nettudou/545775
  • 阅读本文大概需要 1 分钟。做过运维的你,一定对类 unix 系统自带的定时任务工具crontab非常熟悉,crontab 虽然好使,但报错时不会主动通知你,需要你去...
  • Python Django项目日志查询系统

    万次阅读 2020-08-07 18:06:11
    该项目适合中小型公司日志查询工作。大型公司可以使用elk等。 日志查询系统 维护手册 作者:陈土锋 ...
  • 本文主要介绍一下开发的监控系统目前大概的功能以及页面效果展示。 使用的技术: Python3.7.3 Django2.2.5 AdminLTE2.4 Mysql5.7 Echart 主要的功能是,可以对OpenStack的实例进行资源监控(CPU、内存、流量、磁盘读...
  • 基于Django框架的智能商务监控系统的设计.pdf
  • Django显示服务器性能监控

    千次阅读 2019-05-22 15:17:16
    Django显示服务器性能监控监控系统CPU、内存和进程信息一、运行环境与项目目录二、配置文档:Setting二、创建 Models,操作数据三、创建数据库四、 views.py五、创建html模版六、urls.py添加路由七、运行程序,显示...
  • 1. 创建,让系统自动生成csv文件
  • , 总结:只要能获取到数据,对系统监控都能实现,此DEMO只针对CPU,其它相似。
  • 监视系统 使用amCharts和google maps在django开发的监控系统...
  • 随着电子商务的迅速发展,商品...本系统构架采用Django来设计,主要功能采用Python 2.7 语言来开发,云端采用稳定便捷的亚马逊公司的AWS云计算平台进行服务器端的部署和搭建,经过上线测试后发现系统达到了良好的效果。
  • Django

    万次阅读 多人点赞 2019-09-02 15:36:17
    它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 1,...
  • Django 项目中使用 influxdb 时序数据库实时监控CPU,网络等信息 InfluxDB 是 Go 语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据 collectd C 语言写的一个系统性能采集工具 1. 安装配置 ...
  • python+django 开源数据库监控平台构建

    万次阅读 多人点赞 2018-04-20 10:45:50
    该平台已停止开发维护,推荐使用新的监控项目:https://github.com/gumengkai/db_monitor 采用python3.6+django2+vue,基于前后端分离实现 DEMO:http://122.51.204.250:8080/home 用户名:admin 密码:111111 开发...
  • 今天发现了一个比较有意思的监控工具,是基于Django开发的,开发大牛已经开放了源代码,向大牛致敬,同时研究研究,目前感觉这个监控比较直观,可以针对个人服务器使用,同时涉及的环境比较简单,部署起来很方便。...
  • django的基本网站的设计,介绍了一些原理和操作方法。
  • [django-celery]监控管理指南

    千次阅读 2014-01-02 17:17:08
    django-celery是一个django框架的插件,用来做消息队列处理,可以搭配rabbitmq来做异步消息处理等。 原文地址: http://docs.celeryproject.org/en/3.0/userguide/monitoring.html  celery3 和3.1的版本配置和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,092
精华内容 3,236
关键字:

django系统监控