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