美文网首页
实时错误报告工具-Sentry

实时错误报告工具-Sentry

作者: 不_一 | 来源:发表于2019-06-27 20:50 被阅读0次

    Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、Java、Go、Node.js、Django、RoR 等主流编程语言和框架。

    基本概念

    Sentry 是什么

    通常我们所说的 Sentry 是指 Sentry 的后端服务,由 Django 编写。8.0 版本使用了 React.js 构建前端 UI。使用 Sentry 前还需要在自己的应用中配置 Sentry 的 SDK —— 通常在各语言的包管理工具中叫做 Raven。

    当然,Sentry 还可以是其公司所提供的 Sentry SaaS 服务。

    DSN(Data Source Name)

    Sentry 服务支持多用户、多团队、多应用管理,每个应用都对应一个 PROJECT_ID,以及用于身份认证的 PUBLIC_KEY 和 SECRET_KEY。由此组成一个这样的 DSN:

    '{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}'
    

    PROTOCOL 通常会是 http 或者 https,HOST 为 Sentry 服务的主机名和端口,PATH 通常为空。

    部署 Sentry 服务

    安装

    由于 Sentry 依赖众多,建议在独立的虚拟环境中安装。Sentry 依赖 Unix 兼容系统、Python 2.7、 PostgreSQL 以及 Redis,确保你已经安装好了这些依赖。考虑到 Python WSGI 应用的部署, 你可能还需要 Nginx 或者 Apache 2 作为前端服务器,以及 supervisor 管理应用。

    有了这些以后,Sentry 的安装就非常简单:pip install sentry

    配置

    启动

    supervisor 启动。

    [program:sentry]
    directory=/path/to/sentry/conf/
    command=/path/to/sentry/bin/sentry start
    autostart=true
    autorestart=true
    redirect_stderr=true
    stdout_logfile=sentry.log
    stderr_logfile=sentry.err.log
    
    [program:sentry-worker]
    directory=/path/to/sentry/conf/
    command=/path/to/sentry/bin/sentry celery worker -B
    autostart=true
    autorestart=true
    redirect_stderr=true
    stdout_logfile=sentry.log
    stderr_logfile=sentry.err.log
    

    使用 Sentry SDK

    Sentry 的 SDK 通常在各语言的包管理器中成为 Raven,使用起来也非常简单。以 Python 为例:

    from raven import Client
    client = Client('https://<key>:<secret>@app.getsentry.com/<project>')
    
    try:
        1 / 0
    except ZeroDivisionError:
        client.captureException()
    
    

    这样就可以使用 client 对象向 Sentry 服务器中提交日志信息了。

    当然 Sentry 还为知名 web 框架提供了便捷的封装,以 Python Flask 框架为例:

    sentry = Sentry(dsn='http://public_key:secret_key@example.com/1')
    
    def create_app():
        app = Flask(__name__)
        sentry.init_app(app, logging=True, level=logging.ERROR)
        return app
    

    添加上下文信息

    为了解决问题,通常还会需要上下文信息重现当时的问题,以及快速了解影响的范围。

    client.user_context({
    'email': request.user.email
    })

    Scrapy 使用

    在使用 Scrapy 爬虫的时候也可以使用 Sentry 进行错误收集,虽然官方并没有提供 Sentry 插件,不过是使用起来也很简单,因为 Scrapy 也是使用 Python 内置的 logging 进行错误输出:

    from raven.handlers.logging import SentryHandler
    from raven.conf import setup_logging
    
    handler = SentryHandler(DSN)
    handler.setLevel(logging.ERROR)
    setup_logging(handler)
    

    或者使用 logging.config.dictConfig 方法:

    import logging
    
    from scrapy.utils.log import configure_logging
    
    configure_logging(install_root_handler=False)    # 可以没有,不过推荐加上
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
    
        'formatters': {
            'console': {
                'format': '[%(asctime)s][%(levelname)s] %(name)s '
                          '%(filename)s:%(funcName)s:%(lineno)d | %(message)s',
                'datefmt': '%H:%M:%S',
            },
        },
    
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'console'
            },
            'sentry': {
                'level': 'ERROR',
                'class': 'raven.handlers.logging.SentryHandler',
                'dsn': DSN,
            },
        },
    
        'loggers': {
            '': {
                'handlers': ['console', 'sentry'],
                'level': 'DEBUG',
                'propagate': False,
            },
            'anime_spiders': {
                'level': 'DEBUG',
                'propagate': False,
            },
        }
    }
    logging.config.dictConfig(LOGGING)
    

    相关文章

      网友评论

          本文标题:实时错误报告工具-Sentry

          本文链接:https://www.haomeiwen.com/subject/nledcctx.html