美文网首页
odoo与Sentry的结合。

odoo与Sentry的结合。

作者: F4A3 | 来源:发表于2018-02-06 11:07 被阅读0次
    • Sentry:is a realtime event logging and aggregation platform. At its core it specializes in monitoring errors and extracting all the information needed to do a proper post-mortem without any of the hassle of the standard user feedback loop.
      Sentry在自动化运维中十分常用。它是一个实时事件日志记录和汇集的平台。它能够对程序运行中产生的错误信息进行抓取。通过email来告知用户。
    • 在Odoo的实施生产中。往往会有一系列的错误发生。每当这个时候。技术人员通常都需要查阅日志文件。小型公司很少有专门的运维人员对每天的日志记录进行分析统计。面对没有进行过分类的原始日志文件,在数以万计记录中查询具体错误原因,既费时又费力。此时,多么想有一个能够在运行出错时自动通知的功能。
      在github上有一个把Sentry引入Odoo的小模块
      Sentry模块链接
      现在,让我们来试试Sentry这个自动化的错误抓取框架与odoo的结合吧。

    准备工作-Sentry的使用

    我们首先来讲讲直接使用Sentry官方提供的DSN来自动化抓取错误。

    • 首先,需要在Sentry官网注册一个使用账户.

      注册账号
    • 登录之后,选择右上角的创建新项目


      image.png
    • 选择python(可以看到Sentry支持市面上大多数的编程语言及框架)


      image.png
    • 等待创建后,Sentry会提供一个案例使用方法。


      image.png
    • Project 主界面,正在等待捕捉错误事件


      image.png
    • 在ipython中敲入页面提供的测试代码。


      image.png
    • 回到Project主界面,看到刚才的异常已经被捕捉到了。


      image.png
    • 点击查看详细信息


      image.png
    • 更棒的是,直接会有推送邮件发送到我们的注册邮箱中。直接点击即可查看。


      image.png

    与Odoo结合(我们使用odoo11作为演示)

    刚才我们展示了Sentry的简单使用,下面来看看如何整合Sentry与Odoo以达到监控Odoo日志的操作。

    • 首先,把server-tools从git拉取到本地.因为它是一个odoo模块,我直接把它放在odoo目录的addons下.
    • 编写配置文件,sentry模块需要对于的sentry参数才能正常工作,这些配置文件全部写在odoo的默认配置文件odoorc中。下面是官方的示例
    [options]
    # 这里是刚才sentry中的dsn.添加你自己的即可
    sentry_dsn = https://<public_key>:<secret_key>@sentry.example.com/<project id>
    # Sentry记录是否确认开启
    sentry_enabled = true
    # 日志等级设置为warn,即捕捉warning等级以上的日志记录
    sentry_logging_level = warn
    # 排除在Sentry记录外的单独的日志名称
    sentry_exclude_loggers = werkzeug
    # 忽略Odoo常见的权限等异常
    sentry_ignore_exceptions = odoo.exceptions.AccessDenied,odoo.exceptions.AccessError,odoo.exceptions.MissingError,odoo.exceptions.RedirectWarning,odoo.exceptions.UserError,odoo.exceptions.ValidationError,odoo.exceptions.Warning,odoo.exceptions.except_orm
    # 在发送事件到Sentry前的独立处理类
    sentry_processors = raven.processors.SanitizePasswordsProcessor,odoo.addons.sentry.logutils.SanitizeOdooCookiesProcessor
    # 使用异步传输信息到Sentry上。
    sentry_transport = threaded
    # 如果设置为true,会吧当前HTTP 请求中的上下文信息一起传递到Sentry中
    sentry_include_context = true
    sentry_environment = production
    sentry_auto_log_stacks = false
    # 标注odoo的路径,主要是用来作为运行环境信息传递到Sentry中。
    sentry_odoo_dir = /home/odoo/odoo/
    
    • 查看DSN方法:


      image.png
    • 把server-tools路径加入odoo启动路径中,启动odoo进行sentry模块的安装。

    • 安装完毕,需要把sentry模块作为server-side模块,在odoo启动时预加载。(使用server_wide_modules参数指定).
      这里提供我的配置文件作为参考.

    [options]
    addons_path = enterprise,addons,addons/server-tools
    server_wide_modules = web,sentry
    db_name = False
    admin_passwd = xxx
    db_password = False
    db_port = False
    db_template = template1
    db_user = False
    email_from = False
    limit_memory_hard = 2684354560
    limit_memory_soft = 2147483648
    limit_request = 8192
    limit_time_cpu = 60
    limit_time_real = 120
    limit_time_real_cron = -1
    osv_memory_age_limit = 1.0
    osv_memory_count_limit = False
    proxy_mode = False
    reportgz = False
    smtp_password = False
    smtp_port = 25
    smtp_server = localhost
    smtp_ssl = False
    smtp_user = False
    syslog = False
    test_commit = False
    test_enable = False
    test_file = False
    test_report_directory = False
    translate_modules = ['all']
    unaccent = False
    without_demo = False
    workers = 0
    xmlrpc = True
    xmlrpc_port = 8069
    
    sentry_dsn = 你的DSN字符串
    sentry_enabled = true
    sentry_logging_level = warn
    sentry_exclude_loggers = werkzeug
    sentry_ignore_exceptions = odoo.exceptions.AccessDenied,odoo.exceptions.AccessError,odoo.exceptions.MissingError,odoo.exceptions.RedirectWarning,odoo.exceptions.UserError,odoo.exceptions.ValidationError,odoo.exceptions.Warning,odoo.exceptions.except_orm
    sentry_processors = raven.processors.SanitizePasswordsProcessor,odoo.addons.sentry.logutils.SanitizeOdooCookiesProcessor
    sentry_transport = threaded
    sentry_include_context = true
    sentry_environment = production
    sentry_auto_log_stacks = false
    

    实际展示

    • 配置完上面的参数。我们直接使用配置文件启动odoo。因为我使用了odoo11企业版,没有安装phonenumbers这个python包,会有一个warning日志记录,正好用来当做实验。
      image.png
    • 查看我们的Sentry。可以看到这个Warning日志已经被捕捉了。
    image.png
    • 详细的错误信息


      image.png
    • 邮件也有了推送


      image.png

    总结

    Sentry的使用让我们的Odoo自动运维有了全新的体验。等待异常事件推送比翻阅日志提高了维护效率.

    • 但是这个版本的sentry模块有个小bug.只要有一个Odoo安装sentry模块,所有的Odoo数据库日志文件会被Sentry进行跟踪.这对部署多个Odoo服务的服务器来说会导致混乱.
      同时只能使用一个固定的DSN也意味着把异常数据限制在了一个Sentry项目中,无法进行有效的分类管理.
    • 另外,由于国内的原因,使用官方Sentry提供的在线服务网速体验十分难受.较好的解决方法是使用Docker自己搭建Sentry本地服务.让我们在下一次的文章中再进行讲解吧.

    相关文章

      网友评论

          本文标题:odoo与Sentry的结合。

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