跳到内容
页面路由器指南集成监控工具

如何设置集成监控工具

集成监控工具是指使用代码将监控和日志工具集成到应用程序中的过程。这使您能够跟踪应用程序的性能和行为,并调试生产中的问题。

约定

要设置集成监控工具,请在项目的根目录(如果使用 src 文件夹,则在其内部)创建 instrumentation.ts|js 文件。

然后,在该文件中导出一个 register 函数。当新的 Next.js 服务器实例启动时,此函数将被调用一次。

例如,将 Next.js 与 OpenTelemetry@vercel/otel 一起使用。

instrumentation.ts
import { registerOTel } from '@vercel/otel'
 
export function register() {
  registerOTel('next-app')
}

有关完整的实现,请参阅 Next.js 与 OpenTelemetry 示例

须知:

  • instrumentation 文件应该位于项目的根目录,而不是 apppages 目录中。如果您使用的是 src 文件夹,则将文件放在 src 文件夹中,与 pagesapp 并列。
  • 如果您使用 pageExtensions 配置选项添加后缀,您还需要更新 instrumentation 文件名以匹配。

示例

导入具有副作用的文件

有时,导入代码中的文件可能很有用,因为它会产生副作用。例如,您可能导入一个定义了一组全局变量的文件,但从不在代码中显式使用导入的文件。您仍然可以访问该包声明的全局变量。

我们建议在您的 register 函数中使用 JavaScript import 语法导入文件。以下示例演示了 register 函数中 import 的基本用法。

instrumentation.ts
export async function register() {
  await import('package-with-side-effect')
}

须知

我们建议从 register 函数内部导入文件,而不是在文件顶部导入。通过这样做,您可以将所有副作用集中在代码中的一个位置,并避免从文件顶部全局导入造成的任何意外后果。

导入特定运行时的代码

Next.js 在所有环境中调用 register,因此有条件地导入任何不支持特定运行时(例如 Edge 或 Node.js)的代码非常重要。您可以使用 NEXT_RUNTIME 环境变量获取当前环境。

instrumentation.ts
export async function register() {
  if (process.env.NEXT_RUNTIME === 'nodejs') {
    await import('./instrumentation-node')
  }
 
  if (process.env.NEXT_RUNTIME === 'edge') {
    await import('./instrumentation-edge')
  }
}