odoo与Sentry的结合。

  • 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本地服务.让我们在下一次的文章中再进行讲解吧.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,748评论 6 342
  • Manifest manifest文件用于将python包定义成odoo的模块,并且声明模块的元数据,文件名为__...
    XiaoHaiYang阅读 4,055评论 0 5
  • # 一、框架概述 # 课程概述 1. laravel 4天(之前TP框架还是很大的区别)(国外框架) 2. 在线教...
    关进一阅读 362评论 0 0
  • 墙上贴的白纸,中心画个黑点。 坐在一米三外,盯着这颗黑点,不眨眼。 眼前的世界开始变得有些雾蒙蒙的,在散光的眼睛里...
    空笼阅读 166评论 0 0
  • - textField随输入文字判断个数(判断文字是否为空) - 如何更好地限制一个UITextField的输入长...
    旺仔Milk阅读 136评论 0 0