Instrumentation
Instrumentation bezeichnet den Prozess der Integration von Monitoring- und Logging-Tools in Ihre Anwendung mithilfe von Code. Dies ermöglicht es Ihnen, die Leistung und das Verhalten Ihrer Anwendung zu verfolgen sowie Probleme in der Produktion zu debuggen.
Konvention
Um Instrumentation einzurichten, erstellen Sie eine instrumentation.ts|js
-Datei im Stammverzeichnis Ihres Projekts (oder im src
-Ordner, falls verwendet).
Exportieren Sie dann eine register
-Funktion in der Datei. Diese Funktion wird einmalig aufgerufen, wenn eine neue Next.js-Serverinstanz gestartet wird.
Beispiel für die Verwendung von Next.js mit OpenTelemetry und @vercel/otel:
import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel('next-app')
}
import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel('next-app')
}
Ein vollständiges Implementierungsbeispiel finden Sie im Next.js mit OpenTelemetry Beispiel.
Wichtig zu wissen
- Diese Funktion ist experimentell. Um sie zu nutzen, müssen Sie explizit
experimental.instrumentationHook = true;
in Ihrernext.config.js
definieren.- Die
instrumentation
-Datei sollte sich im Stammverzeichnis Ihres Projekts befinden und nicht imapp
- oderpages
-Ordner. Bei Verwendung dessrc
-Ordners platzieren Sie die Datei dort nebenpages
undapp
.- Wenn Sie die
pageExtensions
-Konfigurationsoption verwenden, um ein Suffix hinzuzufügen, müssen Sie auch den Dateinamen derinstrumentation
-Datei entsprechend anpassen.
Beispiele
Import von Dateien mit Seiteneffekten
Manchmal kann es nützlich sein, eine Datei aufgrund ihrer Seiteneffekte in Ihren Code zu importieren. Beispielsweise könnten Sie eine Datei importieren, die eine Reihe globaler Variablen definiert, ohne die importierte Datei explizit in Ihrem Code zu verwenden. Sie hätten dennoch Zugriff auf die globalen Variablen, die das Paket deklariert hat.
Wir empfehlen, Dateien mit der JavaScript-import
-Syntax innerhalb Ihrer register
-Funktion zu importieren. Das folgende Beispiel zeigt eine grundlegende Verwendung von import
in einer register
-Funktion:
export async function register() {
await import('package-with-side-effect')
}
export async function register() {
await import('package-with-side-effect')
}
Wichtig zu wissen:
Wir empfehlen, die Datei innerhalb der
register
-Funktion zu importieren, anstatt sie oben in der Datei zu importieren. Auf diese Weise können Sie alle Seiteneffekte an einer zentralen Stelle in Ihrem Code zusammenfassen und unbeabsichtigte Folgen durch globalen Import oben in der Datei vermeiden.
Import von runtime-spezifischem Code
Next.js ruft register
in allen Umgebungen auf, daher ist es wichtig, Code, der bestimmte Laufzeitumgebungen nicht unterstützt (z.B. Edge oder Node.js), bedingt zu importieren. Sie können die Umgebungsvariable NEXT_RUNTIME
verwenden, um die aktuelle Umgebung abzufragen:
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
await import('./instrumentation-node')
}
if (process.env.NEXT_RUNTIME === 'edge') {
await import('./instrumentation-edge')
}
}
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
await import('./instrumentation-node')
}
if (process.env.NEXT_RUNTIME === 'edge') {
await import('./instrumentation-edge')
}
}