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"));