Sentry(v20.12.1) K8S 云原生架构探索,Sentry JavaScript SDK 三种安装加载方式

简介: 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 中全面阅读文档化的源代码。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
790 2
|
10月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
514 77
|
JavaScript 前端开发 Go
Wasm Client SDK 架构介绍
Wasm Client SDK 架构介绍
688 13
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
前端开发 JavaScript 开发工具
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
1142 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
JavaScript 编译器 开发工具
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
899 2
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
527 10
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
924 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。

热门文章

最新文章

推荐镜像

更多