احمد رفیعی
احمد رفیعی
خواندن ۸ دقیقه·۲ ماه پیش

در مسیر Observability، تمپو (قسمت نهم)

در ادامه‌ی پست‌های قبلی تو این پست داریم می‌ریم ابزار Grafana Tempo رو یکم بررسی کنیم و ببینیم چه کمکی به ما می‌کننه.

خب یه مروری کنیم پست‌های قبلی رو:

توصیه می‌کنم که حتما این پست‌ها رو هم مطالعه کنید. بریم که ادامه بدیم.

استک grafana tempo:

  • چیه و چه کمکی بهمون می‌کنه

یه ابزار اپن سورس برای استفاده به عنوان بک اند tracing حتی توی حجم های بالا، که توزیع شده هست و کار باهاش راحته. توی طراحی گرافانا تمپو افیشنت بودن در نظر گرفته شده و برای کار کردن فقط نیاز به یک آبجکت استورج داره. کاملا با گرافانا و میمیر و پرومتئوس و لوکی سازگاره و میتونید اونو با پروتکل های اپن سورس ترسینگ مثل Jaeger و Zipkin و OpenTelemetry استفاده کنید.

grafana tempo
grafana tempo

حالا trace اصلا چی هست؟ تریس یه جورایی بهمون مسیر کامل یک درخواست یا یک اکشن که سمت سیستم ما اومده و بین نود های مختلف چرخیده رو نشون میده، مخصوصا برای سیستم های توزیع شده و سیستم های کانتینری و ساختار های میکروسرویسی. تریس بهمون کمک میکنه تا بهتر نحوه عملکرد سیستم و ارتباط اجزاش رو ببینیم و راحت تر بتونیم bottleneck ها و مشکلات ارتباطی بین میکروسرویس هارو رفع کنیم.

تریس ها ترکیب شده‌ی یک یا چنتا span هستن.

trace
trace

به یه دونه واحد کاری توی یک تریس که یک زمان استارت نسبت یه شروع تریس داره و مدتی طول میکشه و یه اسم اجرایی داره میگیم span. معمولا span ها یه رفرنس به span والدشون دارن ( به جز اولین span توی یک تریس) و ممکنه که یه سری اتریبیوت به صورت key/value داشته باشن مثلا متد HTTP که اون span داره یا متادیتایی که اون span رو به یه سری sub-span لینک میکنه و …

grafana tempo
grafana tempo
grafana tempo
grafana tempo
  • کامپوننت‌های استک tempo
tempo component
tempo component
tempo component
tempo component

Client instrumentation:

توی پایپ لاین ترسینگ همونطور که توی دیاگرام میبینید بلاک اول اینسترومنت هست.
کلاینت نیازمند یک ابزار یا سیستم مرتبط با برنامه‌نویسی و توسعه نرم‌افزار هست که برای ردیابی و پیگیری عملکرد برنامه‌های توزیع‌شده ازش استفاده کنه. وقتی یک برنامه یا سیستم نرم‌افزاری به چندین قسمت یا سرویس مختلف تقسیم می‌شود که روی سرورها یا دستگاه‌های مختلفی در شبکه اجرا می‌شوند، ممکن است برای ردیابی و پیگیری عملکرد و رفتار این بخش‌ها نیاز به یک سیستم یا ابزار داشته باشید که امکان ثبت و نمایش جریان فعالیت‌ها و تراکنش‌ها در سراسر این اجزا را فراهم کند. که فریم ورک های مختلف برای استک های نرم افزاری مختلف وجود دارن تا این کار رو برامون انجام بدن مثلا OpenTelemetry واسه اکثر استک های معروف فریم ورک های خوبی رو داره.

OpenTelemetry
OpenTelemetry
  • Agent

حالا که تریس از اپلیکیشن در اومده باید یکی اونو بفرسته به استوریج بک اند و میتونید یه پایپ لاین درست کنید که span هارو از اپلیکیشنتون استخراج کنه و اونا رو بافر کنه و بفرسته به بک اند استورج که معمولا برای پیاده سازی های حساس‌تر که پایداری بیشتری نیاز دارن این کار و میکنن و در حالت عادی اکثر کلاینت‌ها قابلیت اینکه مستقیم بفرستن سمت تمپو رو دارن.

  • Tempo

بک اند ما تمپو هست که کار باهاش راحته و میتونه اسکیل بشه و ازش برای ذخیره و کوئری زدن روی تریس ها استفاده میکنیم.

  • Grafana

و نهایتا برای نمایش تریس ها گرافانا دیتا سورس تمپو رو به صورت built-in داره و میتونیم ازش استفاده کنیم برای کوئری زدن به تمپو و نمایش تریس ها.

grafana
grafana
  • دیزاین و کامپوننت‌‌های داخلی
Tempo Design
Tempo Design

همانطور که می‌بینید اینجا ما با دیزاینی مواجه هستیم که همانند ابزارهای دیگه استک گرافانا هست. مسیر خواندن و نوشتن مستقل که دقیقا همانند ابزارهای دیگه می‌تونیم دیپلویمنت متد داشته باشیم. در ادامه هر کدوم از کامپوننت های تمپو رو به همراه یه توضیح مختصر ازشون براتون میذارم:

  • Distributor

دیستریبیوتر span ها رو با فرمت های مختلف میگیره و اونا رو route میکنه سمت ingester ها با استفاه از هش کردن traceID و hash ring.

  • Ingester​

اینجستر تریس ها رو به بلاک تبدیل میکنه و ایندکس و bloom فیلتر میسازه و بعدش اون رو به به بک اند میفرسته.

  • Query Frontend​

مسئولیت شارد کردن فضای سرچ برای کوئری های که میان رو بر عهده داره.

  • Querier

مسئولیت پیدا کردن traceid درخواست ها توی اینجستر یا استورج بک اند با این کامپوننت هست.

  • Compactor

وظیفه این کامپوننت حرکت دادن بلاک ها به فضای ذخیره سازی و برگرداندن اونها هست با هدف کم کردن تعداد بلاک ها و بهینه تر کردن فضای ذخیره سازی و کارایی سیستم.

  • Metrics generator​

کامپوننت اختیاری هست که متریک ها رو به metric-generator میفرسته که میتونید در موردش بیشتر بخونید.

توضیح اجمالی Jaeger

جَگِر یه پلتفرم برای tracing هست که Uber Technologies اونو ارائه داده که باهاش میتونید workflow هاتون رو مانیتور کنید و اونها رو ترابل شوت کنید. ابزارهای دیگه ای مثل M3 که دیتابیس تایم‌سریز هست برای پلتفرم متریک توسط همین کمپانی توسعه داده شده که میتونید در موردش بخونید. به کمک Jaeger میشه bottleneck های پرفورمنس رو شناسایی کرد و به کمک ترس ریشه مشکل رو پیدا کرد. در ادامه لیستی از فیچرهای این ابزار رو براتون میذارم:

  • OpenTracing  -inspired data model
  • OpenTelemetry  compatible
  • Multiple built-in storage backends: Cassandra, Elasticsearch, in-memory
  • Community supported external storage backends via gRPC plugin: ClickHouse
  • System topology graphs
  • Adaptive sampling
  • Service Performance Monitoring (SPM)
  • Post-collection data processing
jaeger
jaeger

با زبان گولنگ توسعه داده شده و UI اون رو با React/Javascript زدن و به عنوان استورج بک اند از استورج های زیر میتونه استفاده کنه :

  • Cassandra 3.4+
  • Elasticsearch 5.x, 6.x, 7.x
  • Kafka
  • memory storage
  • certified grpc-plugins:
    • ClickHouse
Jaeger
Jaeger
Jaeger
Jaeger
Jaeger
Jaeger

توی پست‌های بعدی بیشتر ابزارهای مانیتورینگ و Observability رو بررسی می‌کنیم و کنار هم یاد میگیرم.

مراقب خودتون باشید. 🌹🐳🌹



خوبه که داکرمی رو تو جاهای مختلف فالو کنید. پذیرای نظرات شما هستیم.

🫀 Follow DockerMe 🫀

🔔 Follow YouTube 🔔

📣 Follow Instagram 📣

🖇 Follow LinkedIn DockerMe🖇

🔎 Follow Linkedin Ahmad Rafiee 🔎

🕊 Follow Twitter 🕊

ci cd
مشاور زیرساخت. موسس سایت آموزشی DockerMe.ir
شاید از این پست‌ها خوشتان بیاید