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

راه اندازی Jaeger در Laravel: یک قدم به جلو برای تحلیل و پیدا کردن باگ‌هادر یکی از پروژه ها به یک مشکل برخوردیم که حدود یک ماه مارو درگیر خودش کرده بود و باعث به وجود آمدن یکسری از مشکلات در سیستم شده بود. کد برنامه رو که برسی میکردیم هیج موردی توش پیدا نمیکردیم که علت اون مشکل باشه، برای همین نیاز به ابزاری داشتیم تا بفهمیم که کدوم یکی از فرایند ها هست که مدت زمان اجرای اون خیلی زیاده و در نهایت باعث اون مشکل میشه.در این بین با ابزار jaeger آشنا شدم و کنجکاو شدم که باهاش کار کنم و در موردش بیشتر بدونم.به خاطر این که من خیلی دوست دارم که چیزهایی که یادمیگرمو به بقیه هم آموزش بدم تصمیم گرفتم که آموزش و نحوه کار با این ابزار به اشتراک بزارم. بنابراین در ادامه بیشتر در مورد این ابزار بهتون میگم و نحوه نصب در لاراول و کار با اون رو بهتون آموزش میدم.آشنایی با jaegerjaeger یک نرم افزار متن باز هست که با زبان GO توسعه داده شده و بدرد پروژه هایی میخوروه که از چند تا میکروسرویس تشکیل شده و فرایندها در میکروسرویس ها زیاد و پیچیده هست.در واقع، jaeger به شما اجازه می‌دهد تا در یک فرایند، مسیر حرکت یک درخواست در میکروسرویس ها مشاهده کنید و در صورت نیاز، از آن برای رفع مشکلات و ارتقای کیفیت سرویس‌های خود استفاده کنید. آشنایی با اجزای اصلی jaegerتعریف Traceبه مجموع عملیات هایی که در یک فرایند انجام میشود Trace گفته میشه. فرض کنید می خواهید از یک سایت یک موبایل بگیرید و عملیات هایی که فرضا نیاز هست در فرایند خرید موبایل انجام بشه به صورت زیر است:برسی موجود بودن موبایل سفارش شدهثبت سفارشثبت آدرس برای ارسال موبایلانتخاب روز و زمان ارسال و ثبت آنایجاد فاکتورانتقال کاربر به درگاه بانکی برای پرداخت هزینهگرفتن تاییده پرداخت از درگاه بعد از پرداخت صورت حسابآپدیت کردن وضعیت فاکتور به پرداخت شدهمجموع تمام این عملیات هایی که در بالا لیست کردم، بهش trace گفته میشود.تعریف Spanبه هرکدام از عملیات هایی که در یک فرایند انجام می شود span گفته می شود.نحوه راهندازی 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=testJAEGER_HTTP_LISTENER_ENABLED با فعال کردن آن jaeger تمام درخواست هایی که از طریق http انجام می شود را ثبت می کند.JAEGER_CONSOLE_LISTENER_ENABLEDبا فعال کردن آن jaeger تمام کامند هایی از طریق artisan انجام می شود را ثبت می کند.JAEGER_QUERY_LISTENER_ENABLEDبا فعال کردن آن jaeger تمام کوئری هایی که زده میشه را ثبت می کند.JAEGER_SERVICE_NAMEنام میکروسرویس مربوطه در jaeger.و تمام شما با اجرای پروژه میتونید فرایند هایی که در پروژتون انجام شده را مشاهد کنید.سخن آخرممنون که تا این لحظه همراه من بودید. اگر سوال، انتقاد و یا پیشنهادی داشتید خوشحال میشم در بخش کامنت های این مطلب با من درمیون بزارید.