پرش به مطلب اصلی

Node.js

نصب​

npm install @sentry/node @sentry/profiling-node

اول مقداردهی، بعد بقیهٔ برنامه​

Sentry.init() باید پیش از import شدن بقیهٔ چیزها اجرا شود تا SDK بتواند http، فریم‌ورک و درایور دیتابیس شما را وصله بزند. آن را در فایل جداگانه بگذارید:

// instrument.js
import * as Sentry from "@sentry/node";
import { nodeProfilingIntegration } from "@sentry/profiling-node";

Sentry.init({
dsn: process.env.SENTRY_DSN,
environment: process.env.NODE_ENV,
release: process.env.APP_VERSION,

tracesSampleRate: 0.2,
profilesSampleRate: 1.0, // کسری از تراکنش‌های نمونه‌برداری‌شده
integrations: [nodeProfilingIntegration()],

_experiments: { enableLogs: true },
sendDefaultPii: false,
});

و پیش از برنامه بارگذاری‌اش کنید:

node --import ./instrument.js ./server.js

در CommonJS: require("./instrument.js") در همان خط اول فایل ورودی.

Express​

import "./instrument.js";
import express from "express";
import * as Sentry from "@sentry/node";

const app = express();
// … مسیرهای شما …
Sentry.setupExpressErrorHandler(app); // بعد از مسیرها، پیش از میان‌افزار خطای دیگر
app.listen(3000);

برای Fastify (Sentry.setupFastifyErrorHandler(app))، NestJS (@sentry/nestjs) و Koa هم معادل یک‌خطی وجود دارد.

لاگ​

const { logger } = Sentry;
logger.info("payment captured", { orderId, amount });
logger.error("gateway rejected", { orderId, code });

این‌ها در لاگ‌ها می‌نشینند و به ترِیس فعال گره می‌خورند.

چک‌این کران​

import * as Sentry from "@sentry/node";

const checkInId = Sentry.captureCheckIn(
{ monitorSlug: "nightly-report", status: "in_progress" },
{ schedule: { type: "crontab", value: "0 3 * * *" }, checkinMargin: 5, maxRuntime: 30, timezone: "Asia/Tehran" },
);

try {
await runNightlyReport();
Sentry.captureCheckIn({ checkInId, monitorSlug: "nightly-report", status: "ok" });
} catch (err) {
Sentry.captureCheckIn({ checkInId, monitorSlug: "nightly-report", status: "error" });
throw err;
}

برای زمان‌بندی، مهلت و آستانه‌ها به مانیتورینگ کران سر بزنید.

متریک​

Sentry.metrics.increment("checkout.attempt", 1, { tags: { plan: "pro" } });
Sentry.metrics.distribution("checkout.latency", 421, { unit: "millisecond" });

نگاه کنید به متریک.

بررسی نهایی​

Sentry.captureException(new Error("Errora smoke test"));