opentelemetry-js:JavaScript 可观测性框架,用于收集应用程序的追踪、指标和日志

OpenTelemetry JavaScript Client

分支12Tags204
当前项目代码仓暂无内容

关于本项目

这是 OpenTelemetry 的 JavaScript 版本,一个用于从应用程序中采集链路追踪、指标和日志的框架。

快速入门

OpenTelemetry JS 的多数文档均以编译后的应用程序以 CommonJS 方式运行为前提进行编写。 如需了解 ECMAScript Modules 与 CommonJS 的更多详情,请参阅 esm-support

以下内容介绍如何为基础 Web 应用程序配置链路追踪。 如需更详细的文档,请参见网站 https://opentelemetry.io/docs/instrumentation/js/

安装

NPM 上带有 latest 标签的依赖项之间应相互兼容。 更多信息,请参见下方的版本兼容矩阵

npm install --save @opentelemetry/api
npm install --save @opentelemetry/sdk-node
npm install --save @opentelemetry/auto-instrumentations-node

注意: auto-instrumentations-node 是来自 opentelemetry-js-contrib 的元包,它提供了一种初始化多个 Node.js 插桩的便捷方式。

设置追踪

// tracing.js

'use strict'

const process = require('process');
const opentelemetry = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const { ATTR_SERVICE_NAME } = require('@opentelemetry/semantic-conventions');

// configure the SDK to export telemetry data to the console
// enable all auto-instrumentations from the meta package
const traceExporter = new ConsoleSpanExporter();
const sdk = new opentelemetry.NodeSDK({
  resource: resourceFromAttributes({
    [ATTR_SERVICE_NAME]: 'my-service',
  }),
  traceExporter,
  instrumentations: [getNodeAutoInstrumentations()]
});

// initialize the SDK and register with the OpenTelemetry API
// this enables the API to record telemetry
sdk.start();

// gracefully shut down the SDK on process exit
process.on('SIGTERM', () => {
  sdk.shutdown()
    .then(() => console.log('Tracing terminated'))
    .catch((error) => console.log('Error terminating tracing', error))
    .finally(() => process.exit(0));
});

运行你的应用程序

node -r ./tracing.js app.js

上面的示例会将关于您的 Node.js 应用程序的自动插桩遥测数据输出到控制台。如需更深入的示例,请参阅入门指南

调试设置

按照上述方式插桩的应用程序可能未表现出预期行为。 例如,如果应用程序本应将数据发送到 Open Telemetry collector,但该 collector 可能没有收到任何数据。可以通过启用诊断日志记录器来深入了解此类问题:

// Added as additional configuration to tracing.js

const {
  diag,
  DiagConsoleLogger,
  DiagLogLevel
} = require('@opentelemetry/api');
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);

库作者

如果你是一位希望将 OpenTelemetry 集成到库中的库作者,请参见文档。作为库作者,你只能依赖公共 API 中公开的属性和方法,这一点非常重要。如果你使用了 SDK 中任何未正式纳入公共 API 的属性或方法,当应用所有者采用不同的 SDK 实现时,你的库可能会失效。

支持的运行时

平台版本 支持
Node.js v24 ✔️
Node.js v22 ✔️
Node.js v20 ✔️
Node.js v18 ✔️
更早的 Node 版本 参见 Node 支持
Web 浏览器 参见下文 浏览器支持

Node 支持

仅支持 Node.js Active 或 Maintenance LTS 版本。 早期版本的 Node 可能可以工作,但 OpenTelemetry 未对其进行测试,也不保证能够正常工作。

浏览器支持

Important

浏览器客户端插桩处于实验阶段,并且大部分尚未明确定义。如果你有兴趣 参与贡献,请联系 Client Instrumentation SIG

OpenTelemetry 不针对特定浏览器 / 运行时的版本进行定义,而是根据底层使用的语言特性来确定最低支持版本。

当前最低语言特性支持级别设为 ECMAScript 2022,这些特性在所有现代浏览器 / 运行时中均可用。

这意味着,如果你的目标环境或最终用户使用不支持 ES2022 的浏览器 / 运行时,你需要转译代码,并为缺失的特性提供必要的 polyfill,以确保与目标环境兼容。由于使用不支持 ES2022 的浏览器或运行时而产生的任何支持问题,都将以“不修复”状态关闭。

随着项目演进以及底层语言特性的发展,这一最低支持级别可能会发生变化。

TypeScript 支持

OpenTelemetry JavaScript 使用 TypeScript v5.2.2 构建。如果你有依赖它的 TypeScript 项目(应用、库、插桩等), 我们建议使用相同或更高版本来编译该项目。

OpenTelemetry JavaScript 将遵循 DefinitelyType 的 TypeScript 支持政策,该政策设置了 2 年的支持窗口。对于 2 年以前的 TypeScript 版本,OpenTelemetry JavaScript 将在次要版本中停止支持。

包版本兼容性

OpenTelemetry 以一组不同包的形式发布,分为三类:API、稳定版 SDK 和实验性包。 API 位于 /api,稳定版 SDK 包位于 /packages 目录,实验性包列于 /experimental/packages 目录。 实验目录中也可能包含用于实验性信号的 API 包。 所有稳定版包均以同一版本发布,所有实验性包也以同一版本发布。 下表说明了各组包中哪些版本预期可以配合使用。

稳定版包 实验性包
2.0.x 0.200.x
1.30.x 0.57.x
1.29.x 0.56.x
1.28.x 0.55.x
1.27.x 0.54.x
1.25.x 0.52.x
旧版本兼容性矩阵
稳定版包 实验性包
1.24.x 0.51.x
1.23.x 0.50.x
1.22.x 0.49.x
1.21.x 0.48.x
1.20.x 0.47.x
1.19.x 0.46.x
1.18.x 0.45.x
1.17.x 0.43.x, 0.44.x
1.16.x 0.42.x
1.15.x 0.41.x
1.14.x 0.40.x
1.13.x 0.39.x
1.12.x 0.38.x
1.11.x 0.37.x
1.10.x 0.36.x
1.9.x 0.35.x
1.8.x(此版本及更高版本针对指标需要 API >=1.3.0)0.34.x
1.7.x 0.33.x
1.6.x 0.32.x
1.5.x 0.31.x
1.4.x 0.30.x
1.3.x 0.29.x
1.2.x 0.29.x
1.1.x 0.28.x
1.0.x 0.27.x
1.0.x(此版本及更高版本针对追踪需要 API >=1.0.0)0.26.x

版本管理

每个包的当前版本均可在该模块对应的 package.json 文件中找到。更多详细信息,请参阅规范中的版本与稳定性文档。

功能状态

信号 API 状态 SDK 状态
追踪 稳定 稳定
指标 稳定 稳定
日志 开发中 开发中

有关功能支持的详细分解,请参阅规范合规矩阵

贡献

我们非常欢迎您的参与!使用 up-for-grabsgood first issue 标签即可开始参与项目。有关如何构建和修改本项目的说明,请参阅 CONTRIBUTING 指南。

我们每周都会召开 SIG 会议!会议详情和纪要请参见社区页面

维护者

关于维护者角色的更多信息,请参阅社区仓库

审批者

此外,浏览器 SIG 维护者 会被授予浏览器目标包的审批者角色,具体以本仓库的 CODEOWNERS 文件中的定义为准。

关于审批者角色的更多信息,请参阅社区仓库

问题分类者

本团队成员拥有对 opentelemetry-js.git 和 opentelemetry-js-contrib.git 的问题分类权限。

  • N/A

如需了解问题分类者角色的更多信息,请参阅社区仓库

Contrib 问题分类者

本团队成员拥有对 opentelemetry-js-contrib.git 的问题分类权限。 通常,本团队成员是 contrib 仓库中一个或多个包的组件负责人

如需了解问题分类者角色的更多信息,请参阅社区仓库

荣誉成员

有关荣誉成员角色的更多信息,请参阅 社区仓库

感谢所有贡献者!

仓库贡献者

API

描述
@opentelemetry/api 该包为 OpenTelemetry 核心链路追踪和指标模型提供 TypeScript 接口、枚举以及空操作实现。它适用于服务端和浏览器环境。
@opentelemetry/core 该包为 OpenTelemetry API 中的链路追踪和指标提供默认实现和空操作实现。它适用于服务端和浏览器环境。

实现 / SDKs

描述
@opentelemetry/sdk-trace 该模块提供对插桩和 span 创建的完全控制。默认不会加载 async_hooks 或任何插桩。适用于服务端和浏览器场景。
@opentelemetry/sdk-metrics 该模块提供用于上报时间序列数据的测量器和计量器。

兼容导出器

OpenTelemetry 与厂商无关,可通过多种导出器实现将数据上传至任意后端。尽管 OpenTelemetry 已支持许多后端,供应商/用户也可以为专有或非官方支持的后端实现自己的导出器。

可查阅 OpenTelemetry registry 获取可用导出器的列表。

插桩

OpenTelemetry 可以使用插桩自动收集追踪数据。

如需为未包含在此列表中的模块申请自动追踪支持,请提交 issue。此外,供应商/用户可以自行编写插桩

目前,OpenTelemetry 支持以下自动追踪:

Node 插桩

核心
Contrib

这些插桩托管在 https://github.com/open-telemetry/opentelemetry-js-contrib/tree/master/plugins/node

Web 插桩

核心
Contrib

这些插桩托管在 https://github.com/open-telemetry/opentelemetry-js-contrib/tree/master/plugins/web

Shims

描述
@opentelemetry/shim-opentracing OpenTracing shim 允许现有的 OpenTracing 插桩上报至 OpenTelemetry

相关链接

许可证

Apache 2.0 - 更多信息请参阅 LICENSE

项目介绍

OpenTelemetry JavaScript 客户端【此简介由AI生成】

定制我的领域
513.46 K1.16 K访问 GitHub