コンテンツにスキップ

instrumentation.js

instrumentation.js|ts ファイルは、アプリケーションに可観測性ツールを統合するために使用され、パフォーマンスと動作の追跡、および本番環境での問題のデバッグを可能にします。

使用するには、ファイルをアプリケーションの**ルート**に配置するか、使用している場合は src フォルダ 内に配置します。

エクスポート

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

onRequestError (オプション)

この API は Next.js canary で利用できます。

オプションで onRequestError 関数をエクスポートして、**サーバー**エラーをカスタムの可観測性プロバイダーに追跡できます。

  • onRequestError で非同期タスクを実行している場合は、それらが await されていることを確認してください。 onRequestError は、Next.js サーバーがエラーをキャプチャしたときにトリガーされます。
  • error インスタンスは、サーバーコンポーネントのレンダリング中に発生した場合、React によって処理される可能性があるため、スローされた元のエラーインスタンスではない可能性があります。 この場合、エラーの digest プロパティを使用して、実際のエラータイプを識別できます。
instrumentation.ts
import { type Instrumentation } from 'next'
 
export const onRequestError: Instrumentation.onRequestError = async (
  err,
  request,
  context
) => {
  await fetch('https://.../report-error', {
    method: 'POST',
    body: JSON.stringify({
      message: err.message,
      request,
      context,
    }),
    headers: {
      'Content-Type': 'application/json',
    },
  })
}

パラメータ

関数は3つのパラメータを受け入れます:errorrequest、および context

export function onRequestError(
  error: { digest: string } & Error,
  request: {
    path: string // resource path, e.g. /blog?name=foo
    method: string // request method. e.g. GET, POST, etc
    headers: { [key: string]: string }
  },
  context: {
    routerKind: 'Pages Router' | 'App Router' // the router type
    routePath: string // the route file path, e.g. /app/blog/[dynamic]
    routeType: 'render' | 'route' | 'action' | 'middleware' // the context in which the error occurred
    renderSource:
      | 'react-server-components'
      | 'react-server-components-payload'
      | 'server-rendering'
    revalidateReason: 'on-demand' | 'stale' | undefined // undefined is a normal request without revalidation
    renderType: 'dynamic' | 'dynamic-resume' // 'dynamic-resume' for PPR
  }
): void | Promise<void>
  • error: キャッチされたエラー自体 (型は常に Error) と、エラーのユニーク ID である digest プロパティ。
  • request: エラーに関連付けられた読み取り専用の要求情報。
  • context:エラーが発生したコンテキスト。これは、ルーターの種類(アプリまたはページルーター)、および/または(サーバーコンポーネント('render')、ルートハンドラー('route')、サーバーアクション('action')、またはミドルウェア('middleware'))です。

ランタイムの指定

instrumentation.jsファイルはNode.jsとEdgeランタイムの両方で動作しますが、process.env.NEXT_RUNTIMEを使用して特定のランタイムをターゲットにすることができます。

instrumentation.js
export function register() {
  if (process.env.NEXT_RUNTIME === 'edge') {
    return require('./register.edge')
  } else {
    return require('./register.node')
  }
}
 
export function onRequestError() {
  if (process.env.NEXT_RUNTIME === 'edge') {
    return require('./on-request-error.edge')
  } else {
    return require('./on-request-error.node')
  }
}

バージョン履歴

バージョン変更点
v15.0.0-RConRequestErrorの導入、instrumentationの安定化
v14.0.4instrumentationのTurbopackサポート
v13.2.0instrumentationを実験的機能として導入