開發與維運

Sentry(v20.12.1) K8S 雲原生架構探索,Sentry JavaScript SDK 三種安裝加載方式

NPM

# 使用 yarn
yarn add @sentry/browser @sentry/tracing
# 使用 npm
npm install --save @sentry/browser @sentry/tracing

CDN

Sentry 支持通過 CDN 加載其 JavaScript SDK。通常,我們建議使用 npm 軟件包(@sentry/browser)作為 CDN 創建方案,在這些方案中,由於網絡問題或廣告擴展程序之類的常見擴展,Sentry 無法加載。如果必須使用 CDN,請看看如何使用我們的 JS 加載器延遲加載 Sentry。


<script
  src="https://browser.sentry-cdn.com/5.29.2/bundle.min.js"
  integrity="sha384-ir4+BihBClNpjZk3UKgHTr0cwRhujAjy/M5VEGvcOzjhM1Db79GAg9xLxYn4uVK4"
  crossorigin="anonymous"
></script>

性能 Bundle

要使用 Sentry 的性能跟蹤,需要一個 alternative(備用) bundle。這使我們可以為只需要錯誤監視的用戶減少文件大小。


<script
  src="https://browser.sentry-cdn.com/5.29.2/bundle.tracing.min.js"
  integrity="sha384-4zxA5Bnxor/VkZae20EqPP3A/6vDlw1ZhqF7EvpmeTfWYFjPIDdaUSOk/q7G/bYw"
  crossorigin="anonymous"
></script>

您只需要加載 bundle.tracing.min.js,即可提供錯誤和性能監控。

這裡要注意的最重要的一點是 Sentry.Integrations 已經可用,可以在調用 Sentry.init 時引用它:


Sentry.init({
  dsn: "___PUBLIC_DSN___",
  release: "my-project-name@" + process.env.npm_package_version,
  integrations: [new Sentry.Integrations.BrowserTracing()],
  // 我們建議在生產中調整此值,或使用 tracesSampler 進行更精細的控制
  tracesSampleRate: 1.0,
});

可用的 Bundles

提供了多種 bundles,這些 bundles 針對 Sentry 的各種集成進行了優化。


File Integrity Checksum
angular.js sha384-oGlOwTDeutKQy8iIj86N5Iz+cg3oB7k7DwwAFF+JvU5Ryk3QpBd9RWe7b1dvbytH-
angular.min.js sha384-glEOteL1rvN2KINqDwBkOPyi+yM/AuHdHZoW89/oufCLWhmOZvRLTQcMarZLrahO
bundle.es6.js sha384-C/1UhIXVvIEeHWK+Oon2qJ5dknXU/6yoOszWad+UgIQaMvkuRapwg7GBAm89WKkY
bundle.es6.min.js sha384-YtQnmGXv08gDRhGCtnUN32p5tEk2xCJePCG5XGcFefgts4LACdWXenPO5/kVkQKg
bundle.js sha384-70m6a/iRDkIhWo9D2seDfr054bdBakn8SM/I1Qx/2E1E2oeFrB/UlfRRQ7lk6w29
bundle.min.js sha384-ir4+BihBClNpjZk3UKgHTr0cwRhujAjy/M5VEGvcOzjhM1Db79GAg9xLxYn4uVK4
bundle.tracing.js sha384-tsSu02fvNXxzKOYMmsMHW6Zjb3xpUtLkKsF3h63S/8uzbyoI4sURznHBWWmmYBnT
bundle.tracing.min.js sha384-4zxA5Bnxor/VkZae20EqPP3A/6vDlw1ZhqF7EvpmeTfWYFjPIDdaUSOk/q7G/bYw
captureconsole.js sha384-FB7wnw52/iiuFH+aV7+yF3+Hb8y+UeaYjreZafP7GzE9VjoWZ0k196k4XseGRkeK
captureconsole.min.js sha384-6YIh+FyIHrE7APnLltmw5AcyyEI7yV3pgn5I/aww3gYxGrAsotTDRIsix05d1bmg
debug.js sha384-CzFfkxQdU/85sLu1YXX2lWrZU/pJEkSB7qiwkIwFwHQn/+dWp9Qz8YADcVNlwpUY
debug.min.js sha384-gfwqW2T9/pJzXG5kGMjh219m8NxYr4sFdNEmk8Kcmm03LLR3e7u0MUCJtF+BvwlA
dedupe.js sha384-w30Nic/lP8/Lwg/nJr5WAydru2HshwlpwrbablyGtwy93SdrKOXBENhAbFar8U61
dedupe.min.js sha384-991Pgp/m4NC5gP7q/xzXphPFKPZI3iGG04gFtnoHlyH13gSiR/cQJVh+/5vjnULG
ember.js sha384-uIwfFqGm1HIvIFAzmFi7+254jT3en0RDGQBep5yjZlUM5m5+wkxlV3iwtxbRSiDL
ember.min.js sha384-AoDWDCFzGgUlcjpTPIOucLHY0TcDkJISfQTounFvJC9id+SLfT+LMV/omYXeSxtk
extraerrordata.js sha384-UJSF3duqUmoZZYNHJIgczPWi0zF4dj9ZjXfU+HWSGsCkmbAwHvXqcdgc5IcmZBUb
extraerrordata.min.js sha384-32fXO2AIiHJpC33l8L8jhTkgPMY5QyAMH+E+3qyI4LI+RC4BsMtaqi1Y0wncuONI
offline.js sha384-6AWlLn2pEAwsHjZOeLUKhHPtfAzzAC7GXXYpFW1XZQ1OChliYYUvWwSfrmEPe+R8
offline.min.js sha384-nOHWW5k4teYVTgdr9pem7/0/N/mt6DLwL/vipeoYd/0u0lh3Ld9IiRAIWgk+ubid
reportingobserver.js sha384-ZtU5drTUdMPOWXuUZvgv4QyqMxkDNdiBiEbj8aD5CmwABHCI/XUFd2eC3iRRlc+p
reportingobserver.min.js sha384-c8fGh3K1+dBi9WNNtK2eVmaEgfoM3Rq1gY6KeRoA/WSi7RlhxRkUmVK37DJTwr7F
rewriteframes.js sha384-k1F/xgCZmOcziSivt8QoKMaELWZmjNJFm+n2PX/2MEKWrszB2IL6S4q+JDJ7o/8N
rewriteframes.min.js sha384-22utNfjd1bJOgWt7yrPsUIWR7gluO23PO7d2m30lqrmnj5DH3OmVa8fwcwZhbfPp
sessiontiming.js sha384-9srvADRpjm3FrmiK6dY0NGV4wnTG4dt8onLWUx6LRVN1xhtw+oRJnQ1LtKi4kqGB
sessiontiming.min.js sha384-yy0Jah9kyZt8VCnKVBxDj92pIC/E9XFkw5G6NXx2+0ZJbTBn83Y3X32KqAZxhF9b
transaction.js sha384-KN4xQF97K+t2Zgsqg8FiZE5++QLb0PCD4+v0k0ZVg6rl47vvmUIiSueozKB29Gu1
transaction.min.js sha384-p+n3NUtytg2Zgunyx5gQNdbZk7AieZyquN8nOaL7+hbqbe0SZomZIQJ5apsiXuLd
vue.js sha384-e6Vy50VfbAicS4Fa6R4tigCfJ3q+ifS/AYFyhP7+OtXcLjr0C8zHCoh2DCJ1EMNP
vue.min.js sha384-FKagncFah3a9nkKNEIDQqXhYnny5Wzc37/AZV5eKKnRVS8uPpeFPdu9dnrvAnRpF

附加配置


使用 defer

如果您在腳本中包含 defer,請確保該應用可以監視其後的所有內容。我們強烈建議您使用 defer,同時將瀏 browser SDK 的腳本標籤放在第一位,並標記它 -- 以及所有其他腳本 -- defer(而不是 async ),以確保在其他任何腳本之前執行。


如果不這樣做,您會發現在加載 Sentry 之前可能會發生錯誤,這意味著您將無視這些問題。


內容安全策略

如果您的站點上設置了內容安全策略(CSP),則需要添加從何處加載 SDK 的 script-src,以及 DSN 的來源。例如:


延遲加載 Sentry


Loader 是我們 SDK 的一個小型包裝器,它可以做一些事情:

  • 始終擁有我們 SDK 的最新推薦穩定版本
  • 捕獲所有全局錯誤未處理的 promise rejections
  • 延遲注入我們的 SDK 到您的網站
  • 加載 SDK 後,Loader 會將所有內容發送給 Sentry

loader 的壓縮量(gzipped)小於 1kB,並且在您的 DSN 中包含 Sentry.init 調用。


<script
  src="https://js.sentry-cdn.com/___PUBLIC_KEY___.min.js"
  crossorigin="anonymous"
></script>

附加配置

如果要設置其他選項,則必須像這樣設置它們:

onLoad 是 Loader 僅提供的功能;一旦將 SDK 注入網站,Loader 就會調用它。Loader 的 init() 工作原理也有所不同。為了方便起見,我們在內部合併了這些選項,而不僅僅是設置選項,這是為了方便起見,因此您不必再次設置 DSN,因為 Loader 已經包含了它。


如前所述,Loader 會延遲加載我們的 SDK 並將其注入您的網站,但您也可以告訴 loader 立即獲取它,而不是僅在需要時獲取它。將 data-lazy 設置為 no 將告訴 Loader 儘快注入 SDK:


<script>
  Sentry.onLoad(function() {
    // 使用任何你想要的 Sentry.* 函數
  });
  Sentry.forceLoad();
</script>

SDK 版本

進入 Sentry Web UI,查看 Settings -> Projects -> Client Keys (DSN),然後按 Configure 按鈕。在這裡,您可以查看用於配置 DSN 的選項,並選擇 Loader 應加載的 SDK 版本。


由於更改已被緩存,因此可能需要幾分鐘的時間才能在代碼中看到更改。

微信圖片_20220611114351.png

當前限制

由於我們以異步方式注入我們的 SDK,因此我們將僅為您監視全局錯誤未處理的 promise,直到 SDK 完全加載為止。這意味著在下載過程中我們可能會錯過 breadcrumbs(麵包屑)。


例如,用戶單擊您網站上的按鈕正在發出 XHR 請求。在 SDK 完全加載之前,我們不會遺漏任何錯誤,只會遺留 breadcrumbs(麵包屑)。您可以通過手動調用 forceLoad 或設置 data-lazy="no" 來減少此時間。


如果您想了解 loader 本身的內部工作原理,則可以在 sentry-javascript repo 中全面閱讀文檔化的源代碼。

Leave a Reply

Your email address will not be published. Required fields are marked *