摘要:對(duì)我們來說最大的便利就是利用日志進(jìn)行錯(cuò)誤發(fā)現(xiàn)和排查的效率變高了。官方也提倡正確設(shè)置接收的日志的同時(shí),用戶也能繼續(xù)舊的日志備份。
在各種系統(tǒng)和應(yīng)用里,無論你的代碼再完美也還是會(huì)拋異常,出錯(cuò)誤。今天的主角是當(dāng)今比較流行的異常記錄框架 - Sentry,來了解一下。
關(guān)于日志管理應(yīng)用越做越復(fù)雜,輸出日志五花八門,有print的,有寫stdout的,有寫stderr的, 有寫logging的,也有自定義xxx.log的。那么這將導(dǎo)致平臺(tái)應(yīng)用日志分布在各個(gè)地方,無法統(tǒng)一管理。而且可能用的還不止一種開發(fā)語言,想規(guī)范和統(tǒng)一日志不是一件容易的事。
為什么使用SentrySentry是一個(gè)集中式日志管理系統(tǒng)。它具備以下優(yōu)點(diǎn):
多項(xiàng)目,多用戶
界面友好
可以配置異常出發(fā)規(guī)則,例如發(fā)送郵件
支持主流語言接口
從Sentry的文檔首頁截下來的一張圖,可以看到它支持目前主流的編程語言。
安裝和快速上手Sentry支持部署到本地服務(wù)器,具體可以參考以下文檔:
https://docs.sentry.io/server...
但作為大多數(shù)個(gè)人開發(fā)者和中小企業(yè),我更建議使用Sentry官網(wǎng)(https://sentry.io/)提供的云服務(wù),你只需要注冊(cè)一個(gè)Sentry賬號(hào),就可以快速享受到集中處理異常日志的服務(wù)。
Sentry免費(fèi)版可以:
每月10k 錯(cuò)誤日志上限
支持所有平臺(tái)和語言,功能無縮水
無限項(xiàng)目數(shù)量,僅單用戶訪問,不提供團(tuán)隊(duì)功能
具體的價(jià)格表可以看這里:
https://sentry.io/pricing/
開始配置DSN你可以認(rèn)為 DSN(Data Source Name)是Sentry 管理項(xiàng)目需要的PROJECT_ID,每個(gè)應(yīng)用都需要對(duì)應(yīng)一個(gè) PROJECT_ID,以及用于身份認(rèn)證的 PUBLIC_KEY 和 SECRET_KEY。由此組成一個(gè)這樣的 DSN:
{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}
PROTOCOL 通常會(huì)是 http 或者 https,HOST 為 Sentry 服務(wù)的主機(jī)名和端口,PATH 通常為空。
在你登入Sentry后臺(tái)之后,你可以新建一個(gè)項(xiàng)目,之后就可以得到類似于下面這樣一個(gè)DSN。
https://e055040d5@sentry.io/12345
有了DSN以后,你就可以在客戶端中將錯(cuò)誤日志上傳到Sentry了。
配置客戶端這里我主要以Python為例,其他編程語言的客戶端配置可以參考官網(wǎng)文檔,步驟大同小異。
https://docs.sentry.io/quicks...
首先通過pip安裝Sentry SDK。
pip install raven --upgrade
然后初始化客戶端。
from raven import Client DSN = "https://****@sentry.io/****" client = Client(DSN)
最后,在你需要記錄異常的代碼為止調(diào)用client.captureException()即可。
try: 1 / 0 except ZeroDivisionError: client.captureException()
很多時(shí)候我們的異常信息應(yīng)該包含更多的上下文信息,這樣對(duì)于我們做后續(xù)分析會(huì)有更多幫助,那么你可以在Sentry捕獲異常前加入這些上下文。
try: processing(user, data) except: client.user_context({ "user": user.email, "data": json.dumps(data) }) client.captureException()一些經(jīng)驗(yàn)之談
當(dāng)然,我們不可能在每處可能發(fā)生異常的代碼為止都調(diào)用Sentry,也不可能去修補(bǔ)過去的代碼將Sentry一一植入,一個(gè)好的建議是,無論何時(shí),你的程序都有統(tǒng)一的異常處理機(jī)制,最好是全局的。這樣的話,你只要將Sentry寫在全局的異常處理器即可。
另外Sentry還對(duì)流行的開發(fā)框架提供了特別的支持,比如Flask,Django等等,在這些應(yīng)用中你只要配置就行,不需要你去寫什么全局的異常處理(雖然寫起來也不難)。
Flask的例子:
sentry = Sentry(dsn="http://public_key:secret_key@example.com/1") def create_app(): app = Flask(__name__) sentry.init_app(app) return app
Django的例子:
import os import raven INSTALLED_APPS = ( "raven.contrib.django.raven_compat", ) RAVEN_CONFIG = { "dsn": "http://public_key:secret_key@example.com/1", # If you are using git, you can also automatically # configure the release based on the git info. "release": raven.fetch_git_sha(os.path.abspath(os.pardir)), }異常報(bào)告和提醒
一旦你完成上面的配置,以后系統(tǒng)發(fā)生的所有錯(cuò)誤異常都會(huì)被自動(dòng)記錄到Sentry,查看報(bào)告就是一件輕松愉快的事情了。
默認(rèn)情況下,一旦異常發(fā)生,5分鐘內(nèi)就會(huì)有一封郵件送到你郵箱,包含了異常信息的大致描述。
當(dāng)然你還可以將異常報(bào)警集成到更多系統(tǒng)中,比如HICHAT,SLACK,IRC,WEBHOOKS,在Sentry后臺(tái)提供了相應(yīng)的入口。
在Sentry的項(xiàng)目 Dashboard 你可以瀏覽到更詳細(xì)的報(bào)告,比如按照異常信息的類別進(jìn)行分類和過濾,也可以統(tǒng)計(jì)近期異常的狀態(tài)和頻率,非常方便。
Sentry還提供了異常信息的聚合,同樣的錯(cuò)誤有可能在多處拋出,傳統(tǒng)的日志統(tǒng)計(jì)起來就不是很方便,在Sentry一目了然。
另外你還可以針對(duì)異常問題進(jìn)行分配和跟蹤,例如指派團(tuán)隊(duì)的某個(gè)成員去處理某一類問題,對(duì)于長時(shí)間沒有再發(fā)生的問題自動(dòng)標(biāo)記為解決等等。
總結(jié)Sentry 還有有很多亮點(diǎn),比如敏感信息過濾, release 版本跟蹤,關(guān)鍵字查找,受影響用戶統(tǒng)計(jì),權(quán)限管理等。Sentry 的 plugin 模塊還可以集成大量的第三方工具如: SLACK , JIRA 。
對(duì)我們來說最大的便利就是利用日志進(jìn)行錯(cuò)誤發(fā)現(xiàn)和排查的效率變高了。但是,我們能不能完全依賴Senry呢?有幾點(diǎn)值得探討:
不是日志的替代品Sentry 的目的是為了讓我們專注于系統(tǒng)與程序的異常信息,目的是提高排查問題的效率,日志事件的量到達(dá)一個(gè)限制時(shí)甚至丟棄一些內(nèi)容。官方也提倡正確設(shè)置 Sentry 接收的日志 level 的同時(shí),用戶也能繼續(xù)舊的日志備份。
不是排查錯(cuò)誤的萬能工具Sentry 是帶有一定策略的問題分析工具,以樣本的形式展示部分原始日志的信息。信息不全面的同時(shí),使用過程中也可能出現(xiàn) Sentry 聚合所帶來的負(fù)面影響,特別是日志記錄質(zhì)量不夠的情況下。
不是傳統(tǒng)監(jiān)控的替代品與傳統(tǒng)的監(jiān)控系統(tǒng)相比,Sentry 更依賴于發(fā)出的日志報(bào)告,而另外一些隱藏的邏輯問題或者業(yè)務(wù)問題很可能是不會(huì)得到反饋的。
參考文檔https://docs.sentry.io/quicks...
https://blog.csdn.net/bigsec/...
關(guān)于作者:Toby Qin, Python 技術(shù)愛好者,目前從事測(cè)試開發(fā)相關(guān)工作,轉(zhuǎn)載請(qǐng)注明原文出處。
歡迎關(guān)注我的博客 https://betacat.online,你可以到我的公眾號(hào)中去當(dāng)吃瓜群眾。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/41739.html
摘要:注冊(cè)登錄登錄創(chuàng)建選擇安裝擴(kuò)展使用方法來自配置獲取測(cè)試少寫個(gè)分號(hào)查看效果發(fā)送到對(duì)象當(dāng)方法調(diào)用時(shí)執(zhí)行資源你也可以本地搭建之部署到生產(chǎn)環(huán)境搭建自己的服務(wù)基于安裝自 注冊(cè)登錄 GitHub登錄showImg(https://segmentfault.com/img/bVbgcrL?w=1109&h=554); 創(chuàng)建project 選擇 laravelshowImg(https://segme...
摘要:對(duì)我們來說最大的便利就是利用日志進(jìn)行錯(cuò)誤發(fā)現(xiàn)和排查的效率變高了。 面臨的問題 程序運(yùn)行的日志是一個(gè)必不可少的東西,可能是一些系統(tǒng)信息,比如?gc 的情況;可能是一些正常的模塊處理信息,比如最近更新的配置;還可能是一些在程序運(yùn)行中,我們不希望出現(xiàn)的錯(cuò)誤所帶來的信息。通過日志,可以知道我們的程序是不是在正常地運(yùn)行,看到錯(cuò)誤日志,我們還需要利用日志排查錯(cuò)誤。 我們知道日志如此重要,并樂于記錄...
摘要:請(qǐng)求未通過的驗(yàn)證時(shí)會(huì)拋出此異常。異常處理是非常重要但又容易讓開發(fā)者忽略的功能,這篇文章簡單解釋了內(nèi)部異常處理的機(jī)制以及擴(kuò)展異常處理的方式方法。 異常處理是編程中十分重要但也最容易被人忽視的語言特性,它為開發(fā)者提供了處理程序運(yùn)行時(shí)錯(cuò)誤的機(jī)制,對(duì)于程序設(shè)計(jì)來說正確的異常處理能夠防止泄露程序自身細(xì)節(jié)給用戶,給開發(fā)者提供完整的錯(cuò)誤回溯堆棧,同時(shí)也能提高程序的健壯性。 這篇文章我們來簡單梳理一下...
摘要:但是往往越簡單的東西越容易讓我們忽視,從而導(dǎo)致一些不該有的發(fā)生,作為一名嚴(yán)謹(jǐn)?shù)某绦騿T,怎么能讓這種事情發(fā)生呢所以下面我們就來了解一下關(guān)于日志的那些正確使用姿勢(shì)。級(jí)別表示出現(xiàn)了嚴(yán)重錯(cuò)誤,程序?qū)?huì)中斷執(zhí)行。 前言 關(guān)于日志,在大家的印象中都是比較簡單的,只須引入了相關(guān)依賴包,剩下的事情就是在項(xiàng)目中盡情的打印我們需要的信息了。但是往往越簡單的東西越容易讓我們忽視,從而導(dǎo)致一些不該有的bug發(fā)...
閱讀 3947·2021-10-19 13:23
閱讀 2326·2021-09-09 11:37
閱讀 2507·2019-08-29 15:20
閱讀 3407·2019-08-29 11:08
閱讀 1661·2019-08-26 18:27
閱讀 1764·2019-08-23 12:20
閱讀 3028·2019-08-23 11:54
閱讀 2544·2019-08-22 15:19