امیرحسین شریف نژاد
امیرحسین شریف نژاد
خواندن ۴ دقیقه·۲ سال پیش

راه اندازی Jaeger در لاراول: یک قدم به جلو برای تحلیل و پیدا کردن باگ‌ها

راه اندازی Jaeger در Laravel: یک قدم به جلو برای تحلیل و پیدا کردن باگ‌ها
راه اندازی Jaeger در Laravel: یک قدم به جلو برای تحلیل و پیدا کردن باگ‌ها


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

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

آشنایی با jaeger

jaeger یک نرم افزار متن باز هست که با زبان GO توسعه داده شده و بدرد پروژه هایی میخوروه که از چند تا میکروسرویس تشکیل شده و فرایندها در میکروسرویس ها زیاد و پیچیده هست.

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

آشنایی با اجزای اصلی jaeger

تعریف Trace

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

  • برسی موجود بودن موبایل سفارش شده
  • ثبت سفارش
  • ثبت آدرس برای ارسال موبایل
  • انتخاب روز و زمان ارسال و ثبت آن
  • ایجاد فاکتور
  • انتقال کاربر به درگاه بانکی برای پرداخت هزینه
  • گرفتن تاییده پرداخت از درگاه بعد از پرداخت صورت حساب
  • آپدیت کردن وضعیت فاکتور به پرداخت شده

مجموع تمام این عملیات هایی که در بالا لیست کردم، بهش trace گفته میشود.

تعریف Span

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

نحوه راهندازی jaeger در لاراول

نصب jaeger

نصب jaeger
نصب jaeger

در قدم اول نیاز هست که jaeger بر روی لوکال و یا سرور نصب کنیم. خود سایت jaeger نحوه نصبُ با داکر به صورت زیر گفته:

docker run -d --name jaeger \ -e COLLECTOR_OTLP_ENABLED=true \ -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14250:14250 \ -p 14268:14268 \ -p 14269:14269 \ -p 4317:4317 \ -p 4318:4318 \ -p 9411:9411 \ jaegertracing/all-in-one:1.45

اما من در فایل داکری که آماده کردم هم لاراول و هم jaeger نصب میکنم میتونید از طریق لینک زیر به داکر فایل و داکرکامپوز اون دسترسی داشته باشید.

https://github.com/sharifnezhad/docker-compose-archive/tree/main/laravel-and-jaeger-all-in-one

بعد از نصب jaeger، پنل مدیریت اون بر روی پورت 16686 قابل دسترس قرار میگیره.

نصب پکیج laravel-jaeger

من برای اتصال jaeger به لاراول از پکیج laravel-jaeger استفاده کردم، اما شما میتونید از پکیج های دیگه برای این موضوع استفاده کنید
فقط اشکالی که این پکیج داره فعلا روی لاراول ۹ قابل استفاده هست که من برای این که بتونم در لارول 10 ازش استفاده کنم یکسری تغییر کوچیکی در اون دادم و میتونید با قرار گیری آدرس زیر در composer.json به جای نصب از دایرکتوری اصلی از دایرکتوریی که من فروک گرفتم و یکسری تغییرات در اون دادم استفاده کنید.

https://github.com/sharifnezhad/laravel-jaeger.git

نحوه تغییر آدرس پکیج در فایل composer.json خیلی ساده هست، میتوانید از طریق این لینک آدرس دانلود پکیج رو عوض کنید.

بعد از نصب پکیج کامند زیر رو در کانتینر مربوطه اجرا کنید تا فایل کانفیگ jaeger به دایرکتوری config لاراول اضافه بشه.

php artisan vendor:publish --provider=&quotChocofamilyme\LaravelJaeger\LaravelJaegerServiceProvider&quot --tag=&quotconfig&quot

و در آخر مقادیر زیر رو به فایل .env پروژتون اضافه کنید.

JAEGER_HTTP_LISTENER_ENABLED=true JAEGER_CONSOLE_LISTENER_ENABLED=true JAEGER_QUERY_LISTENER_ENABLED=true JAEGER_JOB_LISTENER_ENABLED=true JAEGER_SERVICE_NAME=test

JAEGER_HTTP_LISTENER_ENABLED

با فعال کردن آن jaeger تمام درخواست هایی که از طریق http انجام می شود را ثبت می کند.

JAEGER_CONSOLE_LISTENER_ENABLED

با فعال کردن آن jaeger تمام کامند هایی از طریق artisan انجام می شود را ثبت می کند.

JAEGER_QUERY_LISTENER_ENABLED

با فعال کردن آن jaeger تمام کوئری هایی که زده میشه را ثبت می کند.

JAEGER_SERVICE_NAME

نام میکروسرویس مربوطه در jaeger.

و تمام شما با اجرای پروژه میتونید فرایند هایی که در پروژتون انجام شده را مشاهد کنید.

سخن آخر

ممنون که تا این لحظه همراه من بودید. اگر سوال، انتقاد و یا پیشنهادی داشتید خوشحال میشم در بخش کامنت های این مطلب با من درمیون بزارید.

jaegerlaravel
یک برنامه نویس، که از پیچیدگی بدش میاد
شاید از این پست‌ها خوشتان بیاید