- 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在自動化運維中十分常用。它是一個實時事件日志記錄和匯集的平臺扛芽。它能夠?qū)Τ绦蜻\行中產(chǎn)生的錯誤信息進(jìn)行抓取尉辑。通過email來告知用戶。 - 在Odoo的實施生產(chǎn)中鸭蛙。往往會有一系列的錯誤發(fā)生摹恨。每當(dāng)這個時候。技術(shù)人員通常都需要查閱日志文件娶视。小型公司很少有專門的運維人員對每天的日志記錄進(jìn)行分析統(tǒng)計晒哄。面對沒有進(jìn)行過分類的原始日志文件,在數(shù)以萬計記錄中查詢具體錯誤原因肪获,既費時又費力寝凌。此時,多么想有一個能夠在運行出錯時自動通知的功能孝赫。
在github上有一個把Sentry引入Odoo的小模塊
Sentry模塊鏈接
現(xiàn)在较木,讓我們來試試Sentry這個自動化的錯誤抓取框架與odoo的結(jié)合吧。
準(zhǔn)備工作-Sentry的使用
我們首先來講講直接使用Sentry官方提供的DSN來自動化抓取錯誤青柄。
-
首先伐债,需要在Sentry官網(wǎng)注冊一個使用賬戶.
注冊賬號 -
登錄之后,選擇右上角的創(chuàng)建新項目
image.png -
選擇python(可以看到Sentry支持市面上大多數(shù)的編程語言及框架)
image.png -
等待創(chuàng)建后,Sentry會提供一個案例使用方法致开。
image.png -
Project 主界面峰锁,正在等待捕捉錯誤事件
image.png -
在ipython中敲入頁面提供的測試代碼。
image.png -
回到Project主界面双戳,看到剛才的異常已經(jīng)被捕捉到了虹蒋。
image.png -
點擊查看詳細(xì)信息
image.png -
更棒的是,直接會有推送郵件發(fā)送到我們的注冊郵箱中飒货。直接點擊即可查看魄衅。
image.png
與Odoo結(jié)合(我們使用odoo11作為演示)
剛才我們展示了Sentry的簡單使用,下面來看看如何整合Sentry與Odoo以達(dá)到監(jiān)控Odoo日志的操作塘辅。
- 首先晃虫,把server-tools從git拉取到本地.因為它是一個odoo模塊,我直接把它放在odoo目錄的addons下.
- 編寫配置文件莫辨,sentry模塊需要對于的sentry參數(shù)才能正常工作傲茄,這些配置文件全部寫在odoo的默認(rèn)配置文件odoorc中。下面是官方的示例
[options]
# 這里是剛才sentry中的dsn.添加你自己的即可
sentry_dsn = https://<public_key>:<secret_key>@sentry.example.com/<project id>
# Sentry記錄是否確認(rèn)開啟
sentry_enabled = true
# 日志等級設(shè)置為warn,即捕捉warning等級以上的日志記錄
sentry_logging_level = warn
# 排除在Sentry記錄外的單獨的日志名稱
sentry_exclude_loggers = werkzeug
# 忽略O(shè)doo常見的權(quán)限等異常
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
# 在發(fā)送事件到Sentry前的獨立處理類
sentry_processors = raven.processors.SanitizePasswordsProcessor,odoo.addons.sentry.logutils.SanitizeOdooCookiesProcessor
# 使用異步傳輸信息到Sentry上沮榜。
sentry_transport = threaded
# 如果設(shè)置為true盘榨,會吧當(dāng)前HTTP 請求中的上下文信息一起傳遞到Sentry中
sentry_include_context = true
sentry_environment = production
sentry_auto_log_stacks = false
# 標(biāo)注odoo的路徑,主要是用來作為運行環(huán)境信息傳遞到Sentry中蟆融。
sentry_odoo_dir = /home/odoo/odoo/
-
查看DSN方法:
image.png 把server-tools路徑加入odoo啟動路徑中草巡,啟動odoo進(jìn)行sentry模塊的安裝。
安裝完畢型酥,需要把sentry模塊作為server-side模塊山憨,在odoo啟動時預(yù)加載查乒。(使用server_wide_modules參數(shù)指定).
這里提供我的配置文件作為參考.
[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
實際展示
- 配置完上面的參數(shù)。我們直接使用配置文件啟動odoo郁竟。因為我使用了odoo11企業(yè)版玛迄,沒有安裝
phonenumbers
這個python包,會有一個warning日志記錄棚亩,正好用來當(dāng)做實驗蓖议。
image.png - 查看我們的Sentry〖ン。可以看到這個Warning日志已經(jīng)被捕捉了勒虾。
image.png
-
詳細(xì)的錯誤信息
image.png -
郵件也有了推送
image.png
總結(jié)
Sentry的使用讓我們的Odoo自動運維有了全新的體驗。等待異常事件推送比翻閱日志提高了維護(hù)效率.
- 但是這個版本的sentry模塊有個小bug.只要有一個Odoo安裝sentry模塊,所有的Odoo數(shù)據(jù)庫日志文件會被Sentry進(jìn)行跟蹤.這對部署多個Odoo服務(wù)的服務(wù)器來說會導(dǎo)致混亂.
同時只能使用一個固定的DSN也意味著把異常數(shù)據(jù)限制在了一個Sentry項目中,無法進(jìn)行有效的分類管理. - 另外,由于國內(nèi)的原因,使用官方Sentry提供的在線服務(wù)網(wǎng)速體驗十分難受.較好的解決方法是使用Docker自己搭建Sentry本地服務(wù).讓我們在下一次的文章中再進(jìn)行講解吧.