npm 包 @opentelemetry/context-base 使用教程

前言

在 Web 开发中,前端工程师经常需要监控应用程序的性能和异常,而 OpenTelemetry (OTel) 是一个跨语言的开源项目,为我们提供了一种简单、可扩展和统一的方法来生成、导出和处理分布式跟踪和度量数据。@opentelemetry/context-base 是 OpenTelemetry JavaScript SDK 的一部分,它提供了一种在应用程序中传递上下文和跟踪标识的基础框架,帮助我们实现跨服务和跨进程的追踪和监控。

在本篇文章中,我们将会讲解 @opentelemetry/context-base 的使用方法,包括安装、初始化、上下文传递、跟踪标识、错误处理等,希望对大家深入理解 OpenTelemetry 以及前端监控有一定的帮助。

安装

在终端中执行以下命令安装 @opentelemetry/context-base:

--- ------- ------ ---------------------------

初始化

在使用 @opentelemetry/context-base 之前,我们需要先初始化一个全局的 TracerProvider 和一个全局的 ContextManager,这里我们可以参考官方的示例:

----- - ------------------- - - ----------------------------------
----- - ----------- - - ----------------------------------
----- - ------------------- - - -----------------------------------------------
----- - ------------------ - - -------------------------------
----- - -------- - - ------------------------------------

----- -------- - --- ---------------------
  --------- --- ----------
    -------- ------------
  --
---

----- ------ - --- -------------------------------------------
----------------------------- ----------------------------------------

----- ------------------- - --- ----------------------
------------------------------------------------

-----------------------------

在这个示例中,我们创建了一个 BasicTracerProvider 实例,并使用 Resource 对象为我们的跟踪器标识了服务名称。接着,我们创建了一个 BasicTracer 实例,并将其添加到 Provider 中。

这里顺便介绍一个名为 SpanProcessor 的概念。SpanProcessor 是负责将 Span 输出到某个存储或者接口的模块。这里我们使用了一个名为 SimpleExportSpanProcessor 的处理器,它会将 Span 打印到控制台上。

最后,我们开启了一个 HTTP 监听器,并使用 httpInstrumentation.enable 方法来自动为每个传入的 HTTP 请求创建一个新的 Span。

上下文传递

@opentelemetry/context-base 提供了一套 API,允许我们在应用程序中传递上下文,从而实现对分布式跟踪和监控的支持。

创建上下文

我们可以使用 createContext 方法创建一个新的上下文,并将其验证通过。例如:

----- - ------- - - ---------------------------------------

----- --------- - -----------------

获取当前上下文

我们可以使用 getChildContext 方法获取当前上下文的子上下文。

----- ------------ - -------------------------- ---------

设置当前上下文

我们可以使用 with方法 将新的值与上下文相关联。

----- ---------- - --------------------------- ---- --------

传递上下文

在应用程序中,我们需要在不同的函数调用中传递上下文。我们可以使用 with方法将上下文传递到不同的函数中。

-------- ----- -
  -- --- --- ------- -------
  ----- -------------- - -----------------

  -- -- --------- ---- -------- ------ -- - --- ----- -------
  ----- ---------- - ------------------------------- ---------
  
  -- ---- --- --- ------- -- --- ---- --------
  ----------------
-

-------- ------------ -
  ----- ----- - ------------------------
-

异步上下文传递

在异步场景下,我们可以使用 AsyncHooksContextManager 和 ZoneContextManager 实现自动上下文传递。

例如,我们可以通过以下方式传递上下文:

----- ------------------------ - --- ------------------------------------
----- ---------- - -------------------------------

----------------------------------------- ------- -- -
  ------------------- -- -
    -----------------
  ---
---

在这个例子中,我们使用 AsyncHooksContextManager 来捕获传入的上下文,并使用 with 方法在异步操作(doSomethingAsync)中调用。

跟踪标识

@opentelemetry/context-base 还可以用于跟踪标识的传递。

创建 trace

创建一个新的 trace,使用 tracer.startSpan() 方法。

----- ---- - --------------------------------

你也可以选择将当前 trace 作为父 trace,例如:

----- ---------- - -------------------------------
----- --------- - ----------------------------- ---------- ----------------------

这里,我们创建了一个名为 parentSpan的 Span,然后使用了 parentSpan.context() 作为 Child Span 的参数。这样,我们就将两个 Span 链接起来,并且 Child Span 可以通过 parentSpan 的 context 传播 TraceId 和 SpanId。

包装 trace

我们可以使用 tracer.withSpan() 方法执行一些带有 trace context 的操作。例如,如果要记录某个函数的执行时间,可以像下面这样做:

----- ----------- - -- -- -
  ------------------ -------------
--

----- ------------ - ---- ----------- -- -
  -- ------ - --- ----
  ----- ---- - --------------------------------- - ------- ---------- ---
  -- ---- --- ---- -- --- --------
  ----- --- - ---------
  -- --- --- ---- ---- ----
  -----------
  -- ------ --- ------ -- --- --------
  ------ ----
--

----- ---------- - ---------------------------------
------------------------- ------------
-----------------

在这个代码片段中,我们使用 traceWrapper() 方法将 doSomething() 函数包装在一个 Span 中。我们将 parentSpan 作为其父 Span,并将其传递给 traceWrapper() 方法。这样,我们就得到了一个带有 trace context 的函数,并且可以使用这个 context 来记录执行时间。

错误处理

在运行时出现错误时,@opentelemetry/context-base 可以帮助我们正确地记录和传递错误消息和堆栈跟踪。

记录错误

我们可以使用 tracer.getCurrentSpan() 方法获得当前的 Span 对象,并使用该对象记录跟踪信息。例如:

----------- -- -
  ----- ---- - ------------------------
  ---------------------------- - ------ ----- ---
---

传递错误

@opentelemetry/context-base 还提供了一些工具来传递错误,例如 context.bind

--- -
  ----- --------- - -----------------
  ----- ------ - ---------------------------
- ----- ------- -
  ----- ---- - ------------------------
  ---------------- ----- --------------------------------- -------- ------------- ---
-

在这个代码片段中,我们使用 context.bind() 方法在一个带有错误处理的上下文中执行函数,并记录跟踪信息。

结论

通过本文的讲解,我们了解了 @opentelemetry/context-base 的基本使用方法,包括初始化、上下文传递、跟踪标识和错误处理。现在,我们可以更方便地实现分布式跟踪和监控,并更加深刻地理解前端监控的工作原理。当然,这只是冰山一角,OpenTelemetry 还提供了更多功能强大的模块和工具,感兴趣的读者可以深入学习。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5eedaebeb5cbfe1ea0610ec8


猜你喜欢

  • npm 包 @opentelemetry/core 使用教程

    前言 @opentelemetry/core 是一个用于构建分布式系统、监控和调度的 JavaScript 库。作为开放性业界标准 OpenTelemetry 的核心组件之一,@opentelemet...

    4 年前
  • npm 包 @opentelemetry/resources 使用教程

    前言 在现代化的应用程序或服务中,追踪和监控应用程序的关键性能指标是必要的。OpenTelemetry 是一个开源的框架,用于生成和处理跟踪,指标和日志数据。@opentelemetry/resour...

    4 年前
  • npm 包 @opentelemetry/tracing 使用教程

    介绍 在前端开发中,追踪应用程序的性能和错误是非常重要和必要的。@opentelemetry/tracing 是一个开源的 Node.js 库,它提供了一种可扩展的、可靠的方法来追踪前端应用程序的性能...

    4 年前
  • npm 包 @activeledger/activecontracts 使用教程

    在前端开发中,我们经常需要使用第三方包来实现一些功能。而在区块链开发中,@activeledger/activecontracts 是一个很好用的 npm 包,可以帮助我们实现一些与智能合约相关的操作...

    4 年前
  • npm 包 @ledgerhq/errors 使用教程

    在前端开发中,经常需要处理不同的错误情况。@ledgerhq/errors 是一个 Node.js 的 npm 包,可以用来处理 Ledger 设备上发生的错误。在本篇文章中,我们将详细介绍如何安装和...

    4 年前
  • npm包 @ledgerhq/devices的使用教程

    前言 在前端开发中,随着加密货币的普及,越来越多的应用需要与硬件钱包进行交互。而@ledgerhq设备的npm包,提供了一种便捷的方式,让开发者可以方便地与硬件钱包进行交互。

    4 年前
  • npm 包 @ledgerhq/hw-transport 使用教程

    介绍 @ledgerhq/hw-transport 是一个用于与硬件钱包通信的 npm 包,支持多种类型的硬件钱包,包括 Ledger Nano S,Ledger Nano X等。

    4 年前
  • npm 包 @activeledger/activetoolkits 使用教程

    在前端开发中,我们经常需要使用一些工具库来帮助我们完成开发任务。其中,npm 包是常用的工具之一。在这篇文章中,我们将介绍一个常用的 npm 包 @activeledger/activetoolkit...

    4 年前
  • npm包@types/solidity-parser-antlr使用教程

    简介 @types/solidity-parser-antlr是npm上的一个TypeScript类型定义包,用于在TypeScript中调用solidity-parser-antlr。

    4 年前
  • npm 包 solidity-parser-antlr 使用教程

    Solidity 是一种智能合约的编程语言,而 solidity-parser-antlr 则是一种 npm 包,可以帮助开发人员将 Solidity 合约解析成抽象语法树(AST)。

    4 年前
  • npm 包 @ledgerhq/logs 使用教程

    在前端开发中,处理和调试日志是非常重要的一项功能。钱包应用程序如 Ledger,也需要有一个强大的日志记录功能,以便其开发人员在处理问题时能够得到准确的信息。这就是为什么 @ledgerhq/logs...

    4 年前
  • npm 包 @types/ethereum-protocol 使用教程

    在开发区块链和去中心化应用程序时,Ethereum 是一种非常流行的平台。如果您打算使用 TypeScript 开发 Ethereum 应用程序,那么 @types/ethereum-protocol...

    4 年前
  • npm 包 u2f-api 使用教程

    简介 在 Web 应用程序中,强大的用户身份认证方法是必不可少的一种安全保障。通常情况下,用户名和密码已经成为了 Web 身份验证最基本的组成部分。然而,在一些重要的安全场合,单单凭借用户名和密码的验...

    4 年前
  • npm 包 es-get-iterator 使用教程

    什么是 es-get-iterator 包 es-get-iterator 是一个 npm 包,它提供了一种迭代 ES6 中的可迭代对象的方法。通过使用 es-get-iterator 包,我们不必使...

    4 年前
  • npm 包 iterate-iterator 使用教程

    iterate-iterator 是一个非常实用的 npm 包,可以帮助前端开发人员更加灵活和高效地操作数组和迭代器。本文将介绍该 npm 包的使用方法,以及其深入的功能和学习指导意义。

    4 年前
  • npm 包 glob-exec 使用教程

    前言 在前端开发中,我们经常需要对文件进行操作,如查找满足一定规则的文件、删除指定文件等。这时候,我们可以使用 npm 包 glob-exec 来轻松实现这些操作。

    4 年前
  • npm 包 has-bigints 使用教程

    随着 JavaScript 语法和运行环境的不断升级和完善,BigInt 类型也逐渐得到了广泛的支持。BigInt 类型可以表示任意大的整数,与传统的 Number 类型对比,它能够提供更高的精度,更...

    4 年前
  • npm 包 ts-lib-utils 使用教程

    什么是 ts-lib-utils ts-lib-utils 是一个能够提供常用的 TypeScript 工具函数的 npm 包。它包含了各种类型的能够提高 TypeScript 代码质量的工具函数,例...

    4 年前
  • npm 包 Type-Coverage-Core 使用教程

    在前端开发中,我们经常需要对代码进行类型检查,以提高代码开发和维护的效率和准确性。而 NPM 包 Type-Coverage-Core 就提供了一种快速方便的方式来检查 TypeScript 项目中的...

    4 年前
  • npm包 @foray1010/common-presets-utils使用教程

    简介 @foray1010/common-presets-utils是一个功能强大且易于使用的npm包,专门为前端开发人员提供解决方案。它提供了一系列的通用预设,可以在各种前端项目中使用。

    4 年前

相关推荐

    暂无文章