zoukankan      html  css  js  c++  java
  • 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:djangotestmyrecrumentinterviewperformance.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  #用户认证信息采集
    )

     效果如下:

    用一个例子来演示会更加清晰
  • 相关阅读:
    前沿科技相关
    52ABP
    C#常用及注意点
    电商秒杀系统:电商微服务框架组件
    面向对象OOP
    《CLR via C#》书籍
    .NET发布时选择【独立部署模式】引发的故事
    unity 3D物体使用EventSystem响应事件
    协程
    unity 2d碰撞/ui组件碰撞
  • 原文地址:https://www.cnblogs.com/hixiaowei/p/14295583.html
Copyright © 2011-2022 走看看