效能監控
檢測是使用程式碼將監控和記錄工具整合到應用程式中的過程。這讓您可以追蹤應用程式的效能和行為,並在生產環境中偵錯問題。
慣例
要設定檢測,請在專案的**根目錄**(或在使用 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
檔案應該放在專案的根目錄,而不是app
或pages
目錄內。如果您使用src
資料夾,則應將檔案放在src
內,與pages
和app
並列。- 如果您使用
pageExtensions
設定選項 來新增後綴,您也需要更新instrumentation
檔案名稱以符合。
範例
導入具有副作用的檔案
有時,因為導入檔案會產生副作用,所以在程式碼中導入檔案可能很有用。例如,您可能會導入一個定義了一組全域變數的檔案,但從未在程式碼中明確使用導入的檔案。您仍然可以存取該套件已宣告的全域變數。
我們建議您在 register
函式中使用 JavaScript 的 import
語法導入檔案。以下範例示範了在 register
函式中 import
的基本用法。
instrumentation.ts
export async function register() {
await import('package-with-side-effect')
}
注意事項
我們建議您從
register
函式內導入檔案,而不是在檔案的頂部導入。這樣做,您可以將所有副作用集中在程式碼的一個位置,並避免在檔案頂部全域導入所造成的任何非預期後果。
導入執行階段特定程式碼)的程式碼。您可以使用 NEXT_RUNTIME
環境變數來取得目前的環境。
instrumentation.tsexport async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
await import('./instrumentation-node')
}
if (process.env.NEXT_RUNTIME === 'edge') {
await import('./instrumentation-edge')
}
}
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')
}
}
這有幫助嗎?