معرفی
گرافانا تمپو (Grafana Tempo) یک بکاند متنباز برای ذخیرهسازی و جستوجوی تریسهای توزیعشده (Distributed Tracing) است. تریس توزیعشده، مسیر یک درخواست را هنگام عبور از سرویسها، پایگاههای داده، صفها و APIهای مختلف ثبت میکند. هر بخش از این مسیر یک اسپن (Span) است؛ یعنی رکوردی از یک عملیات مشخص، مانند فراخوانی سرویس یا اجرای یک پرسوجوی پایگاه داده. مهمترین در مورد این ابزار عبارتاند از:
دریافت داده و ذخیرهسازی شیءگرا: تمپو معمولاً داده تریس را از ابزارهایی مانند OpenTelemetry دریافت میکند و برای نمایش و بررسی آن با Grafana یکپارچه میشود. Tempo میتواند داده را در فضای ذخیرهسازی شیء (Object Storage) نگه دارد؛ انتخاب بکاند ذخیرهسازی به هزینه، پیچیدگی استقرار، حجم تریس و سیاست نگهداری داده بستگی دارد.
جایگاه در پشته مشاهدهپذیری: مهندسان دواپس، مهندسان کلود، توسعهدهندگان بکاند و تیمهای پلتفرم از Tempo برای عیبیابی درخواستهای بینسرویسی استفاده میکنند. Tempo بهتنهایی جایگزین پایش متریک یا مدیریت لاگ نیست؛ معمولاً در کنار Prometheus برای متریکها، Loki برای لاگها و Grafana برای مشاهده دادهها به کار میرود.
Tempo برای چه تیمهایی مناسب است؟
Tempo زمانی ارزش بیشتری دارد که یک درخواست از چند سرویس، کانتینر یا وابستگی خارجی عبور میکند و یافتن منشأ خطا یا تأخیر با لاگ و متریک بهتنهایی دشوار است. پیش از انتخاب، باید برای ابزارگذاری سرویسها، ارسال تریس، انتقال درست شناسه تریس، انتخاب فضای ذخیرهسازی و تعیین سیاست sampling (نمونهبرداری) و retention (مدت نگهداری) برنامه داشته باشید. ثبت تریس بیشتر و نگهداری طولانیتر، هزینه ذخیرهسازی و بار عملیاتی را افزایش میدهد.
جایگزینها و معیار انتخاب
جایگزینها و معیار انتخاب این ابزار در ادامه بررسی شدهاند:
Jaeger: گزینهای شناختهشده برای تریس توزیعشده است و برای تیمهایی مناسب است که اکوسیستم و الگوی استقرار آن را از قبل دارند.
Zipkin: برای سناریوهای سادهتر تریس و تیمهایی که به امکانات پایه جستوجو و مشاهده مسیر درخواست نیاز دارند، قابل بررسی است؛ در حالی که Tempo با TraceQL و یکپارچگی با Grafana جستوجوی تحلیلیتری ارائه میدهد.
SigNoz: یک محصول مشاهدهپذیری یکپارچه برای تریس، متریک و لاگ ارائه میدهد و برای تیم کوچکی که میخواهد اجزای کمتری را جداگانه مدیریت کند، انتخاب سادهتری است.
این ابزار را با نامهای دیگری نیز میشناسند:
- تمپو
- Tempo
ویژگیهای کلیدی
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
ذخیرهسازی تریسهای توزیعشده
تریسهای تولیدشده در سرویسهای مختلف را دریافت و نگهداری میکند تا مسیر کامل یک درخواست بین اجزای سامانه قابل بررسی باشد.
-
پشتیبانی از OpenTelemetry
میتواند داده تریس ارسالشده با پروتکلها و ابزارهای رایج OpenTelemetry را دریافت کند؛ در نتیجه وابستگی تیم به کتابخانه اختصاصی کاهش مییابد.
-
یکپارچگی با Grafana
تریسها در Grafana قابل جستوجو و مشاهده هستند. رفتن از تریس به متریکها و لاگهای مرتبط به پیکربندی datasourceها، نگاشت شناسهها و ابزارگذاری درست سرویسها وابسته است.
-
ذخیرهسازی شیءگرا
برای نگهداری داده تریس از فضای ذخیرهسازی شیءگرا پشتیبانی میکند؛ رویکردی مناسب برای سامانههایی با حجم بالای تریس.
-
جستوجوی TraceQL
زبان پرسوجوی TraceQL امکان جستوجوی تریسها بر پایه ویژگیهای اسپنها، مدتزمان، وضعیت خطا و روابط میان سرویسها را فراهم میکند.
-
مقیاسپذیری برای محیطهای توزیعشده
میتوان آن را متناسب با حجم تریس و معماری عملیاتی تیم، از نصب ساده تا استقرار توزیعشده، اجرا کرد.
کاربردها
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
یافتن منشأ کندی یک درخواست
وقتی پاسخ یک API کند است، تیم میتواند تریس همان درخواست را بررسی کند و ببیند تأخیر در کدام سرویس، پایگاه داده یا فراخوانی خارجی رخ داده است.
-
عیبیابی خطا در معماری میکروسرویس
برای درخواستهایی که میان چند سرویس جابهجا میشوند، Tempo زنجیره اسپنها را نمایش میدهد تا نقطه شکست و سرویس مسئول مشخص شود.
-
پیوند دادن لاگ، متریک و تریس
تیم میتواند هنگام مشاهده هشدار یا افت عملکرد در Grafana، دادههای متریک و لاگ را با تریس همان بازه زمانی کنار هم بررسی کند.
-
تحلیل خطاهای پراکنده در سرویسهای ابری
وقتی خطا فقط برای بخشی از درخواستها رخ میدهد، شناسه تریس زمانی به دنبالکردن مسیر همان درخواست کمک میکند که میان سرویسها درست منتقل شده و تریس ثبت و قابل جستوجو باشد.
ابزارهای جایگزین
پرسشهای رایج درباره گرافانا تمپو
اگر درباره این ابزار پرسشی دارید، ممکن است پاسخ آن را در میان موارد زیر پیدا کنید.
گرافانا تمپو چه تفاوتی با Grafana دارد؟
Grafana ابزار مشاهده و ساخت داشبورد است، اما Tempo بکاند ذخیرهسازی و جستوجوی تریس است. معمولاً Tempo داده تریس را نگه میدارد و Grafana آن را نمایش میدهد.
آیا برای استفاده از Tempo باید OpenTelemetry یاد بگیرم؟
برای راهاندازی اصولی، آشنایی با OpenTelemetry بسیار مفید است؛ چون باید ابزارگذاری (instrumentation) سرویسها را انجام دهید تا تریس تولید و ارسال شود.
آیا Tempo جای Prometheus یا Loki را میگیرد؟
خیر. Tempo برای تریس است، Prometheus معمولاً برای متریک و Loki برای لاگ استفاده میشود. این ابزارها در یک سامانه مشاهدهپذیری مکمل هم هستند.
Tempo برای چه نوع معماریهایی مفیدتر است؟
بیشترین ارزش را در معماریهای میکروسرویس، سامانههای توزیعشده و سرویسهایی دارد که یک درخواست از چند جزء عبور میکند. برای یک برنامه کوچک تکسرویسی ممکن است راهکار سادهتری کافی باشد.
آیا Tempo متنباز است؟
بله، Grafana Tempo یک پروژه متنباز است. همچنین میتوان از نسخه میزبانیشده آن در Grafana Cloud استفاده کرد که مدل هزینه آن با اجرای خودمیزبان متفاوت است.
چه عواملی هزینه و کیفیت استفاده از Tempo را تعیین میکنند؟
کیفیت عیبیابی به ابزارگذاری درست سرویسها و انتقال شناسه تریس وابسته است. حجم تریس، سیاست sampling، مدت retention، نوع فضای ذخیرهسازی و ویژگیهای ثبتشده در اسپنها بر هزینه، سرعت جستوجو و ارزش عملی داده اثر میگذارند.
تیمهای ایران پیش از انتخاب Grafana Cloud چه چیزی را بررسی کنند؟
امکان دسترسی و پرداخت، محل نگهداری داده، الزامات امنیتی سازمان و هزینه عملیاتی گزینه خودمیزبان را بررسی کنید. انتخاب میان Cloud و اجرای خودمیزبان باید با محدودیتهای فنی و سیاست داده سازمان هماهنگ باشد.