前言
随着云原生发展,微服务逐渐成为主流,复杂的分布式系统使得用户体验监测愈加困难。OpenTelemetry 提供了一套 API 和 SDK 来跨多个语言、跨多个应用程序或服务进行的观察性数据捕获,即现代化的分布式追踪系统。其中,npm 包 @opentelemetry/api 提供了一个 JavaScript API,方便前端开发者集成和使用 OpenTelemetry 进行代码追踪和监控。本文档将详细介绍 @opentelemetry/api 的使用。
安装和初始化
在使用 @opentelemetry/api 之前,我们需要手动安装它。在控制台输入下面的命令:
npm install @opentelemetry/api
然后,我们需要初始化原型。通常情况下,在应用程序的入口处(main.js 或 index.js)中执行所需的代码即可。下面是示例:
// 引入 @opentelemetry/api 。 const opentelemetry = require('@opentelemetry/api'); // 初始化 opentelemetry.trace.setGlobalTracerProvider(new opentelemetry.NodeTracerProvider());
开始跟踪
现在,可以使用 @opentelemetry/api 收集应用程序的跟踪数据。通常情况下,每个 HTTP 端点都应该有一个唯一的跟踪配对。下面是一个简单的 Express 路由的示例:
-- -------------------- ---- ------- -- -- ------------------ - ----- ------------- - ------------------------------ ----- ------- - ------------------- -- --- ----------------------------------------------- ------------------------------------ -- ------ ------- --- ----- --- - ---------- -- --------------- ------------------------------------------------ -- -- ------------------------- --------- --------- -- - -- --------- ----- ---- - ----------------------------------------------------------------------------- ----------------------- ------------------- -- --- -- ----- ----------- --- -- ----- ----- ---- - ---------------- -- ----- ---------------- -- -- ---------------- ------ --------- -- ---- -----------
上例中,我们用 opentelemetry.trace.getTracer()
API 创建了一个名为 "example-service" 的跟踪实例,并开始了一个新的活动(span)。在活动中,可以添加属性和事件。在示例中,我们添加了 "id" 属性,以便下一步可以更好地查询和监控数据,并最终通过 span.end()
完成活动并停止检测。
绑定和活动
绑定是一个可选功能,用于连接两个上下文。活动通常用于跟踪代码路径。当两个上下文需要相互联系时,绑定将非常有用。在常规编程中,通常使用回调函数来连接 API。使用 OpenTelemetry API,我们可以绑定活动,以便可以将活动上下文传递到其他异步 API 中。下面是一个简单的异步示例:
-- -------------------- ---- ------- ----- ------------- - ------------------------------ ----------------------------------------------- ------------------------------------ ----- ------ - ------------------------------------------------- ----- ---------- - -------------------------------- ------------- -- - ------------------------------------- ----------------- ----- --------- - ------------------------------- -------------------------------------------------------------------------------------- ----------- -- -- - ------------------- ---- ------- ---------------- --- -- ------ -------------------- ---- -------
在上例中,我们使用了 opentelemetry.context.with()
来创建一个新的上下文,以便我们可以将活动跟踪信息传递到异步方法中。在上例中,我们将父活动添加到该上下文中,以便我们可以在何时创建子活动。我们还使用 setTimeout()
来模拟需要异步操作的延迟。
标签
标签是一种为活动添加元数据的方法。标签通常更适合一些静态数据,例如键值对。这些元数据有助于更好地排序和查询活动信息。以下示例演示如何添加标签:
-- -------------------- ---- ------- ----- ------------- - ------------------------------ ----------------------------------------------- ------------------------------------ ----- ------ - ------------------------------------------------- ----- ---- - --------------------------- - ---------- --- ------ --- -------------------------- --- -------------------------------- - ----- ------ --- -----------
退耗和日志
退耗是一种非常有用的技术,可帮助我们发现代码中的性能瓶颈和弱点。在我们的 API 中,我们使用跟踪器(Tracer)来记录要检查的事件。 Tracer 用于记录跟踪点之间的时间差。下面是一个示例:
-- -------------------- ---- ------- ----- ------ - ------------------------------------------------- -------- ----------- - ----- ---- - ------------------------ ------ ----------- - -------- ----------- - ----- ---- - ------------------------ ------ ----------- - -------- ------------- - ----- ---- - ------------------------ -------- ----------- - ----- ---------- - ------------------------ ------- ------------ ------------ -------------- -----------------
在代码片段中,我们使用 startSpan()
API 创建了一个名为 "Parent Span" 的主跟踪器。然后,我们创建三个额外的活动,用于检查事件和命名方法。添加退耗数据到所有活动后,我们完成了 "Parent Span"。
在收集退耗数据时,还有一种非常有用的方法,即日志。日志是活动间的交流方法。开发者可以添加一些文本或结构化的数据,以便更好地理解活动的状态和上下文。以下是一个示例:
-- -------------------- ---- ------- ----- ------------- - ------------------------------ ----------------------------------------------- ------------------------------------ ----- ------ - ------------------------------------------------- ----- ---- - --------------------------- - ---------- --- ------ --- -------------------- --------- ----------------------------------- -------------------------------- - ------------- --- -------------------- --------- ------------------------------------ ------------------------- - -------------- --- -----------
总结
@opentelemetry/api 为前端工程师提供了非常方便的 API。本文档中提到的示例和方法只是冰山一角。我们还可以使用更多高级技术来更好地跟踪和监控分布式系统的状态和性能。希望这篇文章能对前端开发人员提供有价值的信息和帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedab57b5cbfe1ea0610734