Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解(二)

简介: Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解(二)

Default Integrations



所有 Sentry 的 SDK 都提供了集成(integrations),扩展了 SDK 的功能。

默认情况下,系统集成(System integrations)是启用的,以集成到标准库或解释器本身中。它们已记录在案,因此您既可以知道它们在做什么,也可以在它们引起问题时禁用它们。


Enabled by Default


InboundFilters

Import name: Sentry.Integrations.InboundFilters

通过这种集成,您可以根据给定异常中的类型,消息或 URL 忽略特定错误。

默认情况下,它忽略以 Script errorJavascript error: Script error 开头的错误。


要配置这个集成,直接使用 ignoreErrorsdenyUrls,和 allowUrls SDK 选项。请记住,denyURLallowURL 只对捕获的异常有效,而不是原始消息事件。

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。可以将其配置为仅处理特定的问题类型。

可用的选项:


{
  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/rrwebrrweb 软件包:


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 描述和文档。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
232 2
|
2月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
2月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
54 10
|
4月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
258 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
5月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
5月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
5月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
5月前
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石
|
5月前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
114 1
|
5月前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。