django集成sentry实现日志上报和钉钉告警

1.实现的处理逻辑

a.在服务器用docker-compose安装sentry

b.定义类(调用请求的处理流程,在调用流程加逻辑处理,记录日志)

c.把中间件加入到django的settings,在logging部分定义日志配置

d.在settings里加sentry的配置

2.安装sentry

使用 Docker 来安装 sentry, 使用 release 版本
• https://github.com/getsentry/onpremise/releases    '''得到zip包,解压,进目录'''
• ./install.sh
• docker-compose up -d

3.定义类,调用请求的处理流程,在处理流程中加入处理逻辑,如果有异常,实现钉钉告警和日志记录输出

(D:\djangotest\myrecrument\interview\performance.py)

class PerformanceAndExceptionLoggerMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        start_time = time.time()
        response = self.get_response(request)
        duration = time.time() - start_time
        response["X-Page-Duration-ms"] = int(duration * 1000)
        logger.info("duration:%s url:%s parameters:%s", duration, request.path, request.GET.dict() )
        if duration > 0:
            capture_message('slow url: %s  time: %s'%(request.path,duration))

        # Code to be executed for each request/response after
        # the view is called.

        return response

    def process_exception(self, request, exception):
        if exception:
                
            message = "url:      {url} ** msg:     {error}     \----------     {tb}      ---------".format(
                url = request.build_absolute_uri(),
                error = repr(exception),
                tb = traceback.format_exc()
            )
            
            logger.warning(message)
            
            # send dingtalk message
            #dingtalk.send(message)

            # capture exception to sentry:
            capture_exception(exception)
                
        return HttpResponse("Error processing the request, please contact the system administrator.", status=500)

4.settings

MIDDLEWARE = [
    'interview.performance.PerformanceAndExceptionLoggerMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

sentry_sdk.init(
    dsn="http://5da41243333d4f6e9b77ee8f14e06d22@129.242.147.78:34012/2",
    integrations=[DjangoIntegration()],

    # If you wish to associate users to errors (assuming you are using
    # django.contrib.auth) you may enable sending PII data.
    traces_sample_rate=1,  # 采样率
    send_default_pii=True  #用户认证信息采集
)

 效果如下:

 

posted @ 2021-01-18 22:33  littlevigra  阅读(554)  评论(0编辑  收藏  举报