国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Sentry - 處理異常日志的正確姿勢(shì)

lifefriend_007 / 3517人閱讀

摘要:對(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)一日志不是一件容易的事。

為什么使用Sentry

Sentry是一個(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_KEYSECRET_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

相關(guān)文章

  • laravel sentry

    摘要:注冊(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...

    tinysun1234 評(píng)論0 收藏0
  • 高效利用Sentry追蹤日志發(fā)現(xiàn)問題

    摘要:對(duì)我們來說最大的便利就是利用日志進(jìn)行錯(cuò)誤發(fā)現(xiàn)和排查的效率變高了。 面臨的問題 程序運(yùn)行的日志是一個(gè)必不可少的東西,可能是一些系統(tǒng)信息,比如?gc 的情況;可能是一些正常的模塊處理信息,比如最近更新的配置;還可能是一些在程序運(yùn)行中,我們不希望出現(xiàn)的錯(cuò)誤所帶來的信息。通過日志,可以知道我們的程序是不是在正常地運(yùn)行,看到錯(cuò)誤日志,我們還需要利用日志排查錯(cuò)誤。 我們知道日志如此重要,并樂于記錄...

    icyfire 評(píng)論0 收藏0
  • Laravel核心解讀--異常處理

    摘要:請(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í)也能提高程序的健壯性。 這篇文章我們來簡單梳理一下...

    includecmath 評(píng)論0 收藏0
  • Java日志正確使用姿勢(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ā)...

    UCloud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<