بازگشت به همه مطالب
DIDBAN / BLOG

مانیتورینگ خطاهای Node.js در ایران با دیدبان

راهنمای عملی ثبت و تحلیل خطاهای Node.js، اتصال release، مدیریت خطاهای async و بررسی هم‌زمان وضعیت CPU و RAM سرور با دیدبان.

۲۰ شهریور ۱۴۰۵ · جواد کاظم زاده

چرا log به‌تنهایی کافی نیست؟

در یک سرویس Node.js معمولاً خطا میان چند request، job و سرویس خارجی پخش می‌شود. یک خط ساده در فایل log ممکن است پیام را نشان دهد، اما پاسخ این پرسش‌ها را نمی‌دهد: خطا متعلق به کدام release بود؟ چه endpointی درگیر شد؟ پاسخ سرویس خارجی چه بود؟ و آیا سرور همان لحظه تحت فشار قرار داشت؟

دیدبان رخداد، stack trace و زمینه اجرای آن را کنار هم نگه می‌دارد تا زمان تشخیص کوتاه‌تر شود.

ثبت خطاهای کنترل‌شده

خطا را نزدیک مرزی ثبت کنید که context کسب‌وکار در دسترس است. برای نمونه در handler سفارش، شناسه غیرحساس سفارش، محیط اجرا و نام عملیات مفیدتر از ارسال کامل body درخواست است.

```ts try { await paymentGateway.charge(order); } catch (error) { Didban.capture(error, { tags: { operation: 'payment', environment: process.env.NODE_ENV }, extra: { orderId: order.id }, }); throw error; } ```

توکن، رمز، cookie، اطلاعات بانکی و payload کامل کاربر را ارسال نکنید. context باید برای تشخیص کافی باشد، نه یک نسخه از تمام داده‌های درخواست.

خطاهای Promise و process

در Node.js خطاهای async ممکن است از مسیر معمول middleware خارج شوند. در کنار handlerهای برنامه، رفتار `unhandledRejection` و `uncaughtException` را مشخص کنید. بعد از یک exception غیرقابل‌بازیابی، ادامه‌دادن process می‌تواند وضعیت نامعتبر ایجاد کند؛ رخداد را ثبت کنید، فرصت کوتاهی برای flush بدهید و خروج امن را به process manager بسپارید.

این handlerها جایگزین مدیریت خطا در Express، Fastify یا NestJS نیستند. خطاهای عادی باید در لایه framework ثبت و به پاسخ مناسب تبدیل شوند.

Release را به Commit متصل کنید

برای هر انتشار یک شناسه تغییرناپذیر مانند Git SHA انتخاب کنید:

```text APP_RELEASE=4f9c1a7 Docker image=api:4f9c1a7 Didban release=4f9c1a7 ```

این هماهنگی مشخص می‌کند خطا از کدام کد و کدام تصویر Docker آمده است. اگر TypeScript را bundle یا minify می‌کنید، Source Map همان release را از CI به دیدبان بفرستید.

خطای شبکه را با وضعیت سرور مقایسه کنید

Timeout همیشه به معنی کندبودن کد نیست. اشباع CPU، کمبود RAM، فشار Load، قطع سرویس خارجی یا محدودیت connection pool می‌تواند علامت مشابه ایجاد کند.

Server Agent دیدبان تاریخچه کوتاه متریک‌ها را در حافظه نگه می‌دارد و فقط برای خطاهای دسته network و server یک snapshot کم‌حجم ذخیره می‌کند. روی نمودار، خط قرمز زمان دقیق خطا را نشان می‌دهد. این هم‌زمانی به شما کمک می‌کند میان فشار منابع، مشکل شبکه و خطای منطقی تفاوت بگذارید.

چند سرور و چند محیط

سرورها در دیدبان به سازمان متصل‌اند. بنابراین می‌توانید production، staging، API، worker و سرویس‌های مستقل را جدا تعریف و در صفحه نبض سرورها بین آن‌ها جابه‌جا شوید. سقف تعداد سرورها به پلن سازمان وابسته است.

برای نام‌گذاری از الگوی ثابت استفاده کنید:

```text production-api-1 production-worker-1 staging-api-1 ```

چک‌لیست راه‌اندازی

  • یک خطای آزمایشی در staging ثبت کنید.

  • stack trace و release را بررسی کنید.

  • داده‌های حساس را ماسک کنید.

  • Agent را روی سرور نصب کنید.

  • یک timeout کنترل‌شده بسازید و نمودار زمان خطا را ببینید.

  • اعلان خطای حیاتی را آزمایش کنید.

  • پس از هر deploy یک smoke test خودکار اجرا کنید.

جمع‌بندی

مانیتورینگ مؤثر Node.js یعنی اتصال سه قطعه: exception، زمینه درخواست و وضعیت زیرساخت. دیدبان این سه بخش را برای تیم‌های ایرانی در یک جریان قابل بررسی جمع می‌کند و کمک می‌کند از پیام خطا به علت محتمل برسید.

مانیتورینگ خطاهای Node.js در ایران | دیدبان