پیامک، تلگرام یا بله؟ انتخاب کانال هشدار بدون خستگی از هشدار
کدوم هشدارهای قطعی با پیامک برن و کدوم با تلگرام یا بله، چطور بر اساس فوریت مسیریابی کنیم و چطور هشدارهای مهم زیر هشدارهای بیمورد گم نشن.
وقتی یه صفحه چهار ثانیه طول میکشه تا باز بشه و درخواست از یه gateway، سه سرویس، یه کش و دو دیتابیس رد شده، لاگ هر جزء یه چیز کوچیکی میگه و هیچکدوم نمیگه اون چهار ثانیه کجا رفت. Tracing توزیعشده کل سفر یه درخواست رو ثبت میکنه، تا مرحلهی کند یا خراب به چشم بیاد.
noc724 سایت، سرور و APIهای شما رو شبانهروز چک میکنه و همون لحظهای که چیزی خراب شد با پیامک، تلگرام یا بله خبرتون میکنه.
یه span یه واحد کار رو ثبت میکنه: یه تماس HTTP، یه کوئری دیتابیس، یه جستجوی کش. هر کدوم زمان شروع، مدت، اسم، ویژگیها (مثل http.status_code یا db.statement) و وضعیت داره. spanها تودرتو هستن: span «رسیدگی به پرداخت» شامل spanهای فرزند «رزرو موجودی»، «شارژ کارت» و «ارسال رسید» هست.
GET /checkout 1,840 ms
├── auth.verify_token 12 ms
├── inventory.reserve 210 ms
│ └── SELECT ... FROM stock 190 ms
├── payments.charge 1,520 ms <- the slow part
│ └── POST gateway /charge 1,505 ms
└── email.queue_receipt 9 msبا خوندن چنین traceی، گفتوگو با یه نگاه از «سایت کنده» به «تماس با درگاه پرداخت ۱٫۵ ثانیه طول میکشه» میرسه.
برای اینکه spanهای سرویسهای مختلف به یه trace بپیوندن، هر درخواست خروجی زمینهی trace رو با خودش میبره. هدر استاندارد W3C اینشکلیه:
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01شامل trace ID، شناسهی span والد و یه پرچم نمونهبرداریه. کتابخانههای ابزارگذاری برای کلاینتها، سرورها و صفهای پیام رایج، اون رو خودکار اضافه میکنن و میخونن. جزئی که این هدر رو جا بندازه، trace رو تیکهتیکه میکنه؛ یه علت رایج spanهای «گمشده».
trace گرفتن از همهی درخواستها در یه سیستم شلوغ گرونه. راهبردهای رایج:
OpenTelemetry (OTel) برای بیشتر زبانها و فریمورکها SDK و ابزارگذاری خودکار ارائه میده. یه تنظیم معمولی:
export OTEL_SERVICE_NAME=checkout
export OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317GET /orders/{id}، نه GET /orders/58114.traceها وقتی شروع میشن که درخواست به کد ابزارگذاریشدهی شما برسه. نمیتونن خرابی DNS، گواهی منقضی یا مشکل شبکهای رو نشون بدن که جلوی رسیدن درخواستها رو میگیره. برای اون نگاه بیرونی، مانیتورینگ آپتایم و API بیرونی رو سر جاش نگه دارید و از زمانهای پاسخی که از چند شهر ثبت میکنه استفاده کنید تا ببینید کندی داخل سیستم شماست یا در مسیر رسیدن بهش.
کمتر فوری. یه برنامهی تکی معمولاً با لاگ خوب و یه profiler عیبیابی میشه. tracing وقتی میارزه که درخواستها از مرز پروسسها رد بشن: صفها، سرویسهای جدا، APIهای بیرونی.
سربار ابزارگذاری مدرن معمولاً کمه و نمونهبرداری هزینهی ارسال رو پایین نگه میداره. قبل از اجرای گسترده، توی محیط خودتون اندازهاش بگیرید.
نقش یکسانی دارن: هر چیزی که یه درخواست انجام داده رو به هم وصل میکنن. trace ID یه قالب استاندارد داره و ابزارهای tracing اون رو میفهمن؛ خیلی از تیمها همون رو بهعنوان request ID استفاده میکنن.
نویسنده
تیم noc724
تیم فنی مانیتورینگ آپتایم
ما noc724 رو میسازیم و اداره میکنیم؛ سرویس مانیتورینگ آپتایمی که سایت، سرور و API رو از چند شهر ایران چک میکنه. این راهنماها از مشکلهایی میان که خودمون و کاربرهامون موقع آنلاین نگه داشتن سرویسها باهاشون روبهرو میشیم.
تماس با تیمتخصص:مشاهدهپذیری
کدوم هشدارهای قطعی با پیامک برن و کدوم با تلگرام یا بله، چطور بر اساس فوریت مسیریابی کنیم و چطور هشدارهای مهم زیر هشدارهای بیمورد گم نشن.
چرا مانیتورهای آپتایم هشدار اشتباه میدن (اختلال شبکه، timeout، محدودیت نرخ، تغییر محتوا) و تنظیماتی که اینها رو حذف میکنه و هشدار واقعی رو سریع نگه میداره.
چطور یه چرخهی آنکال ساده و سیاست ارجاع هشدار بچینیم که هر هشدار حیاتی جواب داده بشه، بدون اینکه یه تیم کوچیک فرسوده بشه.