برنامه نویسی

روز ششم – ردیابی توزیع شده با جیگر

Summarize this content to 400 words in Persian Lang

ردیابی توزیع شده

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

چرا ردیابی در میکروسرویس ها مهم است؟

در یک برنامه یکپارچه، اشکال زدایی و بهینه سازی عملکرد نسبتاً ساده است زیرا همه چیز در یک مکان است. اما در یک محیط میکروسرویس، یک درخواست کاربر ممکن است از چندین سرویس عبور کند – هر سرویس به طور بالقوه روی سرور متفاوتی اجرا می شود، به زبانی متفاوت نوشته شده و توسط تیمی متفاوت مدیریت می شود. ردیابی توزیع شده مزایای زیر را ارائه می دهد:

تعیین تاخیر: وقتی یک درخواست بیشتر از حد انتظار طول می کشد، ردیابی می تواند نشان دهد که کدام سرویس ها یا مراحل فرآیند مسئول تاخیر هستند.

درک وابستگی ها: ردیابی وابستگی‌های بین سرویس‌ها را ترسیم می‌کند و نحوه تعامل آنها را نشان می‌دهد.

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

چگونه ردیابی کار می کند

برای تنظیم ردیابی، دو مرحله اولیه ضروری است: کد ابزار دقیق و استقرار زیرساخت های ردیابی.

ابزار دقیق:

ابزار دقیق فرآیند افزودن کدی است که داده‌های ردیابی (مانند تأخیر و جریان درخواست) را در برنامه ضبط می‌کند. این کد “span” را تولید می‌کند و به آنها شناسه‌های منحصربه‌فرد اختصاص می‌دهد تا درخواست‌ها را هنگام جریان بین سرویس‌های مختلف ردیابی کنند.
دهانه ها واحدهای ضروری در ردیابی هستند. آنها عملیات فردی را در یک درخواست نشان می دهند. به عنوان مثال، درخواستی که از سه سرویس عبور می کند دارای سه دهانه خواهد بود که هر کدام مربوط به یک سرویس است.

OpenTelemetry یک استاندارد محبوب و بی طرف از فروشنده برای اجرای ردیابی است. این برنامه از زبان های برنامه نویسی مختلف پشتیبانی می کند و به خوبی با باطن های مختلف ردیابی ادغام می شود.

زیرساخت ردیابی:

جیگر یک ابزار منبع باز است که اغلب برای جمع آوری، ذخیره و تجسم داده های ردیابی استفاده می شود.
زیرساخت های Jaeger معمولاً شامل موارد زیر است:

عامل: با برنامه برای جمع آوری ردپاها مستقر شده است. عامل داده های ردیابی را از برنامه دریافت می کند و آن را به جمع کننده ارسال می کند.

گردآورنده: ردپاهایی را از چندین عامل جمع می کند و آنها را پردازش می کند.

پشتیبان ذخیره سازی: آثار پردازش شده را ذخیره می کند. Jaeger از پشتیبان های مختلف ذخیره سازی مانند Elasticsearch یا Cassandra برای عملکرد بالا پشتیبانی می کند.

رابط کاربری (UI): به کاربران امکان می دهد ردیابی ها را جستجو، تجسم و تجزیه و تحلیل کنند.

یک سناریوی مثال: پیاده سازی ردیابی در یک برنامه میکروسرویس

فرض کنید یک اپلیکیشن تجارت الکترونیک دارید که با استفاده از معماری میکروسرویس ساخته شده است، که در آن هر عملکرد اصلی (ورود، پرداخت، کاتالوگ و غیره) یک سرویس جداگانه است. جریان درخواست زیر را در نظر بگیرید:

سرویس ورود یک کاربر را احراز هویت می کند.

خدمات کاتالوگ موارد را برای کاربر واکشی می کند.

خدمات پرداخت پرداخت را پردازش می کند.

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

Jaeger: معماری و راه اندازی

معماری Jaeger برای مدیریت و مدیریت اثربخش در یک محیط مقیاس پذیر طراحی شده است. در اینجا به تفکیک اجزای آن می پردازیم:

عامل:

عامل Jaeger معمولاً به عنوان یک شبح در همان میزبانی که برنامه کاربردی است مستقر می شود.
به دهانه های منتشر شده توسط کد ابزاری برنامه گوش می دهد و آنها را به جمع کننده ارسال می کند.
با قرار دادن عامل در نزدیکی برنامه، Jaeger تأخیر شبکه را برای ارسال داده های ردیابی کاهش می دهد.

گردآورنده:

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

پشتیبان ذخیره سازی:

Jaeger برای نگهداری طولانی مدت داده ها و پشتیبانی از پرس و جو به حافظه خارجی متکی است.
Elasticsearch معمولاً استفاده می شود زیرا امکان بازیابی سریع داده های ردیابی را فراهم می کند، اگرچه گزینه های دیگری مانند Cassandra و Apache Kafka نیز پشتیبانی می شوند.

رابط کاربری (UI):

رابط کاربری Jaeger به کاربران اجازه می دهد تا ردیابی ها را مشاهده کنند، مسیرهای درخواست را درک کنند و گلوگاه های عملکرد را شناسایی کنند.
از طریق رابط کاربری، کاربران می‌توانند نحوه جریان درخواست‌ها از طریق سیستم را تجسم کنند، تأخیر را در هر مرحله مشاهده کنند و هرگونه ناهنجاری را تشخیص دهند.

پیاده سازی ردیابی: مثال با OpenTelemetry و Jaeger

فرض کنید یک برنامه Node.js با دو سرویس دارید: Service A و Service B. در اینجا نحوه پیاده سازی ردیابی آمده است:

ابزار برنامه:

در Service A و Service B، می توانید SDK OpenTelemetry را نصب کنید.
از APIهای OpenTelemetry برای گرفتن spans استفاده کنید. به عنوان مثال:

const { trace } = require(“@opentelemetry/api”);
const tracer = trace.getTracer(“service-a”);

function processRequest() {
const span = tracer.startSpan(“process-request”);
// Perform operations
span.end();
}

Jaeger را در Kubernetes مستقر کنید:

شما می توانید Jaeger را با استفاده از Helm، یک مدیر بسته محبوب Kubernetes، که نصب را ساده می کند، مستقر کنید.
مثال فرمان Helm:

helm install jaeger jaegertracing/jaeger

سرویس‌های خود را برای ارسال داده‌های ردیابی به عامل Jaeger که در خوشه Kubernetes مستقر شده است پیکربندی کنید.

Storage Backend را تنظیم کنید:

Jaeger را برای استفاده از Elasticsearch برای ذخیره ردیابی پیکربندی کنید. این را می توان در تنظیمات پیکربندی مشخص کرد.

مشاهده و تجزیه و تحلیل ردیابی ها:

برای تجزیه و تحلیل ردیابی به رابط کاربری Jaeger دسترسی داشته باشید. می توانید سفر هر درخواست را مشاهده کنید Service A و Service B و تأخیر را در هر مرحله مشاهده کنید.
اگر Service B بیشتر از حد انتظار طول می کشد، می توانید با مشاهده داده های ردیابی دقیق بیشتر تحقیق کنید.

مزایای ردیابی توزیع شده در قابلیت مشاهده

ردیابی توزیع شده در مشاهده پذیری مدرن بسیار ارزشمند است زیرا:

وابستگی ها را آشکار می کند: نحوه تعامل و وابستگی سرویس ها به یکدیگر را نشان می دهد.

تجربه کاربری را بهبود می بخشد: زمان پاسخگویی را با شناسایی تنگناها و بهینه سازی عملکرد کاهش می دهد.

تجزیه و تحلیل علل ریشه ای را تسهیل می کند: تیم‌ها را قادر می‌سازد تا مکان‌هایی را که خرابی‌ها در سیستم‌های پیچیده توزیع شده رخ می‌دهند، مشخص کنند.

در اینجا یک بررسی دقیق و گام به گام از نسخه ی نمایشی بر اساس متن ارائه شده است. این نسخه نمایشی راه‌اندازی قابلیت مشاهده با Elasticsearch و Jaeger در یک خوشه Kubernetes (EKS) و یکپارچه‌سازی ابزار ردیابی Jaeger برای تجسم ردپای برنامه را پوشش می‌دهد.

نسخه ی نمایشی گام به گام برای راه اندازی Jaeger Tracing با Elasticsearch در EKS

پیش نیازها

خوشه های Kubernetes: مطمئن شوید که یک خوشه Kubernetes در Amazon EKS راه اندازی کرده اید.

kubectl و eksctl: ابزارهایی برای تعامل با خوشه EKS شما.

نقش IAM و OIDC: مطمئن شوید که خوشه EKS شما دارای ادغام OIDC برای دسترسی مبتنی بر نقش IAM به EKS است.

قسمت 1: تأیید پیکربندی خوشه و گره Kubernetes

گره های Kubernetes را بررسی کنید:

kubectl get nodes

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور تأیید می‌کند که خوشه و گره‌های EKS به درستی پیکربندی و در دسترس هستند.

به EKS Cluster ReadMe دسترسی پیدا کنید:

در صورت نیاز، دستورالعمل های فایل Day2 README را برای راه اندازی یک خوشه EKS، از جمله افزودن گروه های گره، دنبال کنید.

بخش 2: Elasticsearch را برای ذخیره‌سازی گزارش راه‌اندازی کنید

یک حساب سرویس برای دسترسی EBS ایجاد کنید:

یک حساب سرویس ایجاد کنید تا به Elasticsearch در EKS اجازه دسترسی به حجم EBS را بدهید:

eksctl create iamserviceaccount \
–name elasticsearch-sa \
–namespace logging \
–cluster \
–attach-policy-arn arn:aws:iam::aws:policy/AmazonEBSCSIDriverPolicy \
–approve

این تنظیم شامل یک نقش IAM است که به EKS اجازه می دهد تا برای ذخیره سازی با EBS تعامل داشته باشد.

درایور EBS CSI را نصب کنید:

kubectl apply -k “github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=master”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این درایور EKS را قادر می‌سازد تا از ولوم‌های EBS به عنوان ذخیره‌سازی دائمی استفاده کند.

یک فضای نام برای ورود به سیستم ایجاد کنید:

منابع جداگانه برای مدیریت آسان تر و اشکال زدایی:

kubectl create namespace logging

Elasticsearch را از طریق Helm نصب کنید:

از Helm برای نصب Elasticsearch در logging فضای نام:

helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch -n logging

نام کاربری و رمز عبور ایجاد شده را یادداشت کنید، زیرا بعداً هنگام پیکربندی Jaeger استفاده خواهند شد.

قسمت 3: Jaeger را برای ردیابی تنظیم کنید

ایجاد فضای نام برای ردیابی:

اجزای Jaeger را در یک فضای نام جداگانه جدا کنید:

kubectl create namespace tracing

گواهی Elasticsearch را پیکربندی کنید:

برای اطمینان از ارتباط امن بین Jaeger و Elasticsearch، گواهی Elasticsearch را استخراج و ذخیره کنید.
یک ConfigMap در Kubernetes برای ذخیره گواهی ایجاد کنید:

kubectl create configmap elasticsearch-cacert –from-file=ca.crt= -n tracing

اطلاعات کاربری Elasticsearch را در Kubernetes Secret ذخیره کنید:

اطلاعات کاربری Elasticsearch را به عنوان راز Kubernetes ذخیره کنید:

kubectl create secret generic elasticsearch-credentials \
–from-literal=username= \
–from-literal=password= \
-n tracing

Jaeger را از طریق Helm نصب کنید:

از Helm برای نصب Jaeger در tracing فضای نام:

helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm install jaeger jaegertracing/jaeger -n tracing

قبل از نصب، به روز رسانی کنید values.yaml فایل با اعتبارنامه Elasticsearch:

نام کاربری ذخیره سازی، رمز عبور و URL Elasticsearch را تنظیم کنید.

عیب یابی نصب Jaeger:

اگر غلاف Jaeger در یک حلقه تصادف است، مشکلات پیکربندی را بررسی کنید، به ویژه در مورد کاوشگرهای زنده و آمادگی. غلاف را برای شناسایی مشکلات احتمالی توصیف کنید:

kubectl describe pod -n tracing

اگر مشکلی پیدا شد، ConfigMap، Secret و را دوباره بررسی کنید values.yaml تنظیمات برای خطاها یا مقادیر از دست رفته.

قسمت 4: دسترسی به رابط کاربری Jaeger

پورت فوروارد Jaeger UI:

پورت Jaeger UI را فوروارد کنید تا به صورت محلی به آن دسترسی داشته باشید:

kubectl port-forward svc/jaeger-query 16686:16686 -n tracing

اگر از یک نمونه EC2 دسترسی دارید، اضافه کنید –address 0.0.0.0 به دستور port forward:
kubectl port-forward svc/jaeger-query 16686:16686 -n tracing –address 0.0.0.0

Jaeger UI را در مرورگر بارگیری کنید:

باز کنید http://localhost:16686 در مرورگر خود برای دسترسی به رابط کاربری Jaeger.

بخش 5: استقرار یک نمونه برنامه با Tracing

استقرار برنامه های کاربردی:

دانلود و استقرار یک برنامه نمونه (سرویس A و سرویس B) مجهز به OpenTelemetry:

kubectl apply -k /day4

نقاط پایانی برنامه را فعال کنید:

نقاط پایانی برنامه را برای ایجاد ردیابی هایی که می توان در Jaeger مشاهده کرد آزمایش کنید:

curl http:///healthy

سایر نقاط پایانی (مانند /serviceB یا /serverError) می تواند برای ایجاد ردیابی های مختلف استفاده شود.

قسمت 6: مشاهده آثار در Jaeger

ردیابی را در Jaeger UI پیدا کنید:

به Jaeger UI بروید، سرویس برنامه (به عنوان مثال، سرویس A) را انتخاب کنید و روی «Find Traces» کلیک کنید.
ردها و دهانه ها را بررسی کنید که نشان دهنده نقاطی در سفر هر درخواست هستند.
هر بازه جزئیات عملیات خاصی از جمله مدت زمان را نشان می دهد که می تواند برای شناسایی گلوگاه های عملکرد استفاده شود.

تجزیه و تحلیل جزئیات ردیابی:

برای مشاهده اطلاعات عمیق تر، مانند:

زمان شروع و پایان
زمان صرف شده توسط هر عملیات

از این داده‌ها برای شناسایی هرگونه مشکل تأخیر استفاده کنید و به شما امکان می‌دهد کد یا پیکربندی ناکارآمد را مشخص و بهینه کنید.

نکات اضافی برای بهینه سازی

پروب ها را تنظیم کنید:

اگر کاوشگرهای سرزنده یا آمادگی باعث ایجاد مشکل می‌شوند، زمان‌بندی‌ها یا پارامترها را در هلم تنظیم کنید. values.yaml.

سازمان فضای نام:

فضاهای نام مجزا برای ثبت، نظارت و ردیابی، عیب‌یابی و مدیریت کنترل‌های دسترسی (RBAC) را آسان‌تر می‌کند.

تعادل بار و امنیت:

افشای Jaeger را از طریق Kubernetes Ingress یا LoadBalancer با تنظیمات امنیتی مناسب برای محیط‌های تولید در نظر بگیرید.

ردیابی توزیع شده

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

چرا ردیابی در میکروسرویس ها مهم است؟

در یک برنامه یکپارچه، اشکال زدایی و بهینه سازی عملکرد نسبتاً ساده است زیرا همه چیز در یک مکان است. اما در یک محیط میکروسرویس، یک درخواست کاربر ممکن است از چندین سرویس عبور کند – هر سرویس به طور بالقوه روی سرور متفاوتی اجرا می شود، به زبانی متفاوت نوشته شده و توسط تیمی متفاوت مدیریت می شود. ردیابی توزیع شده مزایای زیر را ارائه می دهد:

  • تعیین تاخیر: وقتی یک درخواست بیشتر از حد انتظار طول می کشد، ردیابی می تواند نشان دهد که کدام سرویس ها یا مراحل فرآیند مسئول تاخیر هستند.
  • درک وابستگی ها: ردیابی وابستگی‌های بین سرویس‌ها را ترسیم می‌کند و نحوه تعامل آنها را نشان می‌دهد.
  • ردیابی خطا: با ثبت هر مرحله از سفر درخواست، ردیابی می‌تواند نشان دهد که کجا خطاها یا خرابی‌ها رخ می‌دهند و چه وابستگی‌هایی ممکن است در آن نقش داشته باشند.

چگونه ردیابی کار می کند

برای تنظیم ردیابی، دو مرحله اولیه ضروری است: کد ابزار دقیق و استقرار زیرساخت های ردیابی.

  1. ابزار دقیق:

    • ابزار دقیق فرآیند افزودن کدی است که داده‌های ردیابی (مانند تأخیر و جریان درخواست) را در برنامه ضبط می‌کند. این کد “span” را تولید می‌کند و به آنها شناسه‌های منحصربه‌فرد اختصاص می‌دهد تا درخواست‌ها را هنگام جریان بین سرویس‌های مختلف ردیابی کنند.
    • دهانه ها واحدهای ضروری در ردیابی هستند. آنها عملیات فردی را در یک درخواست نشان می دهند. به عنوان مثال، درخواستی که از سه سرویس عبور می کند دارای سه دهانه خواهد بود که هر کدام مربوط به یک سرویس است.
    • OpenTelemetry یک استاندارد محبوب و بی طرف از فروشنده برای اجرای ردیابی است. این برنامه از زبان های برنامه نویسی مختلف پشتیبانی می کند و به خوبی با باطن های مختلف ردیابی ادغام می شود.
  2. زیرساخت ردیابی:

    • جیگر یک ابزار منبع باز است که اغلب برای جمع آوری، ذخیره و تجسم داده های ردیابی استفاده می شود.
    • زیرساخت های Jaeger معمولاً شامل موارد زیر است:
      • عامل: با برنامه برای جمع آوری ردپاها مستقر شده است. عامل داده های ردیابی را از برنامه دریافت می کند و آن را به جمع کننده ارسال می کند.
      • گردآورنده: ردپاهایی را از چندین عامل جمع می کند و آنها را پردازش می کند.
      • پشتیبان ذخیره سازی: آثار پردازش شده را ذخیره می کند. Jaeger از پشتیبان های مختلف ذخیره سازی مانند Elasticsearch یا Cassandra برای عملکرد بالا پشتیبانی می کند.
      • رابط کاربری (UI): به کاربران امکان می دهد ردیابی ها را جستجو، تجسم و تجزیه و تحلیل کنند.

یک سناریوی مثال: پیاده سازی ردیابی در یک برنامه میکروسرویس

فرض کنید یک اپلیکیشن تجارت الکترونیک دارید که با استفاده از معماری میکروسرویس ساخته شده است، که در آن هر عملکرد اصلی (ورود، پرداخت، کاتالوگ و غیره) یک سرویس جداگانه است. جریان درخواست زیر را در نظر بگیرید:

  1. سرویس ورود یک کاربر را احراز هویت می کند.
  2. خدمات کاتالوگ موارد را برای کاربر واکشی می کند.
  3. خدمات پرداخت پرداخت را پردازش می کند.

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

Jaeger: معماری و راه اندازی

معماری Jaeger برای مدیریت و مدیریت اثربخش در یک محیط مقیاس پذیر طراحی شده است. در اینجا به تفکیک اجزای آن می پردازیم:

  1. عامل:

    • عامل Jaeger معمولاً به عنوان یک شبح در همان میزبانی که برنامه کاربردی است مستقر می شود.
    • به دهانه های منتشر شده توسط کد ابزاری برنامه گوش می دهد و آنها را به جمع کننده ارسال می کند.
    • با قرار دادن عامل در نزدیکی برنامه، Jaeger تأخیر شبکه را برای ارسال داده های ردیابی کاهش می دهد.
  2. گردآورنده:

    • گردآورنده آثاری را از عوامل دریافت می کند و آنها را پردازش می کند.
    • داده های ردیابی را برای ذخیره سازی در پایگاه داده جمع می کند، فیلتر می کند و آماده می کند.
    • گردآورنده‌ها می‌توانند حجم بالایی از ردیابی‌ها را کنترل کنند، که در سیستم‌های توزیع‌شده بزرگ با میکروسرویس‌های متعدد مفید است.
  3. پشتیبان ذخیره سازی:

    • Jaeger برای نگهداری طولانی مدت داده ها و پشتیبانی از پرس و جو به حافظه خارجی متکی است.
    • Elasticsearch معمولاً استفاده می شود زیرا امکان بازیابی سریع داده های ردیابی را فراهم می کند، اگرچه گزینه های دیگری مانند Cassandra و Apache Kafka نیز پشتیبانی می شوند.
  4. رابط کاربری (UI):

    • رابط کاربری Jaeger به کاربران اجازه می دهد تا ردیابی ها را مشاهده کنند، مسیرهای درخواست را درک کنند و گلوگاه های عملکرد را شناسایی کنند.
    • از طریق رابط کاربری، کاربران می‌توانند نحوه جریان درخواست‌ها از طریق سیستم را تجسم کنند، تأخیر را در هر مرحله مشاهده کنند و هرگونه ناهنجاری را تشخیص دهند.

پیاده سازی ردیابی: مثال با OpenTelemetry و Jaeger

فرض کنید یک برنامه Node.js با دو سرویس دارید: Service A و Service B. در اینجا نحوه پیاده سازی ردیابی آمده است:

  1. ابزار برنامه:

    • در Service A و Service B، می توانید SDK OpenTelemetry را نصب کنید.
    • از APIهای OpenTelemetry برای گرفتن spans استفاده کنید. به عنوان مثال:
     const { trace } = require("@opentelemetry/api");
     const tracer = trace.getTracer("service-a");
    
     function processRequest() {
       const span = tracer.startSpan("process-request");
       // Perform operations
       span.end();
     }
    
  2. Jaeger را در Kubernetes مستقر کنید:

    • شما می توانید Jaeger را با استفاده از Helm، یک مدیر بسته محبوب Kubernetes، که نصب را ساده می کند، مستقر کنید.
    • مثال فرمان Helm:
     helm install jaeger jaegertracing/jaeger
    
  • سرویس‌های خود را برای ارسال داده‌های ردیابی به عامل Jaeger که در خوشه Kubernetes مستقر شده است پیکربندی کنید.
  1. Storage Backend را تنظیم کنید:

    • Jaeger را برای استفاده از Elasticsearch برای ذخیره ردیابی پیکربندی کنید. این را می توان در تنظیمات پیکربندی مشخص کرد.
  2. مشاهده و تجزیه و تحلیل ردیابی ها:

    • برای تجزیه و تحلیل ردیابی به رابط کاربری Jaeger دسترسی داشته باشید. می توانید سفر هر درخواست را مشاهده کنید Service A و Service B و تأخیر را در هر مرحله مشاهده کنید.
    • اگر Service B بیشتر از حد انتظار طول می کشد، می توانید با مشاهده داده های ردیابی دقیق بیشتر تحقیق کنید.

مزایای ردیابی توزیع شده در قابلیت مشاهده

ردیابی توزیع شده در مشاهده پذیری مدرن بسیار ارزشمند است زیرا:

  • وابستگی ها را آشکار می کند: نحوه تعامل و وابستگی سرویس ها به یکدیگر را نشان می دهد.
  • تجربه کاربری را بهبود می بخشد: زمان پاسخگویی را با شناسایی تنگناها و بهینه سازی عملکرد کاهش می دهد.
  • تجزیه و تحلیل علل ریشه ای را تسهیل می کند: تیم‌ها را قادر می‌سازد تا مکان‌هایی را که خرابی‌ها در سیستم‌های پیچیده توزیع شده رخ می‌دهند، مشخص کنند.

در اینجا یک بررسی دقیق و گام به گام از نسخه ی نمایشی بر اساس متن ارائه شده است. این نسخه نمایشی راه‌اندازی قابلیت مشاهده با Elasticsearch و Jaeger در یک خوشه Kubernetes (EKS) و یکپارچه‌سازی ابزار ردیابی Jaeger برای تجسم ردپای برنامه را پوشش می‌دهد.


نسخه ی نمایشی گام به گام برای راه اندازی Jaeger Tracing با Elasticsearch در EKS

پیش نیازها

  1. خوشه های Kubernetes: مطمئن شوید که یک خوشه Kubernetes در Amazon EKS راه اندازی کرده اید.
  2. kubectl و eksctl: ابزارهایی برای تعامل با خوشه EKS شما.
  3. نقش IAM و OIDC: مطمئن شوید که خوشه EKS شما دارای ادغام OIDC برای دسترسی مبتنی بر نقش IAM به EKS است.

قسمت 1: تأیید پیکربندی خوشه و گره Kubernetes

  1. گره های Kubernetes را بررسی کنید:
   kubectl get nodes
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • این دستور تأیید می‌کند که خوشه و گره‌های EKS به درستی پیکربندی و در دسترس هستند.
  1. به EKS Cluster ReadMe دسترسی پیدا کنید:

    • در صورت نیاز، دستورالعمل های فایل Day2 README را برای راه اندازی یک خوشه EKS، از جمله افزودن گروه های گره، دنبال کنید.

بخش 2: Elasticsearch را برای ذخیره‌سازی گزارش راه‌اندازی کنید

  1. یک حساب سرویس برای دسترسی EBS ایجاد کنید:

    • یک حساب سرویس ایجاد کنید تا به Elasticsearch در EKS اجازه دسترسی به حجم EBS را بدهید:
     eksctl create iamserviceaccount \
       --name elasticsearch-sa \
       --namespace logging \
       --cluster  \
       --attach-policy-arn arn:aws:iam::aws:policy/AmazonEBSCSIDriverPolicy \
       --approve
    
  • این تنظیم شامل یک نقش IAM است که به EKS اجازه می دهد تا برای ذخیره سازی با EBS تعامل داشته باشد.
  1. درایور EBS CSI را نصب کنید:
   kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=master"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • این درایور EKS را قادر می‌سازد تا از ولوم‌های EBS به عنوان ذخیره‌سازی دائمی استفاده کند.
  1. یک فضای نام برای ورود به سیستم ایجاد کنید:

    • منابع جداگانه برای مدیریت آسان تر و اشکال زدایی:
     kubectl create namespace logging
    
  2. Elasticsearch را از طریق Helm نصب کنید:

    • از Helm برای نصب Elasticsearch در logging فضای نام:
     helm repo add elastic https://helm.elastic.co
     helm install elasticsearch elastic/elasticsearch -n logging
    
  • نام کاربری و رمز عبور ایجاد شده را یادداشت کنید، زیرا بعداً هنگام پیکربندی Jaeger استفاده خواهند شد.

قسمت 3: Jaeger را برای ردیابی تنظیم کنید

  1. ایجاد فضای نام برای ردیابی:

    • اجزای Jaeger را در یک فضای نام جداگانه جدا کنید:
     kubectl create namespace tracing
    
  2. گواهی Elasticsearch را پیکربندی کنید:

    • برای اطمینان از ارتباط امن بین Jaeger و Elasticsearch، گواهی Elasticsearch را استخراج و ذخیره کنید.
    • یک ConfigMap در Kubernetes برای ذخیره گواهی ایجاد کنید:
     kubectl create configmap elasticsearch-cacert --from-file=ca.crt= -n tracing
    
  3. اطلاعات کاربری Elasticsearch را در Kubernetes Secret ذخیره کنید:

    • اطلاعات کاربری Elasticsearch را به عنوان راز Kubernetes ذخیره کنید:
     kubectl create secret generic elasticsearch-credentials \
       --from-literal=username= \
       --from-literal=password= \
       -n tracing
    
  4. Jaeger را از طریق Helm نصب کنید:

    • از Helm برای نصب Jaeger در tracing فضای نام:
     helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
     helm install jaeger jaegertracing/jaeger -n tracing
    
  • قبل از نصب، به روز رسانی کنید values.yaml فایل با اعتبارنامه Elasticsearch:
    • نام کاربری ذخیره سازی، رمز عبور و URL Elasticsearch را تنظیم کنید.
  1. عیب یابی نصب Jaeger:

    • اگر غلاف Jaeger در یک حلقه تصادف است، مشکلات پیکربندی را بررسی کنید، به ویژه در مورد کاوشگرهای زنده و آمادگی. غلاف را برای شناسایی مشکلات احتمالی توصیف کنید:
     kubectl describe pod  -n tracing
    
  • اگر مشکلی پیدا شد، ConfigMap، Secret و را دوباره بررسی کنید values.yaml تنظیمات برای خطاها یا مقادیر از دست رفته.

قسمت 4: دسترسی به رابط کاربری Jaeger

  1. پورت فوروارد Jaeger UI:

    • پورت Jaeger UI را فوروارد کنید تا به صورت محلی به آن دسترسی داشته باشید:
     kubectl port-forward svc/jaeger-query 16686:16686 -n tracing
    
  • اگر از یک نمونه EC2 دسترسی دارید، اضافه کنید --address 0.0.0.0 به دستور port forward:

     kubectl port-forward svc/jaeger-query 16686:16686 -n tracing --address 0.0.0.0
    
  1. Jaeger UI را در مرورگر بارگیری کنید:

    • باز کنید http://localhost:16686 در مرورگر خود برای دسترسی به رابط کاربری Jaeger.

بخش 5: استقرار یک نمونه برنامه با Tracing

  1. استقرار برنامه های کاربردی:

    • دانلود و استقرار یک برنامه نمونه (سرویس A و سرویس B) مجهز به OpenTelemetry:
     kubectl apply -k /day4
    
  1. نقاط پایانی برنامه را فعال کنید:

    • نقاط پایانی برنامه را برای ایجاد ردیابی هایی که می توان در Jaeger مشاهده کرد آزمایش کنید:
     curl http:///healthy
    
  • سایر نقاط پایانی (مانند /serviceB یا /serverError) می تواند برای ایجاد ردیابی های مختلف استفاده شود.

قسمت 6: مشاهده آثار در Jaeger

  1. ردیابی را در Jaeger UI پیدا کنید:

    • به Jaeger UI بروید، سرویس برنامه (به عنوان مثال، سرویس A) را انتخاب کنید و روی «Find Traces» کلیک کنید.
    • ردها و دهانه ها را بررسی کنید که نشان دهنده نقاطی در سفر هر درخواست هستند.
    • هر بازه جزئیات عملیات خاصی از جمله مدت زمان را نشان می دهد که می تواند برای شناسایی گلوگاه های عملکرد استفاده شود.
  2. تجزیه و تحلیل جزئیات ردیابی:

    • برای مشاهده اطلاعات عمیق تر، مانند:
      • زمان شروع و پایان
      • زمان صرف شده توسط هر عملیات
    • از این داده‌ها برای شناسایی هرگونه مشکل تأخیر استفاده کنید و به شما امکان می‌دهد کد یا پیکربندی ناکارآمد را مشخص و بهینه کنید.

نکات اضافی برای بهینه سازی

  1. پروب ها را تنظیم کنید:

    • اگر کاوشگرهای سرزنده یا آمادگی باعث ایجاد مشکل می‌شوند، زمان‌بندی‌ها یا پارامترها را در هلم تنظیم کنید. values.yaml.
  2. سازمان فضای نام:

    • فضاهای نام مجزا برای ثبت، نظارت و ردیابی، عیب‌یابی و مدیریت کنترل‌های دسترسی (RBAC) را آسان‌تر می‌کند.
  3. تعادل بار و امنیت:

    • افشای Jaeger را از طریق Kubernetes Ingress یا LoadBalancer با تنظیمات امنیتی مناسب برای محیط‌های تولید در نظر بگیرید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا