راه‌اندازی instrumentation در Next.js – ثبت عملکرد، مانیتورینگ و مدیریت کدهای جانبی

Instrumentation در Next.js به شما اجازه می‌دهد ابزارهای مانیتورینگ و لاگ‌گیری را به اپلیکیشن خود متصل کنید. این مقاله نحوهٔ ایجاد فایل instrumentation، استفاده از OpenTelemetry، مدیریت کدهای جانبی، و تفکیک کدهای وابسته به runtime را بررسی می‌کند.

InstrumentationOpenTelemetryNEXT_RUNTIME

~2 دقیقه مطالعه • بروزرسانی ۵ آبان ۱۴۰۴

مقدمه


Instrumentation فرآیند ثبت رفتار و عملکرد اپلیکیشن با استفاده از کد است. این قابلیت به شما کمک می‌کند تا مشکلات را در محیط production ردیابی کرده و عملکرد سیستم را مانیتور کنید.


ساختار پیشنهادی


برای راه‌اندازی instrumentation در Next.js، فایل instrumentation.ts یا instrumentation.js را در ریشه پروژه یا داخل پوشه src ایجاد کنید.

در این فایل، تابع register را export کنید. این تابع هنگام راه‌اندازی سرور Next.js یک‌بار اجرا می‌شود.


مثال: اتصال به OpenTelemetry


import { registerOTel } from '@vercel/otel'

export function register() {
  registerOTel('next-app')
}

این کد OpenTelemetry را برای اپلیکیشن با نام next-app فعال می‌کند.


نکات مهم


  • فایل instrumentation باید در ریشه پروژه باشد، نه داخل پوشه app یا pages
  • اگر از src استفاده می‌کنید، فایل را کنار پوشه‌های pages و app قرار دهید
  • اگر از گزینه pageExtensions استفاده کرده‌اید، نام فایل instrumentation را مطابق آن تنظیم کنید

وارد کردن فایل‌های دارای اثر جانبی


گاهی لازم است فایلی را فقط به‌خاطر اثر جانبی آن وارد کنید، مثلاً برای تعریف متغیرهای سراسری. توصیه می‌شود این کار را داخل تابع register انجام دهید:

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

این روش باعث می‌شود تمام اثرات جانبی در یک نقطه متمرکز شوند و از وارد کردن ناخواسته در سطح بالا جلوگیری شود.


وارد کردن کد وابسته به runtime


تابع register در تمام محیط‌ها اجرا می‌شود. بنابراین باید کدهایی که فقط در محیط خاصی اجرا می‌شوند را به‌صورت شرطی وارد کنید:

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

  if (process.env.NEXT_RUNTIME === 'edge') {
    await import('./instrumentation-edge')
  }
}

این روش از بروز خطا در محیط‌هایی مانند Edge جلوگیری می‌کند.


جمع‌بندی


با راه‌اندازی instrumentation در Next.js می‌توانید ابزارهای مانیتورینگ را به‌صورت امن و ساختاریافته به اپلیکیشن خود متصل کنید. استفاده از فایل instrumentation.ts، مدیریت کدهای جانبی و تفکیک محیط‌های اجرایی از اصول کلیدی در این فرآیند هستند.


نوشته و پژوهش شده توسط دکتر شاهین صیامی