Next.js 如何使用 OpenTelemetry?

文章导读
Previous Quiz Next 什么是 OpenTelemetry? OpenTelemetry 是一个开源框架,用于收集和分析应用程序的遥测数据。它通过提供一组 API 和 SDK 来实现 instrumentation 和收集遥测数据。OpenTel
📋 目录
  1. 什么是 OpenTelemetry?
  2. 在 Next.js 中设置 OpenTelemetry
  3. 为 Instrumentation 创建 Spans
A A

Next.js - 使用 OpenTelemetry



Previous
Quiz
Next

什么是 OpenTelemetry?

OpenTelemetry 是一个开源框架,用于收集和分析应用程序的遥测数据。它通过提供一组 API 和 SDK 来实现 instrumentation 和收集遥测数据。OpenTelemetry 是一个标准化的工具,支持多种语言、框架和后端。

为什么使用它?

  • 当应用程序变得更加复杂时,识别和诊断可能出现的问题将变得困难。OpenTelemetry 提供 observability 工具来跟踪并洞察应用程序的行为。
  • Next.js 开箱即用支持 OpenTelemetry instrumentation,这意味着 Next.js 本身已经进行了 OpenTelemetry instrumentation。

在 Next.js 中设置 OpenTelemetry

直接在 Next.js 中设置 OpenTelemetry 相当困难。因此,Next.js 提供了一个包 '@vercel/otel' 来简化设置过程。请查看以下步骤。

步骤 1:安装包

要在 Next.js 应用程序目录中安装该包,请运行以下命令。

npm install @vercel/otel @opentelemetry/sdk-logs @opentelemetry/api-logs @opentelemetry/instrumentation

步骤 2:设置 Instrumentation 文件

下一步是在项目根目录中创建一个自定义的 instrumentation.ts(或 .js)文件。此文件将包含用于 instrumentation 应用程序的代码。请查看下面的代码。

// /instrumentation.ts

import { registerOTel } from '@vercel/otel'
 
export function register() {
  registerOTel({ serviceName: 'next-app' })
}

步骤 3:测试 Instrumentation

要测试 instrumentation,您需要一个带有兼容后端的 OpenTelemetry collector。您可以使用 Node.js 的 OpenTelemetry Collector,它是一个轻量级、开源且生产就绪的 collector。我们在这个仓库的应用程序中使用 docker-compose 运行了 collector。它生成了以下指标。

Next.js OpenTelemetry Metrics

为 Instrumentation 创建 Spans

在 OpenTelemetry 中,span 是应用程序中可以被追踪的工作单元或操作。换句话说,它是一个计时操作,可用于跟踪应用程序的性能。可以使用 OpenTelemetry API 创建 spans。请考虑以下代码片段。

trace.getTracer('nextjs-example')
.startActiveSpan('fetchGithubStars', async (span) => {
    try {
    return await getValue()
    } finally {
    span.end()
    }
})
  • 这将创建一个名为 'fetchGithubStars' 的 span。
  • span 将在函数开始时启动,并在操作完成或失败时结束
  • 这将测量获取 GitHub stars 所需的时间