কম্পিউটার টিউটোরিয়াল

AppSignal দিয়ে Ruby on Rails মনিটরিং: পারফরম্যান্স ও এরর ট্র্যাকিং বাড়ান

প্রোডাকশন এনভায়রনমেন্টে অ্যাপ্লিকেশন রান ও মেইনটেইন করার সময়, আমরা অ্যাপ্লিকেশনের বিহেভিয়র সম্পর্কে আত্মবিশ্বস্ত হতে চাই এবং জানতে চাই এটি প্রত্যাশা অনুযায়ী কাজ করছে কিনা। কমপক্ষে, আমরা এরর ট্র্যাক করতে চাই, পারফরম্যান্স মনিটর করতে চাই, এবং অ্যাপ্লিকেশনের সারা জীবনে নির্দিষ্ট মেট্রিক্স সংগ্রহ করতে চাই।

যেহেতু আমরা ডেভেলপার এবং মেইনটেইনেবল সলিউশন পছন্দ করি (ঠিক না?), আমরা টুল, ইন্টিগ্রেশন, এবং ডিপেনডেন্সির যামেলে ফেলে যেতে চাই না যা সবকিছু ট্র্যাক করাকে কঠিন করে দেয়।

এই পোস্টে, আমরা একটি রুবি অন রেইল্স অ্যাপ্লিকেশনে AppSignal যোগ করব যাতে অ্যাপ্লিকেশন বিহেভিয়র সম্পর্কে স্পষ্ট ইনসাইট পাওয়া যায়।

কোড ফলো করতে চাইলে প্রি-রিকোয়েজিট:

  • www.appsignal.com-এ একাউন্ট
  • Docker ইনস্টলড ও রানিং (docker-compose ব্যবহার করার জন্য)। *শুধু এই পোস্টের স্যাম্পল অ্যাপ্লিকেশন ব্যবহার করলে দরকার*

AppSignal সেট আপ করা

নোট: আপনি যদি নিজস্ব রেইল্স অ্যাপ্লিকেশনে AppSignal যোগ করতে চান, তবে এই সেকশন স্কিপ করতে পারেন। সেক্ষেত্রে, ডকার বা রেইলস সার্ভার রিস্টার্ট করার রিলেটেড ইনস্ট্রাকশনও ইগনোর করুন — আপনি সাধারণত যেভাবে আপনার অ্যাপ্লিকেশন রিস্টার্ট/রিডিপ্লয় করেন তেমনি করুন।

আমরা একটি স্যাম্পল অ্যাপ্লিকেশন ব্যবহার করব শুরুতে এবং ডকার দিয়ে আমাদের মেশিনে রান করব।

নিচের কমান্ডগুলো রান করুন রিপোজিটরি ক্লোন করতে, ডিপেন্ডেন্সি ইনস্টল করতে, এবং অ্যাপ্লিকেশন রান করতে:

$ git clone --branch appsignal-setup/start-docker --single-branch https://github.com/choncou/sample_rails_app appsignal-setup
$ cd appsignal-setup
$ yarn start:compose

প্রথমবার রান করলে ডকার ইমেজ বিল্ড ও ডিপেন্ডেন্সি ডাউনলোড করতে কিছুটা সময় লাগবে। একবার কমপ্লিট হলে, এটি রেইলস সার্ভার, PostgreSQL ডাটাবেস, এবং Redis শুরু করবে। লগে রিকোয়েস্ট দেখবেন এবং https://localhost:3000/ এ চলমান অ্যাপ্লিকেশন দেখতে পাবেন।

আমাদের স্যাম্পল অ্যাপ্লিকেশন সম্পর্কে

আমরা যে অ্যাপ্লিকেশনটি নিয়ে কাজ করছি তা খুব মিনিমাল, তাই শুধু কয়েকটা বিষয় নোট করলেই হবে।

আমাদের একটি Post মডেল, PostsController, এবং সকল CRUD অ্যাকশন /posts রুটে এক্সপোজ করা আছে।

আমাদের একটি হোম পেজও আছে যা PagesController রেন্ডার করে, যা একটি ব্যাকগ্রাউন্ড জব CreateRandomPostsJob এনকিউ করে র‍্যান্ডম পোস্ট অ্যাসিনক্রোনাসলি জেনারেট করতে।

শেষত, আমরা ব্যাকগ্রাউন্ড জব প্রসেসিংয়ের জন্য Sidekiq ব্যবহার করছি।

আমাদের ছোট ব্লগিং প্ল্যাটফর্মে ইতিমধ্যে কিছু সক্রিয় ইউজার আছে। একটি স্ক্রিপ্ট (./bin/traffic) সার্ভারের সাথে সাথে ব্যাকগ্রাউন্ডে চলছে যা নিয়মিত কয়েকটি রিকোয়েস্ট করে অ্যাপ্লিকেশনে ট্রাফিক অনুকরণ করতে।

বাস। আমরা প্রোডাক্ট রিলিজ করেছি, এবং সবকিছু পরফেক্টলি কাজ করছে...

অথবা, কমপক্ষে আমরা তো এটা মনে করছি যতক্ষণ না ইউজার রিপোর্ট আসতে শুরু হয় অ্যাপ্লিকেশনের পারফরম্যান্স এবং এরর সম্পর্কে।

তাহলে কী করব? ডেভেলপমেন্ট এনভায়রনমেন্টে কাজ করলে এরর খুঁজে বের করা সহজ। কিন্তু প্রোডাকশনে অ্যাপ্লিকেশন চলাকালীন এটি কঠিন হয়ে যায়। সার্ভার লগ সার্চ করার বদলে এরর খুঁজে বের করার আরও ভালো পথ অবশ্যই থাকবে।

AppSignal আসে রক্ষায়!

AppSignal-এ শুরু করা

আমাদের মনিটরিং যাত্রা শুরু করি AppSignal অ্যাপ্লিকেশনে যোগ করে। www.appsignal.com-এ আপনার একাউন্টে লগইন করুন।

যদি আপনি নতুন AppSignal ইউজার হন, তবে নিচের পেজটি দেখবেন অ্যাপ্লিকেশন যোগ করার জন্য (যেখানে বিদ্যমান ইউজাররা Add app-এ ক্লিক করবে)।

"Install for Ruby" সিলেক্ট করুন, যা আমাদের কয়েকটি সিম্পল স্টেপ দেবে ফলো করার জন্য:

  1. Gemfile-এ জেম যোগ করুন

    # Gemfile
    gem 'appsignal'
  2. bundle install রান করে জেম ইনস্টল করুন ডকার কন্টেইনারের ভিতরে, যেটি অ্যাক্সেস করতে পারেন yarn compose:sh দিয়ে

    $ yarn compose:sh
    # এখন আমরা একটি ডকার কন্টেইনারের ভিতরে bash কনসোলে আছি
    $ bundle install
    # এই কনসোলে থাকুন নেক্সট কমান্ডের জন্য
  3. AppSignal ইনস্টল করুন

    ইনস্টলেশনের সময় দুটি প্রম্পটের উত্তর দিতে হবে:

    • Do you want to change how this is displayed in AppSignal? (y/n): n
    • How do you want to configure AppSignal? : 1 ইনপুট করুন কারণ আমরা কনফিগ ফাইল ব্যবহার করব শুধু এনভায়রনমেন্ট ভেরিয়েবলের বদলে

    AppSignal সেটআপ পেজে দেখানো API কী ব্যবহার করুন:

    $ bundle exec appsignal install 
    ...
    #####################################
    ## AppSignal installation complete ##
    #####################################
    Sending example data to AppSignal...
    Example data sent! It may take about a minute for the data to appear on https://appsignal.com/accounts
    Please return to your browser and follow the instructions.

ইনস্টল স্ক্রিপ্ট রান করার পর, আপনি ব্রাউজারে দেখবেন AppSignal সেটআপ কমপ্লিট হয়েছে। তারপর Go to app-এ ক্লিক করুন আপনার ডেভেলপমেন্ট এনভায়রনমেন্টের AppSignal ড্যাশবোর্ড देखने জন্য:

ইনস্টলেশন কমান্ড একটি config/appsignal.yml তৈরি করে যা আপনাকে ভিন্ন এনভায়রনমেন্টের জন্য AppSignal সেটিংস কনফিগার করতে দেয়। AppSignal রুবি কনফিগারেশন ডক্সে আরও জানতে পারেন।

config/appsignal.yml-এ আপনার পুশ API কী আছে। সাধারণত এটিকে এই ফাইল থেকে রিমুভ করে এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করা হয়। এই পোস্টের জন্য তা প্রয়োজন নেই।

আমাদের অ্যাপ্লিকেশন রিস্টার্ট করতে হবে যাতে পরিবর্তনগুলো ইফেক্টিভ হয়, কারণ আমরা একটি নতুন জেম ইনস্টল করেছি। সবচেয়ে সহজ পথ হলো ডকার কন্টেইনার বন্ধ করা ctrl-c দিয়ে সার্ভার চলমান টার্মিনাল উইন্ডোতে এবং আবার ডকার কম্পোজ শুরু করা:

$ yarn start:compose

এতে কিছুটা সময় লাগতে পারে কারণ ডিপেন্ডেন্সি চেঞ্জ হলে ডকার ইমেজ রিবিল্ড হয়।

AppSignal মেইন ড্যাশবোর্ড

এখন অ্যাপ্লিকেশন AppSignal-এ সাথে চলছে, আমরা ড্যাশবোর্ড দেখতে পারি। AppSignal-এ চলমান সকল অ্যাপ্লিকেশন ও এনভায়রনমেন্ট देखने জন্য appsignal.com/accounts-এ যান:

অ্যাপ্লিকেশন নামের ওপর ক্লিক করুন এবং এক্সপ্লোর করুন AppSignal আউট-অফ-দ্য-বক্স কী মনিটর করে।

কয়েক মিনিটের মধ্যে ইতিমধ্যে কিছু ডেটা সংগৃহিত হবে আপনার ট্রাফিক জেনারেশন স্ক্রিপ্টের কারণে।

মেইন ড্যাশবোর্ড থেকে, আপনি কয়েকটি এসেনশিয়াল অ্যাপ্লিকেশন মেট্রিক্সের হাই-লেভেল ওভারভিউ পেতে পারেন। এখন আমরা AppSignal-এর কিছু স্পেসিফিক এলাকা খনন করব।

AppSignal-এ Errors ড্যাশবোর্ড

Errors পেজে, আপনার অ্যাপ্লিকেশন দ্বারা রিপোর্ট করা সকল এরর লিস্ট থাকে। ইনস্টল স্ক্রিপ্ট রান করলে একটি টেস্ট এরর AppSignal-এ পাঠানো হয়েছিল। আপনি দেখবেন একটি এরর রেগুলারলি ঘটছে। এররটির ওপর ক্লিক করলে একটি পেজ খুলবে আরও ডিটেইলসহ, যা ইস্যু ডিবাগ করতে উপকারী।

এই কেসে, ব্যাকট্রেস সেকশন থেকে দেখা যায় অ্যাপ্লিকেশনের হোমপেজে (/) একটি ভ্যালিডেশন এরর হচ্ছে app/controllers/pages_controller.rb:7 home-এ।

AppSignal-এর অন্যান্য ড্যাশবোর্ড

সাইডবারে Dashboard-এর নিচে, AppSignal আমাদের ইতিমধ্যে কয়েকটি ড্যাশবোর্ড দিয়েছে।

Overview ড্যাশবোর্ড প্রতিটি অ্যাপ্লিকেশনের জন্য উপলব্ধ এবং প্রদান করে:

  • আপনার অ্যাপ্লিকেশন এরর রেট
  • থ্রুপুট
  • রেসপন্স টাইম
  • অন্যান্য সাম্প্রতিক এক্টিভিটি যেগুলো ক্লিক করে ডিটেইলস পাওয়া যায়

আপনার দুটি ম্যাজিক ড্যাশবোর্ডও আছে — একটি Active Job-এর জন্য এবং অন্যটি Sidekiq-এর জন্য। AppSignal-এ অনেক পপুলার ফ্রেমওয়ার্ক ও জেমের বিল্ট-ইন ইন্টিগ্রেশন আছে যা আপনার রেইলস অ্যাপ্লিকেশনের সাথে অটোমেটিক্যালি কাজ করে।

এই ড্যাশবোর্ডগুলো দেখতে পাবেন সেই ইন্টিগ্রেশন-এর রিলेवেন্ট ইনফরমেশন। Active Job ড্যাশবোর্ডে, প্রতিটি কিউয়ে জবের সংখ্যা, প্রতিটি জবের রেকর্ডেড ডুরেশন, এবং আরও অনেক কিছু দেখতে পাবেন। একবার দেখুন!

আপনার অ্যাপের পারফরম্যান্স

Performance → Issue list-এর ভিতরে, আপনি AppSignal যে অ্যাকশনগুলো মেজার করে সেগুলোর লিস্ট দেখতে পারেন। এই মেজারমেন্টগুলো আপনার অ্যাপ্লিকেশনের কোন অংশে অনেক পারফরম্যান্স খরচ হচ্ছে সে সম্পর্কে মূল্যবান ইনসাইট দিতে পারে।

উদাহরণস্বরূপ, PostsController#index একশনের ইস্যুতে ক্লিক করলে, আমরা কন্ট্রোলারের পারফরম্যান্সে গভীরে নেমে যেতে পারি। আপনি দ্রুত দেখতে পাবেন কোথায় সবচেয়ে বেশি টাইম খরচ হচ্ছে, অথবা সবচেয়ে বেশি অবজেক্ট এলোকেশন হচ্ছে।

AppSignal থেকে কুইক উইনস ও হিডেন জেমস: Puma ব্যবহার

AppSignal থেকে কিছু হিডেন জেম (রুবি ধরনের নয়) পাওয়া যায় কম প্রচেষ্টায়। এক উদাহরণ দিয়ে দেখি কত সহজে এইগুলো আপ ও রানিং করা যায়।

config/puma.rb-এ নিচের লাইনটি যোগ করুন:

# config/puma.rb
plugin :appsignal

আবার অ্যাপ্লিকেশন রিস্টার্ট করার আগে, docker-compose.yml-এ লাইন ১২-এর পর নিচের এনভায়রনমেন্ট ভেরিয়েবল যোগ করুন:

# docker-compose.yml
APP_REVISION: "latest_version_tag"

যেহেতু আমরা Puma সার্ভার কনফিগ এবং ডকার-কম্পোজ কনফিগ আপডেট করেছি, ডকার কন্টেইনার রিস্টার্ট করতে হবে ctrl-c দিয়ে এবং আবার yarn start:compose দিয়ে ডকার-কম্পোজ শুরু করতে হবে।

আপনার নতুন ইনসাইট ট্র্যাক করা

সার্ভার রিস্টার্ট হওয়ার পর, প্রায় এক মিনিট চলতে দিন, তারপর AppSignal ড্যাশবোর্ডে ফিরে আসুন এবং পেজ রিফ্রেশ করুন। এখন দুটি মূল এলাকায় নতুন ইনফরমেশন আছে:

প্রথমটি হলো নতুন অটোমেটিক্যালি জেনারেটেড Puma মেট্রিক্স ম্যাজিক ড্যাশবোর্ড। AppSignal-এর Puma-এর সাথে বিল্ট-ইন ইন্টিগ্রেশনের কারণে, এখন আমাদের অ্যাপ্লিকেশন সার্ভারের এক্টিভিটি সম্পর্কে ইনফরমেশন আছে। কনফিগ ফাইলে plugin স্পেসিফাই করলে একটি মিনিটligen প্রোব এক্টিভেট হয়েছে যা Puma সার্ভার সম্পর্কে মেট্রিক্স রিপোর্ট করে।

শেষত, পুরো AppSignal ড্যাশবোর্ড জুড়ে এখন ডিপ্লয়মেন্ট মার্কার আছে। আপনি APP_REVISION এনভায়রনমেন্ট ভেরিয়েবলকে যেকোনো ভ্যালু সেট করতে পারেন যা আপনার অ্যাপ্লিকেশন বর্তমান ভার্সন ডিটারমাইন করতে সাহায্য করে, যেমন git commit SHA।

আপনি আপনার ডিপ্লয়মেন্ট ইতিহাসও দেখতে পারেন AppSignal ড্যাশবোর্ডের Deploys সেকশনে এবং ইনসাইট ফিল্টার করতে পারেন (Errors/Performance issue lists) ডিপ্লয় দিয়ে। দেখুন পারফরম্যান্স বা রিলায়েবিলিটি কীভাবে পরিবর্তন হয়েছে ডিপ্লয়ের মাঝপথে, যা কোনো চেঞ্জ নতুন বাগ ইন্ট্রোডিউস করেছে কিনা সেটি খুঁজে বের করতে কিছুটা সহজ করে দেয়।

পরবর্তী: রুবি অ্যাপের জন্য কাস্টম ইনস্ট্রুমেন্টেশন ও মনিটরিং

এই পোস্টে দেখানো হয়েছে কীভাবে আপনি AppSignal সেট আপ ও ব্যবহার করতে পারেন আপনার অ্যাপ্লিকেশনগুলিতে যাতে কোডের ভিজিবিলিটি বাড়ে প্রোডাকশনে।

আমরা দেখিয়েছি AppSignal কীভাবে রেইলস এবং অ্যাপ্লিকেশনের কিছু ডিপেনডেন্সি (যেমন Sidekiq এবং Puma) এর সাথে অটোমেটিক্যালি ইন্টিগ্রেট হয়। AppSignal আরও অনেক রুবি ফ্রেমওয়ার্ক ও জেমের সাথে আউট-অফ-দ্য-বক্স কাজ করে। AppSignal-এর সম্পূর্ণ রুবি ইন্টিগ্রেশন লিস্ট এখানে পাবেন।

এই সিরিজের পার্ট ২ কভার করবে কীভাবে আপনার রুবি অন রেইল্স অ্যাপ্লিকেশনে কাস্টম ইনস্ট্রুমেন্টেশন ও মনিটরিং যোগ করতে হয় গভীর ইনসাইটের জন্য।

পরের বার পর্যন্ত!

P.S. Ruby Magic পোস্টগুলো প্রেস থেকে বের होतेই পেতে চাইলে, আমাদের Ruby Magic নিউজলেটার সাবস্ক্রাইব করুন এবং কোনো পোস্ট মিস করবেন না!

  1. Vue, Vuex, এবং Rails দিয়ে ফুল-স্ট্যাক ডেভেলপমেন্ট মাস্টার করুন: একটি স্কেলেবল পদ্ধতি

  2. Angular এবং Rails 5 ইন্টিগ্রেশন: একটি স্মুথ ফুল-স্ট্যাক পদ্ধতি

  3. পাওয়ারফুল রুবি CLI টুল বিল্ড করুন: একটি স্টেপ-বাই-স্টেপ গাইড

  4. Ruby on Rails মাস্টারিং: এই প্রমাণিত ফ্রেমওয়ার্ক দিয়ে দ্রুত পাওয়ারফুল ওয়েব অ্যাপ বানান