系列
- Sentry-Go SDK 中文實踐指南
- 一起來刷 Sentry For Go 官方文檔之 Enriching Events
- Snuba:Sentry 新的搜索基礎設施(基于 ClickHouse 之上)
- Sentry 10 K8S 云原生架構探索,Vue App 1 分鐘快速接入
- Sentry(v20.12.1) K8S云原生架構探索,玩轉前/后端監控與事件日志大數據分析,高性能高可用+可擴展可伸縮集群部署
- Sentry(v20.12.1) K8S 云原生架構探索,Sentry JavaScript SDK 三種安裝加載方式
Basic Options
SDK 可以使用多種選項進行配置。這些選項在 SDK 中基本上是標準化的,但在更好地適應平臺特性方面存在一些差異。選項是在 SDK 首次初始化時設置的。
選項作為對象傳遞給 init()
函數:
Sentry.init({
dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
maxBreadcrumbs: 50,
debug: true,
});
Common Options
跨 SDK 的常見選項列表。這些功能在所有 SDK 中或多或少都是一樣的,但是為了更好地支持平臺,會存在一些細微的差異??梢詮沫h境變量或你的 ~/.sentryclirc
文件中自動的讀取的選項(SENTRY_DSN
, SENTRY_ENVIRONMENT
, SENTRY_RELEASE
)。有關更多信息,請參見Working with Projects。
dsn
DSN 告訴 SDK 將事件發送到哪里。如果沒有提供這個值,SDK 將嘗試從 SENTRY_DSN
環境變量中讀取它。如果這個變量也不存在,SDK 就不會發送任何事件。
在沒有進程環境(如瀏覽器)的運行時中,fallback 不會應用。
debug
打開或關閉調試模式。如果啟用了調試,如果發送事件時出現問題,SDK 將嘗試打印出有用的調試信息。默認值總是 false
。一般不建議在生產環境中打開它,盡管打開 debug
模式不會引起任何安全問題。
release
設置 release(發行版)。某些 SDK 會嘗試自動配置 release,但是最好手動設置 release,以確保該 release 與您的 deploy integrations 或 source map uploads 同步。版本名稱是字符串,但是 Sentry 會檢測到某些格式,并且它們的呈現方式可能有所不同。在 releases 文檔中了解有關如何發送 release 數據的更多信息,以便 Sentry 可以告訴您 release 之間的回歸并確定潛在的來源。
默認情況下,SDK 會嘗試從環境變量 SENTRY_RELEASE
中讀取該值(在瀏覽器 SDK 中,將從 window.SENTRY_RELEASE
中讀取該值,如果可用)。
environment
設置環境。此字符串為自由形式,默認情況下不設置。一個 release 可以與多個環境相關聯,以便在 UI 中將它們分開(可以考慮staging
與 prod
或類似的方式)。
默認情況下,SDK 將嘗試從 SENTRY_ENVIRONMENT
環境變量中讀取該值(瀏覽器 SDK 除外)。
sampleRate
配置錯誤事件的采樣率,范圍為 0.0
到 1.0
。默認值為 1.0
,表示發送了 100% 的錯誤事件。如果設置為 0.1
,則僅發送 10% 的錯誤事件。事件是隨機選擇的。
maxBreadcrumbs
這個變量控制應該捕獲的面包屑( breadcrumbs )總數。默認值為 100
。
attachStacktrace
當啟用時,堆棧跟蹤將自動附加到所有記錄的消息。堆棧跟蹤總是附加到異常;然而,當設置此選項時,堆棧跟蹤也會與消息一起發送。例如,該選項意味著堆棧跟蹤顯示在所有日志消息的旁邊。
該選項默認為 off
。
對于有堆棧跟蹤和沒有堆棧跟蹤的事件,Sentry中的分組是不同的。結果,在為某些事件啟用或禁用此 flag 時,您將獲得新的組。
sendDefaultPii
如果啟用此 flag,則某些個人識別信息(PII)將由 active integrations 添加。默認情況下,不發送此類數據。如果可能的話,我們建議默認情況下啟用此功能以發送所有此類數據,并使用管理 敏感數據 的功能手動刪除您不想發送的內容。
denyUrls
與不應該發送到 Sentry 的錯誤 URL 相匹配的字符串或正則表達式模式列表。默認情況下,將發送所有錯誤。這是一個 “contains(包含)” 匹配整個文件 URL。因此,如果你添加 foo.com
,它也會匹配 https://bar.com/myfile/foo.com
。默認情況下,將發送所有錯誤。
allowUrls
匹配錯誤 URL 的字符串列表或正則表達式模式的遺留別名,這些錯誤 URL 應該專門發送給 Sentry。默認情況下,將發送所有錯誤。這是一個 “contains(包含)” 匹配整個文件 URL。因此,如果您將 foo.com
添加到它,它也將匹配 https://bar.com/myfile/foo.com
。默認情況下,所有錯誤將被發送。
autoSessionTracking
當設置為 true
時,SDK 將發送 session 事件給 Sentry。所有瀏覽器 SDK 都支持這一點,每個頁面加載都向 Sentry 發送一個 session。
normalizeDepth
Sentry SDK 將任何上下文數據標準化到給定深度。任何包含比其更深的結構的數據的 key 都將被修剪并使用其類型([Object]
或 [Array]
)進行標記,而無需進一步進行操作。默認情況下,walking 的深度為 3
級。
Integration Configuration
對于許多平臺,SDK 集成可以與之一起配置。在一些平臺上,這是 init() 調用的一部分,而在另一些平臺上,則應用不同的模式。
integrations
在一些 SDK 中,在庫初始化時通過這個參數配置集成。要了解更多信息,請參閱我們的文檔了解特定的集成。
defaultIntegrations
這可以用來禁用默認添加的集成。當設置為 false
時,不會添加默認的集成。
Hooks
這些選項可用于以各種方式 hook SDK,以定制事件的報告。
beforeSend
使用 SDK-specific 事件對象調用此函數,可以返回修改后的事件對象或不返回任何內容,以跳過報告事件。例如,這可以用于在發送前手動剝離 PII。
beforeBreadcrumb
在將面包屑(breadcrumb)添加到作用域(scope)之前,使用 SDK 特定的面包屑(SDK-specific breadcrumb)對象調用此函數。當該函數未返回任何內容時,將刪除 breadcrumb。要傳遞 breadcrumb,請返回第一個參數,其中包含 breadcrumb 對象。回調通常會獲得第二個參數(稱為“hint”),該參數包含創建 breadcrumb 的原始對象,以進一步自定義面包屑的外觀。
Transport Options
Transports 被用來發送事件到 Sentry??梢栽谀撤N程度上對傳輸進行定制,以更好地支持高度特定的部署。
transport
切換出用于發送事件的 transport。如何運作取決于 SDK。例如,它可以用于捕獲事件以進行單元測試,或通過需要代理身份驗證的更復雜的設置發送事件。
Tracing Options
tracesSampleRate
0 到 1 之間的數字,控制給定事務發送到哨兵的概率百分比。(0表示0%,1表示100%)同樣適用于應用程序中創建的所有事務。必須定義這個或 tracesSampler
以啟用跟蹤。
tracesSampler
一個函數負責確定一個給定的事務將被發送到 Sentry 的概率百分比。它將自動被傳遞有關事務和創建它的上下文的信息,并且必須返回一個介于 0
(被發送的概率為0%)和 1
(被發送的概率為100%) 之間的數字。還可以用于過濾事務,對不需要的事務返回0。必須定義這個或 tracesSampleRate
來啟用跟蹤。
Releases & Health
一個 release 是部署到環境中的代碼版本。當您向 Sentry 提供有關 release 的信息時,您可以:
- 確定新版本中引入的問題和回歸
- 預測哪個提交引起了問題,誰可能負責
- 通過在提交消息中包含問題編號來解決問題
- 在部署代碼時接收電子郵件通知
此外,releases 還用于將 source maps
應用到壓縮的 JavaScript 中,以查看原始的、未轉換的源代碼。
Bind the Version
在配置客戶端 SDK 時包含一個 release ID(通常稱為 “version” )。這個 ID 通常是一個 git SHA 或自定義版本號。
release 名稱不能:
- 包含換行符或空格
- 使用正斜杠(
/
),反斜杠(\
),句點(.
),或雙句點(..
) - 超過 200 個字符
每個組織的發布是全局的;在它們前面加上一些特定于項目(project-specific)的東西,以方便區分。
Sentry.init({
release: "my-project-name@2.3.12",
});
在 Node/npm 環境中使用 JavaScript 進行此操作的常見方法是使用process.env.npm_package_version
,如下所示:
Sentry.init({
release: "my-project-name@" + process.env.npm_package_version,
});
如何使版本對代碼可用由您決定。例如,您可以使用在構建過程中設置的環境變量。
這會用 release 值標記每個事件。我們建議您在部署新版本之前先告訴 Sentry,因為這將釋放一些新功能,如關于 releases 的文檔中所述。但是,如果您不這樣做,Sentry 會在第一次看到具有該 release ID 的事件時自動在系統中創建一個 release 實體。
配置完 SDK 后,您可以安裝 repository integration(存儲庫集成)或手動為 Sentry 提供自己的提交元數據。閱讀有關設置發行版的文檔,以獲取有關集成,關聯提交以及在部署發行版時告知 Sentry 的更多信息。
Release Health
通過觀察用戶采用率,應用程序使用率,crashes
百分比和 session data
來監視 health of releases
。Release health
將提供與用戶體驗相關的崩潰和錯誤影響的見解,并通過 release 詳細信息,圖表和過濾器揭示每個新問題的趨勢。
初始化 SDK 后,SDK 將自動管理會話的開始和結束。
Sentry.init({
autoSessionTracking: true
});
Environments
Sentry 收到帶有 environment 標簽的事件時,會自動創建環境。環境區分大小寫。環境名稱不能包含換行符,空格或正斜杠,字符串 "None" 或超過 64 個字符。您不能刪除環境,但是可以隱藏它們。
Sentry.init({
environment: "production",
});
Environments 可幫助您在 sentry.io 的“問題詳細信息”頁面中更好地過濾 issues,releases 和 user feedback,您可以在 documentation that covers using environments
中了解更多信息。
Filtering and Sampling Events
將 Sentry 添加到你的應用中能夠為你提供大量關于錯誤和性能的非常有價值的信息。大量的信息是有益的——只要這些信息是正確的,數量合理。
Sentry SDK 提供了多個配置選項來幫助您控制這一點,使您既可以過濾掉不需要的事件,又可以從中獲取代表性的樣本。
Note: Sentry UI 還提供了使用 Inbound Filters
篩選事件的方法。 不過,我們建議您在客戶端級別進行過濾,因為這樣可以消除發送您實際上不需要的事件的開銷。
Filtering Error Events
使用 beforeSend 回調方法并配置,啟用或禁用 integrations,將您的 SDK 配置為過濾錯誤事件。
Using beforeSend
所有 Sentry SDK 都支持 beforeSend
回調方法。在事件發送到服務器之前立即調用 beforeSend
,因此這是您可以編輯其數據的最終位置。它接收事件對象作為參數,因此您可以根據自定義邏輯和事件上可用的數據,使用它來修改事件的數據或完全刪除(通過返回 null
)。
Sentry.init({
// ...
beforeSend(event, hint) {
const error = hint.originalException;
if (
error &&
error.message &&
error.message.match(/database unavailable/i)
) {
event.fingerprint = ["database-unavailable"];
}
return event;
},
});
還要注意,面包屑(breadcrumbs)可以過濾,如 our Breadcrumbs documentation
所述。
Event Hints
before-send
回調函數同時傳遞了 event
和第二個參數 hint
,它包含一個或多個提示。
通常,hint
保存原始異常,以便提取額外數據或影響分組。在本例中,如果捕獲了某種類型的異常,則強制將指紋(fingerprint)轉換為普通值:
Sentry.init({
// ...
beforeSend(event, hint) {
const error = hint.originalException;
if (
error &&
error.message &&
error.message.match(/database unavailable/i)
) {
event.fingerprint = ["database-unavailable"];
}
return event;
},
});
當 SDK 為傳輸創建一個事件或面包屑(breadcrumb)時,該傳輸通常是從某種源對象創建的。例如,錯誤事件通常是從日志記錄或異常實例創建的。為了更好地定制,SDK 將這些對象發送給特定的回調( beforeSend
、beforeBreadcrumb
或 SDK 中的事件處理器系統)。
Using Hints
-
beforeSend
/beforeBreadcrumb
eventProcessors
Event 和 breadcrumb 的 hints
是包含用于將事件或面包屑組合在一起的各種信息的對象。通常,hints
保留原始異常,以便可以提取其他數據或影響分組。
對于事件,例如 event_id
,originalException
,syntheticException
(在內部用于生成更清晰的堆棧跟蹤),以及您附加的任何其他任意的 data
。
對于面包屑,hints
的使用取決于實現。對于 XHR 請求,hint 包含 xhr 對象本身。對于用戶交互,hint 包含 DOM 元素和事件名稱等。
在此示例中,如果捕獲到某種類型的異常,則將指紋(fingerprint)強制為一個公共值:
Sentry.init({
// ...
beforeSend(event, hint) {
const error = hint.originalException;
if (
error &&
error.message &&
error.message.match(/database unavailable/i)
) {
event.fingerprint = ["database-unavailable"];
}
return event;
},
});
Hints for Events
originalException
- 導致 Sentry SDK 創建事件的原始異常。這對于更改 Sentry SDK 對事件進行分組或提取額外信息的方式非常有用。
syntheticException
- 當引發字符串或非錯誤(non-error)對象時,Sentry 將創建綜合異常,以便您可以獲得基本的堆棧跟蹤。此異常存儲在此處以進一步提取數據。
Hints for Breadcrumbs
event
- 對于通過瀏覽器事件創建的面包屑,Sentry SDK 通常將事件作為 hint 提供給面包屑。 例如,這可用于將目標 DOM 元素中的數據提取到面包屑中。
level
/ input
- 對于從控制臺日志截取創建的面包屑。這將保留原始控制臺日志級別和日志功能的原始輸入數據。
response
/ input
- 用于從 HTTP 請求創建的面包屑。這保存了響應對象(來自 fetch API)和 fetch 函數的輸入參數。
request
/ response
/ event
- 用于從 HTTP 請求創建的面包屑。它保存了請求和響應對象(來自節點 HTTP API)以及節點事件(
response
或error
)。
xhr
- 對于通過舊版
XMLHttpRequest
API 通過 HTTP 請求創建的面包屑。這將保留原始的 xhr 對象。
Decluttering Sentry
您可以構造允許的域列表,這可能會引發可接受的異常。例如,如果您的腳本是從 cdn.example.com
加載的,而您的站點是 example.com
,則可以將 allowUrls
設置為:
如果您想永遠阻止特定的 URL,也可以使用 denyUrls
。
在 5.17.0 版之前,allowUrls
和 denyUrls
分別稱為 whitelistUrls
和 blacklistUrls
。出于向后兼容的原因,仍支持這些選項,但是在 6.0 版中將刪除它們。有關更多信息,請參見我們的 Inclusive Language Policy。
此外,我們的社區已為日常工作(例如 Facebook,Chrome 擴展程序等)編制了常見的忽略規則列表。建議您檢查一下這些內容,看看它們是否適用于您,這很有用。Here is the original gist。這不是我們 SDK 的默認值;這只是一個廣泛示例的亮點。
Sentry.init({
ignoreErrors: [
// Random plugins/extensions
"top.GLOBALS",
// See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error.html
"originalCreateNotification",
"canvas.contentDocument",
"MyApp_RemoveAllHighlights",
"http://tt.epicplay.com",
"Can't find variable: ZiteReader",
"jigsaw is not defined",
"ComboSearch is not defined",
"http://loading.retry.widdit.com/",
"atomicFindClose",
// Facebook borked
"fb_xd_fragment",
// ISP "optimizing" proxy - `Cache-Control: no-transform` seems to
// reduce this. (thanks @acdha)
// See http://stackoverflow.com/questions/4113268
"bmi_SafeAddOnload",
"EBCallBackMessageReceived",
// See http://toolbar.conduit.com/Developer/HtmlAndGadget/Methods/JSInjection.aspx
"conduitPage",
],
denyUrls: [
// Facebook flakiness
/graph\.facebook\.com/i,
// Facebook blocked
/connect\.facebook\.net\/en_US\/all\.js/i,
// Woopra flakiness
/eatdifferent\.com\.woopra-ns\.com/i,
/static\.woopra\.com\/js\/woopra\.js/i,
// Chrome extensions
/extensions\//i,
/^chrome:\/\//i,
// Other plugins
/127\.0\.0\.1:4001\/isrunning/i, // Cacaoweb
/webappstoolbarba\.texthelp\.com\//i,
/metrics\.itunes\.apple\.com\.edgesuite\.net\//i,
],
});
Sampling Error Events
要將錯誤的代表性樣本發送到 Sentry,請在 SDK 配置中將 sampleRate
選項設置為介于 0
(已發送錯誤的0%)和 1
(已發送錯誤的100%)之間的數字。這是一個靜態比率,將同樣適用于所有錯誤。例如,要抽樣25%的錯誤:
Sentry.init({ sampleRate: 0.25 });
Note: 誤差采樣率不是動態的。更改它需要重新部署。此外,設置 SDK 采樣率會限制事件源的可見性。為項目設置速率限制(僅在高 volume 時才丟棄事件)可能更適合您的需求。
Filtering Transaction Events
為了防止某些事務被報告給 Sentry,可以使用 tracesSampler
配置選項,該選項允許您提供一個函數來評估當前事務,并在它不是您想要的事務時刪除它。(它還允許您以不同的速率對不同的事務進行采樣。)
Note: tracesSampler
和 tracesSampleRate
配置選項是互斥的。如果您定義了一個 tracesSampler
來過濾掉某些事務,那么您還必須通過返回您希望它們被采樣的速率來處理未過濾的事務。
最簡單的形式(僅用于過濾)如下所示:
Sentry.init({
// ...
tracesSampler: samplingContext => {
if ("...") {
// Drop this transaction, by setting its sample rate to 0%
return 0;
} else {
// Default sample rate for all others (replaces tracesSampleRate)
return 0.1;
}
};
});
要了解有關 tracesSampler
選項的更多信息,請參閱 SDK 的 performance docs。
Sampling Transaction Events
對于 Sentry 的性能監控,我們建議抽樣您的數據,有兩個原因。首先,盡管捕獲單個跟蹤涉及的開銷最小,但捕獲每個頁面加載或每個 API 請求的跟蹤都有可能向系統添加不希望的負載。其次,啟用抽樣允許您更好地管理發送到 Sentry 的事件數量,這樣您就可以根據組織的需要調整您的數量。
在選擇采樣率時,目標不是收集太多數據,而是收集足夠的數據,以便得出有意義的結論。如果您不確定選擇什么速率,那么從一個較低的值開始,隨著您對流量模式和 volume 了解的更多,逐漸增加它,直到您找到了一個平衡性能和流量與數據準確性的速率。
要對事務進行取樣,可以將 tracesSampleRate
配置選項設置為 0
(發送的事務的 0%)到 1
(發送的事務的100%)之間的一個數字,或者將 tracesSampler
選項設置為一個函數,該函數將返回這個數字,該數字隨事務的不同而變化。
例如,將 tracesSampleRate
選項設置為 0.2
將導致 SDK 只發送 20% 的可能事務事件:
Sentry.init({
// ...
tracesSampleRate: 0.2,
});
或者,你可以提供一個 tracesSampler
函數,以不同的速率采樣不同的事務:
Sentry.init({
// ...
tracesSampler: samplingContext => {
// Examine provided context data (including parent decision, if any) along
// with anything in the global namespace to compute the sample rate or
// sampling decision for this transaction
if ("...") {
// These are important - take a big sample
return 0.5;
} else if ("...") {
// These are less important or happen much more frequently - only take 1%
return 0.01;
} else if ("...") {
// These aren't something worth tracking - drop all transactions like this
return 0;
} else {
// Default sample rate
return 0.1;
}
};
});
要了解更多關于 tracesSampler
選項的信息,請查看 SDK 的 performance docs。
Shutdown and Draining
大多數 SDK 的默認行為是在后臺通過網絡異步發送事件。這意味著如果應用程序意外關閉,某些事件可能會丟失。SDK 提供了應對這種情況的機制。
close
方法可選地接受一個以毫秒為單位的超時,并返回一個 promise,當所有未決事件刷新或超時開始時將 resolve 該 promise。
Sentry.close(2000).then(function() {
// perform something after close
});
調用 close
后,當前客戶端將不能再使用。在關閉應用程序之前只調用 close
是很重要的。
或者,在保持客戶端啟用狀態以繼續使用的同時,flush
方法會清空事件隊列。
Default Integrations
所有 Sentry 的 SDK 都提供了集成(integrations),擴展了 SDK 的功能。
默認情況下,系統集成(System integrations)是啟用的,以集成到標準庫或解釋器本身中。它們已記錄在案,因此您既可以知道它們在做什么,也可以在它們引起問題時禁用它們。
Enabled by Default
InboundFilters
Import name: Sentry.Integrations.InboundFilters
通過這種集成,您可以根據給定異常中的類型,消息或 URL 忽略特定錯誤。
默認情況下,它忽略以 Script error
或 Javascript error: Script error
開頭的錯誤。
要配置這個集成,直接使用 ignoreErrors
,denyUrls
,和 allowUrls
SDK 選項。請記住,denyURL
和 allowURL
只對捕獲的異常有效,而不是原始消息事件。
FunctionToString
Import name: Sentry.Integrations.FunctionToString
這種集成使 SDK 可以提供原始的函數和方法名稱,即使我們的錯誤或面包屑處理程序包裝了它們也是如此。
TryCatch
Import name: Sentry.Integrations.TryCatch
這個集成封裝了原生 time 和 events APIs (setTimeout
, setInterval
, requestAnimationFrame
, addEventListener/removeEventListener
) 在 try/catch
塊處理 async 異常。
Breadcrumbs
Import name: Sentry.Integrations.Breadcrumbs
這種集成封裝了原生 API 以捕獲面包屑。默認情況下,Sentry SDK 封裝了所有 API。
Available options:
{ beacon: boolean; // Log HTTP requests done with the Beacon API
console: boolean; // Log calls to `console.log`, `console.debug`, etc
dom: boolean; // Log all click and keypress events
fetch: boolean; // Log HTTP requests done with the Fetch API
history: boolean; // Log calls to `history.pushState` and friends
sentry: boolean; // Log whenever we send an event to the server
xhr: boolean; // Log HTTP requests done with the XHR API
}
GlobalHandlers
Import name: Sentry.Integrations.GlobalHandlers
這個集成附加了全局處理程序來捕獲未捕獲的 exceptions 和未處理的 rejections。
可用的選項:
{
onerror: boolean;
onunhandledrejection: boolean;
}
LinkedErrors
Import name: Sentry.Integrations.LinkedErrors
此集成允許您配置鏈接錯誤。它們將被遞歸地讀取到指定的限制,并由特定的 key 執行查找。默認情況下,Sentry SDK 將限制設置為 5,使用的鍵 key 是 cause
。
可用的選項:
{
key: string;
limit: number;
}
UserAgent
Import name: Sentry.Integrations.UserAgent
這種集成將 user-agent 信息附加到事件中,這使我們能夠正確地分類并使用特定的操作系統(OS),瀏覽器(browser)和版本(version)信息對其進行標記。
Modifying System Integrations
要禁用系統集成,在調用 init()
時設置 defaultIntegrations: false
。
要覆蓋它們的設置,請提供一個帶有配置到 integrations
選項的新實例。例如,關閉瀏覽器捕獲的控制臺調用:integrations: [new Sentry.Integrations.Breadcrumbs({ console: false })]
。
Removing an Integration
這個例子移除了為事件添加面包屑的默認啟用的集成:
Sentry.init({
// ...
integrations: function(integrations) {
// integrations will be all default integrations
return integrations.filter(function(integration) {
return integration.name !== "Breadcrumbs";
});
},
});
Pluggable Integrations
這些可插拔的集成是為特定的應用程序和/或框架增加功能的代碼片段。我們對它們進行了記錄,這樣您就可以看到它們的功能,并且可以啟用它們。
How to Enable
安裝 @sentry/integrations
包,并提供一個帶有你配置到 integrations
選項的新實例。加載 SDK 之后,包括插件。
示例:
import * as Sentry from "@sentry/browser";
import { ReportingObserver as ReportingObserverIntegration } from "@sentry/integrations";
Sentry.init({
dsn: "___PUBLIC_DSN___",
integrations: [new ReportingObserverIntegration()],
});
ExtraErrorData
Import name: Sentry.Integrations.ExtraErrorData
這個集成從錯誤對象中提取所有非原生(non-native)屬性,并將它們作為 extra
數據附加到事件中。
可用的選項:
{
// limit of how deep the object serializer should go. Anything deeper than limit will
// be replaced with standard Node.js REPL notation of [Object], [Array], [Function] or
// a primitive value. Defaults to 3.
depth: number;
}
CaptureConsole
Import name: Sentry.Integrations.CaptureConsole
這種集成捕獲所有的 Console API
調用,并使用 captureMessage
調用將它們重定向到 Sentry。然后,它會重新觸發以保留默認的原生行為。
{
// array of methods that should be captured
// defaults to ['log', 'info', 'warn', 'error', 'debug', 'assert']
levels: string[];
}
Dedupe
Import name: Sentry.Integrations.Dedupe
這種集成可以對某些事件進行重復數據刪除。如果您收到許多重復的錯誤,可能會有所幫助。請注意,Sentry 將僅比較堆棧跟蹤和指紋。
Debug
Import name: Sentry.Integrations.Debug
通過這種集成,您可以檢查已處理事件的內容,該事件將被傳遞到 beforeSend
并有效地發送到 Sentry SDK。無論何時注冊,它都將始終作為最后的集成運行。
可用的選項:
{
// trigger DevTools debugger instead of using console.log
debugger: boolean;
// stringify event before passing it to console.log
stringify: boolean;
}
RewriteFrames
Import name: Sentry.Integrations.RewriteFrames
這種集成允許您對堆棧跟蹤的每一幀應用轉換。在 streamlined 場景中,可以使用它來更改文件框架的名稱,或者向它提供一個迭代函數來應用任何任意的轉換。
在 Windows 機器上,你必須使用 Unix 路徑并跳過 root
選項中的卷(volume)號來啟用。例如,C:\\Program Files\\Apache\\www
不能工作,但是,/Program Files/Apache/www
可以。
可用的選項:
{
// root path that will be appended to the basename of the current frame's url
root: string;
// function that takes the frame, applies a transformation, and returns it
iteratee: (frame) => frame;
}
ReportingObserver
Import name: Sentry.Integrations.ReportingObserver
此集成與 ReportingObserver API 掛鉤,并將捕獲的事件發送到 Sentry??梢詫⑵渑渲脼閮H處理特定的問題類型。
可用的選項:
{
types: <'crash'|'deprecation'|'intervention'>[];
}
Custom Integrations
使用以下格式在 JavaScript 中添加一個自定義集成:
// All integration that come with an SDK can be found on Sentry.Integrations object
// Custom integration must conform Integration interface: https://github.com/getsentry/sentry-javascript/blob/master/packages/types/src/integration.ts
Sentry.init({
// ...
integrations: [new MyAwesomeIntegration()],
});
rrweb: Session Replays
Sentry 提供了與 rrweb 的 proof-of-concept(概念驗證) 集成,該工具包用于記錄和重放用戶會話。在功能豐富的單頁應用程序中診斷復雜的用戶行為時,這可能非常有用。
有關可用 hints 的信息,請參閱 hints in JavaScript
回放使用 Attachments.
Configuration
首先,您需要添加 @sentry/rrweb
和 rrweb
軟件包:
npm install --save @sentry/rrweb rrweb
接下來,使用 Sentry SDK 注冊集成。這將根據您使用的框架而有所不同:
import * as Sentry from "@sentry/browser";
import SentryRRWeb from "@sentry/rrweb";
Sentry.init({
dsn: "___PUBLIC_DSN___",
integrations: [
new SentryRRWeb({
// ...options
}),
],
// ...
});
有關配置的更多信息,請參閱 @sentry/rrweb project on GitHub。
捕獲到事件的重播后,您會發現該事件在事件的 “Replay” 部分下的“問題詳細信息”中可見。
Sampling
為了滿足組織的需求,您可能希望對 replay 進行采樣。最簡單的方法是在初始化 Sentry SDK 時做出抽樣決定。例如,以下是 Sentry 本身如何使用采樣來僅捕獲員工的樣本的方法:
const hasReplays = getCurrentUser().isStaff;
let integrations = [];
if (hasReplays) {
console.log("[sentry] Instrumenting session with rrweb");
integrations.push(new SentryRRWeb());
}
Sentry.init({
dsn: "___PUBLIC_DSN___",
integrations,
});
Sentry.setTag("rrweb.active", hasReplays ? "yes" : "no");
您會注意到我們還設置了 rrweb.active
標記,該標記可幫助我們識別附加了 replay 的事件,因為否則我們將無法找到它們。配置完成后,您將可以在搜索查詢中簡單地使用 rrweb.active:yes
。
Sentry Testkit
在為應用程序構建測試時,您希望斷言正確的 flow-tracking 或錯誤正在發送到 Sentry,而不是真正地將其發送到 Sentry 服務器。這樣,您就不會在測試運行或其他 CI 操作期間用錯誤報告淹沒 Sentry。
Note: Wix, 一個 Sentry 合作伙伴, 負責維護Sentry Testkit。
Sentry Testkit 是一個 Sentry 插件,允許攔截 Sentry 的報告,并進一步檢查正在發送的數據。它允許 Sentry 在您的應用程序中原生工作,并且通過覆蓋缺省 Sentry 的傳輸機制,報告并不真正發送,而是在本地記錄到內存中。通過這種方式,可以在以后獲取記錄的報告,用于您自己的使用、驗證,或者您在本地開發/測試環境中的任何其他用途。
Installation
npm install sentry-testkit --save-dev
Using in tests
const sentryTestkit = require("sentry-testkit");
const { testkit, sentryTransport } = sentryTestkit();
// initialize your Sentry instance with sentryTransport
Sentry.init({
dsn: "___PUBLIC_DSN___",
transport: sentryTransport,
//... other configurations
});
// then run any scenario that should call Sentry.catchException(...)
expect(testkit.reports()).toHaveLength(1);
const report = testkit.reports()[0];
expect(report).toHaveProperty(/*...*/);
您也可以在 sentry-testkit 倉庫中的 testing section 中看到更多用法示例。
Testkit API
Sentry Testkit 由一個非常簡單和直接的 API 組成。在 Sentry Testkit Docs 中可以看到完整的 API 描述和文檔。
中文文檔陸續同步到:
我是為少。
微信:uuhells123。
公眾號:黑客下午茶。
謝謝點贊支持??????!