কম্পিউটার

নামস্থান সহ মনোলিথিক অ্যাপ্লিকেশনগুলিতে মনিটরিং ডেটা গঠন করা

নেমস্পেস কি?

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

ডিফল্টরূপে, প্রতিটি অ্যাপ্লিকেশন তিনটি ডিফল্ট নামস্থান দিয়ে শুরু হয়:web , background , এবং frontend .

  • ওয়েব নেমস্পেস আপনার সমস্ত HTTP অনুরোধ ধারণ করে। MVC-ভিত্তিক ফ্রেমওয়ার্ক যেমন রেল বা সিনাত্রার মধ্যে, এতে কন্ট্রোলার অ্যাকশন অন্তর্ভুক্ত থাকে।
  • ব্যাকগ্রাউন্ড নেমস্পেস ব্যাকগ্রাউন্ডের কাজ, লাইব্রেরি এবং টাস্কের কার্যকলাপ ধারণ করে।
  • ফ্রন্টএন্ড নেমস্পেস জাভাস্ক্রিপ্ট ইন্টিগ্রেশনের জন্য AppSignal দ্বারা প্রেরিত ইভেন্টগুলি লগ করে৷

AppSignal বিল্ট-ইন প্রতি-অ্যাপ্লিকেশন এবং প্রতি-একীকরণ নিয়ম ব্যবহার করে আগত ইভেন্টগুলিকে ম্যাপ করে। যাইহোক, আপনি যেকোন সময় এই ম্যাপিংগুলি পরিবর্তন করতে পারেন এবং এমনকি আপনার অ্যাপ্লিকেশন কাঠামোর মডেল করার জন্য নতুন নামস্থান তৈরি করতে পারেন৷

রুবিতে নেমস্পেস ব্যবহার করে দেখুন

আসুন একটি রুবি অন রেল (ROR) অ্যাপ্লিকেশনে নেমস্পেস ব্যবহার করে দেখুন। rails new সহ একটি নতুন রেল প্রকল্প তৈরি করার পরে৷ এবং রেল ইন্টিগ্রেশন সেট আপ করলে, আপনি web পাবেন আপনার ড্যাশবোর্ডে নামস্থান।

AppSignal যেকোনো কন্ট্রোলার থেকে লেনদেন পাওয়ার সাথে সাথে নামস্থান দেখায়।

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

AppSignal ব্যাকগ্রাউন্ড নেমস্পেসে অ্যাকশন বরাদ্দ করে কারণ এটি Sidekiqকে কাজের প্রসেসর হিসেবে স্বীকৃতি দেয়। AppSignal সেখানকার বেশিরভাগ জনপ্রিয় ব্যাকগ্রাউন্ড প্রসেসরের সাথে একীভূত করে, কিন্তু যদি আপনারটি বাদ দেওয়া হয়, তাহলে আপনি সর্বদা আপনার কাজের জন্য ম্যানুয়ালি ইন্সট্রুমেন্টেশন যোগ করতে পারেন।

কাস্টম নেমস্পেস তৈরি করা হচ্ছে

বড় একচেটিয়া অ্যাপ্লিকেশনে, ডিফল্ট নেমস্পেসগুলি খুব সাধারণ মনে হতে পারে। একটি বড় ওয়েবসাইট সাধারণত স্ট্যাটিক কন্টেন্ট, ডাইনামিক পেজ, এপিআই এন্ডপয়েন্ট, অন্যান্য ওয়েব সার্ভিসের মধ্যে দিয়ে থাকে। এর বেশিরভাগই web এ শেষ হবে নামস্থান।

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

সুতরাং, আমাদের অগ্রাধিকার এবং দায়িত্বের ক্ষেত্র অনুসারে নামস্থানগুলি সংগঠিত করা উচিত। তারপরে আমরা পৃথক বিজ্ঞপ্তি নীতি সংযুক্ত করতে পারি এবং শুধুমাত্র আগ্রহী পক্ষগুলিকে সতর্ক করতে পারি। এই যুক্তি অনুসরণ করে, আমরা login_page-এর জন্য কাস্টম নেমস্পেস তৈরি করতে পারি , api_endpoints , এবং admin_panel .

রুবিতে একটি নতুন নামস্থান তৈরি করতে, আমরা Appsignal.set_namespace ব্যবহার করব . নিচের কোডটি দেখুন, যা urgent_background নামক একটি নামস্থানে একটি কাজ তৈরি করে :

class FetchPricesWorker
    include Sidekiq::Worker
 
    def perform
        Appsignal.set_namespace("urgent_background")
 
        # worker code ...
 
    end
end

একবার আমরা এই পরিবর্তনটি করে ফেলি এবং অ্যাপটি পুনরায় চালু করলে, এই নতুন চাকরিগুলি নতুন তৈরি করা নামস্থানে উপস্থিত হবে:

ড্যাশবোর্ডে অ্যাকশন নাম চেক করে আমরা নিশ্চিত করতে পারি যে আসল কাজটি লগ করা হয়েছে:

কাস্টম নেমস্পেসগুলিও সমস্ত ইন্টিগ্রেশনে কাজ করে৷

নেমস্পেস উপেক্ষা করা

কাস্টম নেমস্পেসগুলির আরেকটি সুবিধা হল যে তারা আমাদের অ্যাপ্লিকেশনের অংশগুলির ইভেন্টগুলিকে উপেক্ষা করতে দেয় যা আমরা যত্ন করি না। উদাহরণস্বরূপ, আমরা admin_panel থেকে ইভেন্ট উপেক্ষা করতে পারি সম্পূর্ণরূপে।

একটি নামস্থান উপেক্ষা করার জন্য তিনটি ধাপ লাগে:

  1. যে অংশগুলিকে আমরা একটি কাস্টম নেমস্পেসে নিরীক্ষণ করতে চাই না সেগুলি বরাদ্দ করুন৷
  2. নেমস্পেস উপেক্ষা করতে ইন্টিগ্রেশন কনফিগার করুন।
  3. আপনার অ্যাপ রিস্টার্ট করুন।

রুবির জন্য, AppSignal কনফিগারেশন ফাইলে ignore_namespaces বিকল্পটি যোগ করুন:

production:
  ignore_namespaces:
    - "admin_panel"

একটি নেমস্পেস উপেক্ষা করা সমস্ত লেনদেন এড়িয়ে যায় এবং উৎসে ডেটা স্প্যান করে। কাস্টম মেট্রিক ডেটা এখনও রিপোর্ট করা হয়েছে৷

এলিক্সির এবং জাভাস্ক্রিপ্ট ইন্টিগ্রেশনের অনুরূপ বিকল্প রয়েছে। আরো বিস্তারিত জানার জন্য উপেক্ষা করার নামস্থান নির্দেশিকা দেখুন।

মনোলিথিক অ্যাপ্লিকেশনের জন্য নামস্থান

এখন যেহেতু আমরা জানি নেমস্পেসগুলি কীভাবে কাজ করে, আসুন কয়েকটি উপায় পরীক্ষা করে দেখি যে আমরা একটি মনোলিথিক অ্যাপ্লিকেশনকে বিভাজন করতে সেগুলি ব্যবহার করতে পারি৷

যদিও কোন নির্দিষ্ট নিয়ম নেই, পার্টিশনিং দুটি কৌশলে ফোটে। আপনি একটি শুরু বিন্দু হিসাবে তাদের মধ্যে একটি বা উভয়ের মিশ্রণ চয়ন করতে পারেন:

  • ভূমিকা অনুসারে :আমরা প্রকল্পের মধ্যে কার্যকরী বা যৌক্তিক ইউনিটে নামস্থান বরাদ্দ করি। এইভাবে, আমরা billing এর মতো নামস্থান সংজ্ঞায়িত করা বুদ্ধিমান মনে করতে পারি , sign_in অথবা sign_up , admin_panel , এবং homepage . AppSigal ড্যাশবোর্ডে এক নজরে দেখুন এবং আপনি বুঝতে পারবেন অ্যাপ্লিকেশনটির প্রতিটি অংশে কী চলছে। এই পদ্ধতিটি ভাল কাজ করে যখন কোডটি পরিষ্কার সীমানা দ্বারা সুন্দরভাবে বিভক্ত করা যায়৷
  • তীব্রতার দ্বারা :এখানে আমরা একটি অগ্রাধিকারমূলক ডিভাইস হিসাবে নামস্থান ব্যবহার করি। কোডের কোন অংশগুলি critical তা নির্ধারণ করা আপনার উপর নির্ভর করে , critical , medium , অথবা low . এই পদ্ধতির সাহায্যে আপনি প্রথমে কোন সমস্যার সমাধান করতে চান তা অবিলম্বে সমাধান করতে পারবেন।

ধরুন আমাদের একটি কন্ট্রোলার আছে যা ব্যবহারকারীর সাইন ইন এবং রেজিস্ট্রেশন পরিচালনা করে। ভূমিকা দ্বারা বিভাজন নির্বাচন করার সময়, আমরা তাদের user_login এ ম্যাপ করতে পারি নামস্থান।

# in Rails we use before_action callback to change
# the namespace before the request starts
class LoginController < ApplicationController
    before_action :set_appsignal_namespace
 
    def set_appsignal_namespace
        # Sets the namespace
        Appsignal.set_namespace("user_login")
    end
 
    # controller actions ...
end

কিন্তু আপনি যদি অগ্রাধিকারের নামস্থান ব্যবহার করতে পছন্দ করেন, তাহলে বিলিং-এর দায়িত্বে থাকা একজন নিয়ামক সম্ভবত critical-এ যাবেন নামস্থান।

class BillingPageController < ApplicationController
    before_action :set_appsignal_namespace
 
    def set_appsignal_namespace
        Appsignal.set_namespace("critical")
    end
end

এগুলি থেকে উত্তরাধিকারসূত্রে পাওয়া নিয়ন্ত্রকরা তাদের পিতামাতার মতো একই নামস্থান ভাগ করে:

# any controllers that inherit from LoginController
# are also part of the "user_login" namespace
class RegistrationController < LoginController
 
    # there’s no need for before_action here
    # this controller already reports to the parent’s namespace
 
end

আমরা যেমন দেখেছি, চাকরি এবং কাজগুলি স্বয়ংক্রিয়ভাবে background-এ বরাদ্দ করা হয় নামস্থান যখনই সম্ভব, আমাদের তাদের আরও নির্দিষ্ট কিছুতে বরাদ্দ করা উচিত। উদাহরণস্বরূপ, একটি ডাটাবেস পরিষ্কারের কাজ database-এ যেতে পারে নামস্থান, এইরকম:

class ActiveJobDatabaseCleanupJob < ActiveJob::Base
  queue_as :default
 
  def perform(argument = nil, options = {})
    Appsignal.set_namespace("database")

চাকরির ক্ষেত্রেও অগ্রাধিকার কাজ করে। আমরা low কে গুরুত্বহীন কাজ বরাদ্দ করতে পারি উদাহরণস্বরূপ, এই রেক টাস্কের মতো:

task :unimportant_job do
 
  # Run this rake job in the low namespace
  Appsignal.set_namespace("low")
 
  # job code ...
 
end

কিছু ক্ষেত্রে, আপনি একটি ম্যানুয়াল লেনদেন ব্যবহার করে ক্রিয়াগুলি লগ করতে চাইবেন৷ আপনি এটি তৈরি করার সময় নামস্থানটি সংজ্ঞায়িত করতে পারেন, যেমন নিম্নলিখিত উদাহরণে, যা একটি কাস্টম মেইলার কাজ কোড করে:

class Job
    def perform
 
        # Create a transaction for this job and set the namespace
        transaction = Appsignal::Transaction.create(
            SecureRandom.uuid,
            "mailer",
            Appsignal::Transaction::GenericRequest.new(ENV.to_hash)
        )
 
        # job code ...
 
    end
end

নেমস্পেস এবং বিজ্ঞপ্তি

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

প্রতি-নেমস্পেস নোটিফায়ার সেট আপ করা হচ্ছে

আমরা বিজ্ঞপ্তি গ্রুপ তৈরি করতে পারি যেগুলি শুধুমাত্র নির্দিষ্ট নামস্থানের জন্য সক্রিয়। উদাহরণস্বরূপ, আমরা web-এ ত্রুটির জন্য ইমেল পাঠাতে পারি নামস্থান, অথবা frontend-এ সমস্যার জন্য #frontend Slack চ্যানেলে একটি বার্তা পাঠান নামস্থান।

প্রতি-নেমস্পেস বিজ্ঞপ্তি গোষ্ঠী তৈরি করতে, অ্যাপ সেটিংস> বিজ্ঞপ্তি> বিজ্ঞপ্তিতে যান এবং একীকরণ যোগ করুন এ ক্লিক করুন .

একীকরণের একটি নির্বাচন করুন এবং এর নাম টাইপ করুন। কোন ধরনের বার্তা পাঠাতে হবে এবং কোন নামস্থানের জন্য বেছে নিন। উদাহরণস্বরূপ, আসুন #frontend-এর জন্য একটি স্ল্যাক বিজ্ঞপ্তি তৈরি করি চ্যানেল।

যখন আমরা এখনও এখানে আছি, ব্যাকএন্ড বিকাশকারীদের জন্য একটি দ্বিতীয় বিজ্ঞপ্তি তৈরি করুন:

দলকে যা কিছু ঘটছে তার সাথে আপ টু ডেট রাখার জন্য আপনি যতগুলি নোটিফায়ার কনফিগার করতে পারেন।

প্রতি-নেমস্পেস বিজ্ঞপ্তিগুলি পরিবর্তন করা হচ্ছে

একটি ঘটনা তৈরি হলে, AppSignal একটি বিজ্ঞপ্তি নীতি প্রয়োগ করবে। এই নীতিটি যে নামস্থান থেকে ত্রুটিটি আসে তার উপর ভিত্তি করে। আমরা প্রতিটি নামস্থানের জন্য পৃথক নীতি নির্ধারণ করতে পারি।

আপনার অ্যাপ্লিকেশনের জন্য নামস্থান ডিফল্ট দেখতে, অ্যাপ সেটিংস> বিজ্ঞপ্তি> নেমস্পেস ডিফল্ট এ যান .

এখানে, আপনি প্রতিটি নামস্থানের জন্য ত্রুটি এবং কর্মক্ষমতা বিজ্ঞপ্তিগুলি কাস্টমাইজ করার বিকল্পগুলি খুঁজে পাবেন:

  • প্রতিটি ঘটনা :5-মিনিট কুলডাউন সহ প্রতিবার কোনো ঘটনা ট্রিগার হলে বিজ্ঞপ্তি পাঠায়।
  • প্রথম স্থাপনে :অ্যাপ্লিকেশানটি স্থাপন করার পরে প্রথম ত্রুটি সম্পর্কে আপনাকে অবহিত করে৷
  • প্রথম পরে বন্ধ :প্রথমবার একটি বন্ধ সমস্যা পুনরায় খোলা হলে একটি বিজ্ঞপ্তি পাঠায়৷
  • কখনও অবহিত করবেন না :বিজ্ঞপ্তিগুলি সম্পূর্ণরূপে নিষ্ক্রিয় করে৷

প্রতি-নেমস্পেস ট্রিগার তৈরি করা

ট্রিগারগুলি অ্যাপসিগন্যালকে একটি ঘটনা তৈরি করতে বলে এবং একটি মেট্রিক পূর্বনির্ধারিত মানের উপরে বা নীচে গেলে বিজ্ঞপ্তি পাঠাতে বলে৷ যেহেতু একটি অ্যাপ্লিকেশনের বিভিন্ন অংশের বিভিন্ন থ্রেশহোল্ড থাকতে পারে, তাই আমাদের প্রতিটি নামস্থানের জন্য আলাদা ট্রিগার তৈরি করা উচিত। ক্লাসিক উদাহরণ হল একটি ট্রিগার যা web এ থ্রুপুট খুব কম হলে আমাদের সতর্ক করে নামস্থান।

একটি ট্রিগার তৈরি করতে, অ্যানোমালি ডিটেকশন> ট্রিগারগুলিতে যান এবং আপনার প্রথম ট্রিগার যোগ করুন এ ক্লিক করুন .

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

এখানে আপনি সংজ্ঞায়িত করতে পারেন কোন গোষ্ঠীগুলিকে অবহিত করা উচিত৷ চূড়ান্ত করতে, সেভ ট্রিগার-এ ক্লিক করুন .

উপসংহার

নেমস্পেসগুলি আপনার অ্যাপ্লিকেশনের মনিটরিং ডেটা বোঝাতে দেয়। এগুলি সূক্ষ্ম স্তরে গুলি চালানোর বিজ্ঞপ্তি এবং ঘটনাগুলি, শব্দ সীমিত করা এবং মিথ্যা ইতিবাচক এড়ানোর জন্যও অপরিহার্য৷

রুবি, Node.js, এবং Elixir-এ কাস্টম নেমস্পেসগুলি কীভাবে কাজ করে তা পরীক্ষা করার পরে, কীভাবে নামস্থান ব্যবহার করতে হয় তা শেখা চালিয়ে যেতে পরবর্তী পড়ুন:

  • অ্যাপসিগন্যালে নামস্থান
  • নেমস্পেস সহ গ্রুপিং
  • মনিটরিং ওয়েবহুক এবং ব্যাকগ্রাউন্ড জবসের মধ্যে পার্থক্য কী
  • জেম 2.2 - কাস্টম নেমস্পেস!

  1. ডেটা স্ট্রাকচারে চেইনিংয়ের সাথে হ্যাশিং

  2. রেল অ্যাপ্লিকেশনে রুবিতে HTTP ক্যাশিং

  3. রুবি দিয়ে কীভাবে কমান্ড-লাইন অ্যাপ্লিকেশন (সিএলআই) তৈরি করবেন

  4. এক্সেলে VBA সহ ডেটা যাচাইকরণ ড্রপ ডাউন তালিকা (7 অ্যাপ্লিকেশন)