আপনার অ্যাপ্লিকেশনের পারফরম্যান্সের ওপর একটি সঠিক মোনিটরিং ওভারভিউ সেট আপ করা একটি জটিল টাস্ক। সাধারণত, আপনাকে প্রথমে বুঝতে হয় কী কী মোনিটর করতে হবে, তারপর আপনার কোড ইনস্ট্রুমেন্ট করতে হয়, এবং শেষে এমিট করা সব ডেটা থেকে মেনিং বের করতে হয়।
তবে, কিছু জিনিস সেট আপ থাকলে এবং একটি APM যা নেটিভলি রুবি সাপোর্ট করে, এই ধাপ নেওয়া অনেক সহজ হয়ে গেছে। এই পোস্টে, আমরা আপনাকে দেখাব কীভাবে আপনও এটা করতে পারেন।
অটোমেটিক ইনস্ট্রুমেন্টেশন — হ্যান্ডস-ফ্রি APM সেটআপ
আপনার কোডের কোন টুকরো পারফরম্যান্স ইস্যু সৃষ্টি করছে সেটা খুঁজে বের করতে, আপনাকে সেটাতে ইনস্ট্রুমেন্টেশন যোগ করতে হবে। সেটা করলে, আপনি সব অ্যাকশন ব্রেক ডাউন করতে পারবেন এবং মাপতে পারবেন কোনগুলো সবচোয়ে ধীর।
AppSignal-এর অটোমেটিক ইনস্ট্রুমেন্টেশনের সাথে, আমরা যতটুকু সম্ভব ম্যানুয়াল কাজ দূর করি। শুধু CLI-এর মাধ্যমে কয়েকটি কমান্ড রান করুন, এবং আপনি সেট হয়ে যাবেন।
আমাদের মোনিটরিং এজেন্ট আপনার ইনফ্রাস্ট্রাকচারের বিভিন্ন অংশ ডিটেক্ট করে এবং সেগুলো স্বয়ংক্রিয়ভাবে ইনস্ট্রুমেন্ট করে। এটি AppSignal অ্যাপকে ডাইজেস্ট, প্রসেস, মোনিটর, এবং আপনাকে সবচোয়ে প্রয়োজনীয় গ্রাফ এবং ড্যাশবোর্ড দেখাতে সক্ষম করে।
এর মানে হলো, উদাহরণস্বরূপ, রুবির জন্য graphql জেমের জন্য, AppSignal প্রতিটি GraphQL রিকোয়েস্ট যা আসছে সেটা ইনস্ট্রুমেন্ট করবে, অর্থাৎ রিকোয়েস্টের সকল ইভেন্টের ব্রেকডাউন প্রদান করবে।
আউট-অফ-দ-বক্স ইনস্ট্রুমেন্টেশন
আমরা AppSignal যা সাপোর্ট করে সে সব টুলের একটি লিস্ট বানিয়েছি। এটি khá এক্সটেনসিভ:
| Type | Tool |
|---|---|
| Framework | Rails |
| Rails features | Action Mailer |
| Rails features | Action Cable |
| Rails features | Active Record |
| Rails features | Active Job |
| Rails features | Caching |
| Supported through ActiveRecord | PostgreSQL, MySQL, SQLite, etc. |
| Heroku integration | Heroku PostgreSQL |
| Framework | Padrino |
| Framework | Sinatra |
| Gem | Rack |
| Gem | WebMachine |
| Web server | Puma |
| Web server | Unicorn |
| ORM | DataMapper |
| ORM | Sequel |
| ORM | MongoDB |
| API | Grape |
| API | GraphQL |
| Standard library | Net::HTTP |
| Background job | Que |
| Background job | Sidekiq |
| Background job | Delayed Job |
| Background job | Resque |
| Background job | Shoryuken |
| Gem | Rake |
যেমন আমি বললাম, লিস্টটা খুব লম্বা, তাই এই পোস্টে আমরা প্রতিটি টুলে ডুব মারব না।
ওয়েব ফ্রেমওয়ার্ক এবং API-র
AppSignal রুবি অন রেইলস, Padrino, এবং Sinatra-এ ওয়েব রিকোয়েস্ট ইনস্ট্রুমেন্ট করে আউট-অফ-দ-বক্স। Grape বা GraphQL জেম ব্যবহার করে API-রও সাপোর্ট করা হয়।
Ruby on Rails
Rails-এর জন্য AppSignal ইন্টিগ্রেশন রিকোয়েস্টে এক্সেপশন এবং পারফরম্যান্স ট্র্যাক করে কাজ করে। যখন একটি রিকোয়েস্টের সময় কন্ট্রোলারে এরর হয়, AppSignal সেটা রিপোর্ট করে। পারফরম্যান্স ইস্যু রিকোয়েস্টের ডুরেশন বেসড হবে এবং ইভেন্টের একটি টাইমলাইন তৈরি করবে যা ডিটেইল করবে অ্যাপের কোন অংশ সবচোয়ে বেশি সময় নিচ্ছে।
এটা এমনও সম্ভব: HTTP রিকোয়েস্ট রেইলস অ্যাপে লোডব্যালেনসার বা ওয়েব সার্ভারের মাধ্যমে পৌঁছাতে কতক্ষণ লাগলো সেটা ট্র্যাক করা। যদি ডিফল্টলি অন থাকে, রিকোয়েস্ট কিউ টাইম ট্র্যাকিং হেডার সেট আপ করুন এবং AppSignal স্বয়ংক্রিয়ভাবে কিউ টাইম গ্রাফ করবে।
GraphQL
AppSignal রুবির জন্য graphql জেম সাপোর্ট করে। এটি প্রতিটি GraphQL রিকোয়েস্ট যা আসছে সেটা ইনস্ট্রুমেন্ট করবে এবং রিকোয়েস্টের সকল ইভেন্টের ব্রেকডাউন প্রদান করবে। আপনি দেখতে পাবেন: পার্স, ভ্যালিডেট, এবং আপনার রেজলভার এক্সিকিউট করতে কতক্ষণ লাগলো। অ্যাপের ওয়েব ফ্রেমওয়ার্ক এবং ডাটাবেস কলের ইভেন্টগুলো অবশ্যই এই ব্রেকডাউনে ইনক্লুডেড থাকবে।
এটা তাদের জন্য চমৎকার যারা GraphQL কোয়েরি ডিবাগ করতে চান যা খুব বেশি সময় নিচ্ছে, এবং আপনি নিশ্চিত নন স্লোডাউন কোথায় হচ্ছে। আমাদের অ্যানোমালি ট্রিগারগুলোও ভুলবেন না — কোয়েরি টাইম নির্দিষ্ট থ্রেশহোল্ড পৌঁছালে সতর্কতা পাওয়ার জন্য এগুলো খুব উপকারী।
Sinatra, Padrino এবং Grape
Sinatra, Padrino এবং Grape রুবির জন্য ওয়েব এবং API ফ্রেমওয়ার্ক যা একটি অ্যাপের ভিতরে ভিন্ন ভিন্নভাবে থাকতে পারে। সেগুলো হয় একটি スタ্যান্ডআলোন অ্যাপ বা একটি বড় রেইলস অ্যাপে মাউন্ট করা। অ্যাপটি ওয়েব সার্ভারে কীভাবে মাউন্ট করা হয়েছে তার উপর নির্ভর করে Sinatra, Padrino এবং Grape-এর জন্য কিছু ভিন্ন ইনস্টলেশন স্টেপ দরকার হতে পারে।
ইনস্টল হওয়ার পর, Sinatra, Padrino, Grape রিকোয়েস্টগুলো সব ইনস্ট্রুমেন্টেড: ট্রাফিক API-তে হিট করলে এরর এবং পারফরম্যান্স মেজারমেন্ট রিপোর্ট হয়। প্রতিটি (API) এন্ডপয়েন্ট AppSignal-এ নিজস্ব অ্যাকশন, যাতে সহজে বুঝা যায় কোন এন্ডপয়েন্টে কোন এরর হয়েছে। রেইলস অ্যাপের মতোই পারফরম্যান্স ব্রেকডাউন ইনসাইট দেয় কোন ডাটাবেস কোয়েরি বা অ্যাপের অন্যান্য অংশ অন্যদের চেয়ে স্লো।
ডাটাবেস
Active Record এবং অন্যান্য ORM
এক রিকোয়েস্ট ডাটাবেস কোয়েরি করতে কতক্ষণ লাগলো সেটা দেখতে, ইনসিডেন্ট ডিটেইল পেজ খুলুন। পেজের উপরে রিকোয়েস্টে রেকর্ড করা ইভেন্টের টাইপগুলো গ্রুপ অনুযায়ী ব্রেকডাউন করা থাকে। এখানে আপনি দেখতে পাবেন মোট কতটুকু টাইম কোন টাইপের অপারেশনে খরচ হয়েছে।
আরো জুম ইন করলে, পেজের নিচে আপনি রিকোয়েস্টের সকল ইভেন্টের টাইমলাইন পাবেন ক্রম অনুযায়ী। এটি আপনাকে প্রতিটি কোয়েরি যা এক্সিকিউট হয়েছে এবং কোনগুলো সবচোয়ে বেশি সময় নিচ্ছে সেটার ওভারভিউ দেয়।
ইন্টিগ্রেশন আপনাকে ডাটাবেস কলের ট্রেসিং দেখায়, যাতে আপনি বুঝতে পারেন কোন কোয়েরি আপনার সমস্যার (বা জিনিয়াসের) মূল 😉
N+1 কোয়েরি
চিন্তিত যে রিকোয়েস্টে N+1 কোয়েরি হচ্ছে কিনা এবং সেটাই স্লো করছে? আমরা যদি N+1 কোয়েরি ডিটেক্ট করি, তবে সেই ইভেন্টগুলোর জন্য ইভেন্ট টাইমলাইনে একটি সতর্কতা দেখাবে।
Redis
Redis ইন্টিগ্রেশনের সাথে, আপনি আপনার Redis কলগুলো ইভেন্ট টাইমলাইনে দেখতে পাবেন:
আপনি রেডিসে পাঠানো কমান্ডের নাম এবং রেডিস ইনস্ট্যান্সের অ্যাড্রেসও দেখতে পাবেন যেটা কোয়েরি করা হয়েছে:
এটা রেডিস ক্যাশে লং-রানিং কল ডিবাগ করতে চাইরা যারা তাদের জন্য চমৎকার খবর। আপনি এমনকি অ্যানোমালি ট্রিগার সেট করতে পারেন যেন সূপার লং টাইম চলা রিকোয়েস্টে অ্যালার্ট পাঠায়!
ব্যাকগ্রাউন্ড জব
যখন একটি ব্যাকগ্রাউন্ড জব Sidekiq, Delayed::Job, Resque, Shoryuken এবং Que দিয়ে কিউড হয়, AppSignal স্বয়ংক্রিয়ভাবে এরর এবং পারফরম্যান্স মেজারমেন্ট রিপোর্ট করে। সকল Active Job অ্যাডাপ্টারও সাপোর্টেড, এবং কিছু ব্যাকগ্রাউন্ড জব লাইব্রেরি যেমন Sidekiq এবং Delayed::Job লাইব্রেরি থেকে আরও মেটাডেটা রিপোর্ট করে।
Action Mailer দিয়ে ইমেইল পাঠানো
যদি রেইলস মেইলার Action Mailer ব্যবহার করে deliver_later সেট আপ থাকে, তবে সেগুলো Active Job-এর মাধ্যমে রাউট হবে এবং সেম লেভেলের ইনস্ট্রুমেন্টেশন পাবে।
WebSocket
আপনার রেইলস অ্যাপে Action Cable ব্যবহার করছেন? AppSignal স্বয়ংক্রিয়ভাবে মেসেজ এবং সাবস্ক্রিপশনের জন্য এরর এবং পারফরম্যান্স মেজারমেন্ট রিপোর্ট করে। প্রতিটি মেসেজ আলাদা ইনস্ট্রুমেন্টেড থাকে তাই লং-রানিং চ্যানেলও সকল এক্টিভিটি রিপোর্ট করবে। সেগুলো একশন অনুযায়ী গ্রুপ করা থাকে যাতে প্রতিটি ইনডিভিজুয়াল একশন কীভাবে পারফর্ম করছে সেটার ক্লিয়ার ওভারভিউ থাকে।
👋 আপনি যদি এটা পছন্দ করেন, আমাদের Ruby (on Rails) পারফরম্যান্স আর্টিকেলের চেকলিস্টে আরও দেখুন।
AppSignal ট্রাই করুন: মোনিটরিং করা সহজ এবং মিষ্টি 🍪
গত ৭ বছরে, আমরা হাজার হাজার ডেভেলপারকে তাদের কোড অটোমেটিক্যালি ইনস্ট্রুমেন্ট করতে সাহায্য করেছি, এবং আমরা আপনাকেও আমাদের ট্রাই আউট করার জন্য আহ্বান করছি। আপনি যদি করেন, বিনামূল্যে যোগাযোগ করুন, আমরা আপনাকে ফ্রি এক বাক্স স্ট্রুপওয়াফেলও পাঠিয়ে দেব।
PS. আপনি যদি একটি চমৎকার OSS প্রজেক্ট দিয়ে বিশ্বকে সাহায্য করছেন, আমরা আপনাকেও ফรี AppSignal একাউন্ট দিয়ে সাহায্য করব। মেইনটেইনারদের জানান যাদের আপনি মানন করেন!