শুধু আপনার অ্যাপ্লিকেশন মনিটর করা সবসময় আপনার সিস্টেমের পূর্ণ ছবি পাওয়ার জন্য পর্যাপ্ত নয়। স্যাটেলাইট অ্যাপস (satellite apps) বা সাপোর্টিং অ্যাপস (supporting apps) এ চলমান সার্ভিসগুলো প্রায়শই আপনার দৈনন্দিন অপারেশনসে তীব্র প্রভাব ফেলতে পারে। ডাটাবেস সার্ভারগুলো এর সবচেয়ে পরিচিত উদাহরণ। ব্যাকআপ স্ক্রিপ্টস (backup scripts) এবং অন্যান্য ব্যাকগ্রাউন্ড জবসও সিস্টেম স্লো করতে পারে এবং প্রায়শই অানচ চলে যায়।
Node.js-এর জন্য AppSignal APM, এবং Ruby APM এবং Elixir APM আপনার অ্যাপকে অটোমেটিক্যালি ইন্সট্রুমেন্ট (instrument) করে। কিন্তু AppSignal ডিফল্টলি এই স্যাটেলাইট প্রসেসগুলো واچ (watch) করে না। সব জায়গায় মনিটরিং এক্সটেন্ড করতে এবং আপনার সকল ডেটা একটি সিঙ্গেল অ্যাপে পাওয়ার জন্য, আপনি AppSignal-এর স্ট্যান্ডঅ্যালোন এজেন্ট (standalone agent) ইনস্টল করতে পারেন।
AppSignal-এর Standalone Agent
স্ট্যান্ডঅ্যালোন এজেন্ট একই সফটওয়্যারের ওপর ভিত্তি করে তৈরি যা আমরা সাধারণত রুবি, ইলিক্সির (Elixir), বা জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন ইন্সট্রুমেন্ট করতে ব্যবহার করি। এই সফটওয়্যার স্ট্যান্ডঅ্যালোন মোডেও রান করতে পারে।
স্ট্যান্ডঅ্যালোন এজেন্ট ব্যবহার করা যায়:
- ইনফ্রাস্ট্রাকচার: যেসব মেশিন আমাদের সিস্টেমের অংশ কিন্তু অ্যাপ্লিকেশন কোড রান করে না।
- ব্যাকগ্রাউন্ড জবস: ইনটেনসিভ ক্রন জবস (intensive cron jobs) বা লং-রানিং ডেটা-প্রসেসিং স্ক্রিপ্টস। যদি এই ব্যাকগ্রাউন্ড জবস সাপোর্টেড ল্যাঙ্গুয়েজে (রুবি, ইলিক্সির, বা Node.js) লেখা থাকে, আপনি স্ট্যান্ডার্ড ইন্টিগ্রেশন ব্যবহার করতে পারেন।
- আরো ল্যাঙ্গুয়েজ: বক্সের বাইরে সাপোর্টেড ল্যাঙ্গুয়েজ ছাড়া অন্যান্য ল্যাঙ্গুয়েজে লেখা প্রোগ্রাম।
উদাহরণস্বরূপ, স্ট্যান্ডঅ্যালোন এজেন্ট দিয়ে, আমরা একটি মেশিন লার্নিং মডেল যা পাইথনে (Python) লেখা, ইন্সট্রুমেন্ট করতে পারি, ব্যাকআপ স্ক্রিপ্টস মনিটর করতে পারি, কাফ্কা ব্রোকারস (Kafka brokers) মনিটর করতে পারি, বা আমাদের ওয়েব ফার্মসের হোস্ট মেট্রিক্স কালেক্ট করতে পারি। আপনি AppSignal-এ এই সকল ইনফরমেশন দেখতে পারেন আপনার মেইন অ্যাপ্লিকেশনগুলোর মেট্রিক্স সম্প্লিমেন্ট (complement) করতে।
এটি কীভাবে কাজ করে (How It Works)
এজেন্টটি deb বা rpm প্যাকেজ হিসেবে শিপ করা হয় এবং এর কোনো ল্যাঙ্গুয়েজ ডিপেন্ডেন্সি (language dependencies) নেই। এটি যেকোনো Debian/Ubuntu বা Red Hat-ভিত্তিক সিস্টেমে রান করে। ডিটেইলড ইনস্টলেশন ইনস্ট্রাকশনের জন্য, এজেন্ট ডকুমেন্টেশন চেক করুন।
একবার ইনস্টল হলে, এজেন্ট কিছু মিনিটে কনফিগার হয়ে যেতে পারে এবং একটি ডেমন (daemon) হিসেবে চিরকাল চলে, সাইলেন্টলি আপনার ইনফ্রাস্ট্রাকচার মনিটর করে। আরো বেশি, এজেন্টে একটি StatsD সার্ভার অন্তর্ভুক্ত থাকে যা আপনার লগ করা যেকোনো কাস্টম ডেটা আপনার AppSignal ড্যাশবোর্ডে রিলে (relay) করে।
StatsD কী? (What Is StatsD?)
StatsD যেকোনো ডেটা কালেক্ট এবং অ্যাগ্রিগেট (aggregate) করার একটি স্ট্যান্ডার্ড। এটি মেট্রিক এবং পারফরম্যান্স ইনফরমেশন লগ করার ওপর ফোকাস করে। এটি একটি লাইটওয়েট টেক্সট প্রোটোকল (lightweight text protocol) UDP কানেকশনস ওভার ব্যবহার করে যেটি আপনার মেশিনে ছোট ফুটপ্রিন্ট (footprint) রাখে।
একটি StatsD মেসেজ এরকম দেখায়:
যেখানে KEY যেকোনো আর্বিট্রারি স্ট্রিং (arbitrary string), এবং VALUE একটি নম্বর। টাইপ ভ্যালু ডিফাইন করে নম্বরটি কীভাবে প্রসেস হবে।
আমরা তিনটি টাইপের মেট্রিক্স সাপোর্ট করি:
- c: এটি একটি কাউন্টার (counter) যা প্রতিবার কল হলে ইনক্রিমেন্ট হয়। উদাহরণস্বরূপ,
active_users:1|cactive_usersকাউন্টারে ১ যোগ করে। - g: একটি গেজ (gauge) একটি নামারিক ভ্যালু নেয় এবং আপডেট হওয়া পর্যন্ত সেটি মেইনটেইন করে। এটি ভ্যালু রেকর্ড করতে উপযোগী যেটি সময়ের সাথে আপ-ডাউন (up and down) হয়, যেন থ্রুপুট, এক্টিভ ইউজার সংখ্যা, বা একটি কিউতে পেন্ডিং টাস্কের সংখ্যা।
- t: টাইমিং (timing) ভ্যালু স্টোর করে। এই টাইপটি ডুরেশন (durations) ট্র্যাক করার জন্য আইডিয়াল। AppSignal মিন (mean), কাউন্ট, এবং পার্সেন্টাইলস (percentiles) ক্যালকুলেট করে সকল লগড টাইমিংসের জন্য।
অন্যান্য অনসাপোর্টেড মেট্রিক টাইপস সাইলেন্টলি ইগনোর (ignored) হবে।
StatsD-এ ডেটা পাঠানো (Sending Data to StatsD)
স্ট্যান্ডঅ্যালোন এজেন্ট পোর্ট ৮১২৫-এ UDP প্যাকেটস জন্য লিসেন (listen) করে। আমরা নেটক্যাট (netcat) ব্যবহার করে কমান্ড লাইন থেকে StatsD-ফরম্যাটেড স্ট্রিংস পাঠাতে পারি:
যেহেতু আমরা UDP ব্যবহার করছি, আমাদের রেসপন্সের জন্য অপেক্ষা করতে হয় না।
Socat-ও কাজ করে:
এটি যেকোনো ব্যাচ বা ক্রন জব ইন্সট্রুমেন্ট (instrument) করা সহজ করে দেয়। উদাহরণস্বরূপ, নিচের লাইনগুলো একটি গেজ (gauge) ব্যবহার করে লগ করে কত ডেটা একটি ব্যাকআপ জব জেনারেট করেছে:
আমরা শুধু ইন্টিজারস (integers) তে সীমাবদ্ধ নন। StatsD ফ্লোটিং-পয়েন্ট নম্বরসহও কাজ করে:
আপনি আপনার মেট্রিক্সে ট্যাগস যোগ করতে পারেন। StatsD সার্ভার মেসেজের শেষে অপশনাল ট্যাগস সাপোর্ট করে:
আমরা একই মেসেজে বেশ কিছু ট্যাগ অ্যাপ্লাই করতে পারি এবং ফিল্টারিং-এর জন্য ভ্যালু অ্যাসাইন করতে পারি:
আমরা কীভাবে AppSignal-এ ডেটা দেখব সেটি শীঘ্রই শিখব।
ল্যাঙ্গুয়েজ ইন্সট্রুমেন্ট করা (Instrumenting Languages)
StatsD সার্ভার যেকোনো ল্যাঙ্গুয়েজের সাথে কম্প্যাটিবল (compatible) যা UDP প্যাকেট পাঠাতে পারে। কয়েকটি উদাহরণ দেখি।
পাইথন (Python) ডেটা মাইনিং (data mining) এবং মেশিন লার্নিং-এ একটি জনপ্রিয় ল্যাঙ্গুয়েজ। আমরা বিল্ট-ইন socket লাইব্রেরি ব্যবহার করে পাইথন অ্যাপ্লিকেশনে ইন্সট্রুমেন্টেশন যোগ করতে পারি:
আমরা জাভা (Java)-এ java.net লাইব্রেরি ব্যবহার করে সাদৃশ্য ফলাফল অর্জন করতে পারি:
PHP অন্য একটি অবিশ্বাস্যভাবে জনপ্রিয় ল্যাঙ্গুয়েজ। আমরা socket_sendto ব্যবহার করে UDP প্যাকেট পাঠাতে পারি:
StatsD ক্লায়েন্টস (StatsD Clients)
এতক্ষণ, আমরা প্রতিটি ল্যাঙ্গুয়েজের বিল্ট-ইন নেটওয়ার্কিং ক্যাপাবিলিটি ব্যবহার করেছি। কিন্তু আরও আছে। অনেক ল্যাঙ্গুয়েজ এবং প্রোডাক্ট থার্ড-পার্টি StatsD ক্লায়েন্টস বা অ্যাডঅনস (addons) ইনক্লুড করে। যেকোনো StatsD-কম্প্লায়েন্ট (StatsD-compliant) ক্লায়েন্ট কাজ করা উচিত, কমপক্ষে সাপোর্টেড ডেটা টাইপসের জন্য। আপনি StatsD প্রজেক্ট উইকিতে ক্লায়েন্টদের তালিকা পাবেন।
AppSignal-এ হোস্ট ডেটা দেখা (Viewing Host Data in AppSignal)
Host Metrics ড্যাশবোর্ড আপনার মেশিনের রিসোর্স ইউটিলাইজেশন (resource utilization) দেখায়:

AppSignal স্ট্যান্ডঅ্যালোন এজেন্ট চালু থাকা প্রতিটি মেশিনের জন্য একটি এন্ট্রি যোগ করে।

ড্যাশবোর্ড লোড এবং CPU এভারেজ, ডিস্ক, নেটওয়ার্ক, মেমরি, এবং সোয়াপ (swap) ইউজেজ দেখায়:


ড্যাশবোর্ড তৈরি করা (Creating Dashboards)
AppSignal আপনার পাঠানো StatsD ভ্যালুদের জন্য অটোমেটিক্যালি ড্যাশবোর্ড জেনারেট করে না — আপনাকে এজন্য কাস্টম ড্যাশবোর্ড তৈরি করতে হবে।
প্রথম, ড্যাশবোর্ড মেনুর নিচে Add dashboard এ ক্লিক করুন:

ড্যাশবোর্ডের একটি নাম দিন:

Add graph বাটনে ক্লিক করলে গ্রাফ বিল্ডার (graph builder) দেখাবে:

গ্রাফের একটি নাম দিন, এবং Add metric এ ক্লিক করুন:

মেনু থেকে আপনার আগ্রহের মেট্রিকটি পিক করুন।

ঐচ্ছিকভাবে, ফিল্টারিং-এর জন্য ট্যাগস ব্যবহার করুন:

পরবর্তী, Back to overview এ ক্লিক করুন। আপনি ভিন্ন গ্রাফ টাইপস এবং ভ্যালু ইউনিটস ট্রাই করতে চাইতে পারেন খুঁজে বের করতে কোনটি আপনার রিপ্রেজেন্ট করতে চান ডেটা সেটির জন্য সেরা।
টাইমিং ডেটা এরিয়া গ্রাফস (area graphs) এর সাথে ভালো দেখায় কারণ মিন (mean) এবং পার্সেন্টাইলস (percentiles) আরও স্পষ্ট দেখানো হয়।

লাইন গ্রাফস (line graphs) কাউন্টারস (counters) এবং গেজস (gauges) এর জন্য চমৎকার কাজ করে।

একবার আপনি ফলাফল থেকে খুশি হলে, Create graph এ ক্লিক করুন।

দ্রষ্টব্য: আপনি যেকোনো অন্যান্য অটোমেটিক্যালি ইন্সট্রুমেন্টেড বা মেজারড মেট্রিক্সের জন্যও একটি ড্যাশবোর্ড যোগ করতে পারেন যদি আপনার AppSignal সেট আপ করা থাকে আপনার পারফরম্যান্স মনিটরিং টুল (APM) হিসেবে Node.js-এর জন্য, অথবা আপনার Ruby (on Rails) APM বা Elixir APM হিসেবে।
সমাপন (Wrapping Up)
আমরা শিখেছি কীভাবে AppSignal-এর স্ট্যান্ডঅ্যালোন সার্ভার ব্যবহার করে আপনার মেশিন এবং স্যাটেলাইট কোড واচ করতে হয়। এর বিল্ট-ইন StatsD সার্ভারের সাথে, আপনি আবি্ট্রারি পারফরম্যান্স ডেটা রেকর্ড করতে পারেন এবং যেকোনো প্রসেস ইন্সট্রুমেন্ট করতে পারেন।
স্ট্যান্ডঅ্যালোন এজেন্ট সম্পর্কে আরও জানতে নিচের লিংকগুলো চেক করুন:
- StatsD রেফারেন্স।
- কাস্টম মেট্রিক্স কীভাবে পাঠাবেন।
- AppSignal-এ ড্যাশবোর্ড তৈরি করা।
- স্ট্যান্ডঅ্যালোন এজেন্ট দিয়ে একটি কাফ্কা ইস্যু চিহ্নিত এবং সমাধান করা।
টোমাস ফার্নান্ডেজ (Tomas Fernandez)
আমাদের অতিথি লেখক টোমাস ১০ বছর IBM-এ কাজ করেছেন, যেখানে তিনি সব কিছু একটু করে ছিলেন — ডেভেলপমেন্ট, সার্ভিস ডেলিভারি, ডাটাবেস অ্যাডমিনিস্ট্রেশন, এবং ক্লাউড ইঞ্জিনিয়ারিং। তিনি এখন একটি ইনডিপেনডেন্ট কনসাল্ট্যান্ট এবং একটি টেকনিক্যাল রাইটার।
টোমাস ফার্নান্ডেজ-এর সব আর্টিকেল