دیتاداگ: پیشفرضت رو بذار روی SSI
خلاصهٔ کاملتر
دیتاداگ تو یه پست تازه سراغ سؤالی رفته که تیمهای بزرگ همیشه باهاش درگیرن: برای فرستادن تریس به APM، ابزارگذاری (instrumentation) رو دستی انجام بدیم یا بسپریم به ایجنت؟ به گفتهٔ نویسنده، آمادهکردن یه استک برای distributed tracing معمولاً هفتهها طول میکشه و برای ناوگانهای بزرگِ چندزبانه میتونه به ماهها برسه، چون باید به هر سرویس کتابخانهٔ tracer اضافه و تنظیم بشه و سرویس دوباره دیپلوی بشه — اون هم هماهنگ با تقویم انتشار هر تیم.
قبل از هر چیز یه سوءتفاهم رایج رو صاف میکنه: auto-instrumentation و SSI یکی نیستن. auto-instrumentation قابلیت خودِ tracer ـه؛ وقتی داخل اپلیکیشن لود شد، با کتابخونههای موجود مثل وبفریمورک، کلاینت دیتابیس، کش و صف پیام یکپارچه میشه و خودکار span میسازه. اما Single Step Instrumentation فقط روشِ رسوندن tracer به اپلیکیشنه: ایجنت دیتاداگ رانتایمهای پشتیبانیشده رو روی هاست تشخیص میده و tracer رو موقع استارت پروسه تزریق میکنه. یعنی انتخاب بین SSI و دستی، انتخاب روش نصبه نه رویکرد tracing.
سه جا هست که SSI به دیوار میخوره. سرویسهای Go که به باینری استاتیک کامپایل میشن و چیزی برای تزریق باقی نمیذارن، پس فقط dd-trace-go دستی جواب میده. نسخههای رانتایم خارج از بازهٔ پشتیبانی که SSI بیصدا ردشون میکنه. و پلتفرمهایی مثل Amazon ECS که کنترل ایجنت در سطح هاست رو نداری. پیشنهاد نویسنده سادهست: اول SSI رو روی کل ناوگان فعال کن؛ هر سرویسی که تو APM ظاهر نشد، همونیه که کار دستی میخواد.
custom instrumentation اما یه تصمیم جداست و روی هر روش نصبی سواره. auto-instrumentation تا مرز فریمورک میبینه و هرچی داخل هندلر میگذره — چک تقلب، محاسبهٔ قیمت، خوندن feature flag — براش یه span مات و یکپارچهست. دو وقت این ماتی آزار میده: وقتی یه اندپوینت کنده و flame graph جزئیاتی نمیده، و وقتی میخوای تگهای کسبوکاری مثل user.tier یا order.value روی span بذاری تا بپرسی مثلاً مشتریهای premium تأخیر بیشتری میبینن یا نه. نویسنده یادآوری میکنه که نگهداری این کد اضافه هزینهٔ عملیاتی داره.
نکات کلیدی:
- SSI روش نصب tracer ـه، نه یه رویکرد جدید tracing؛ auto-instrumentation تو هر دو حالت یکیه
- ایجنت دیتاداگ tracer رو موقع استارت پروسه تزریق میکنه، بدون تغییر کد یا بیلد
- زمان رسیدن به اولین تریس از هفتهها و ماهها به چند دقیقه میرسه
- Go، نسخههای رانتایم پشتیبانینشده و Amazon ECS همچنان ابزارگذاری دستی میخوان
- custom instrumentation برای دید داخل هندلر و تگهای کسبوکاری روی span
- SSI روی هاست لینوکسی، داکر و کوبرنتیز برای Java، Python، Node.js، Ruby، PHP و .NET در دسترسه




