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

StatsD এবং অ্যাপসিগনেলের স্ট্যান্ডঅ্যালোন এজেন্ট দিয়ে সব সিস্টেম ট্র্যাক করুন

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

Node.js-এর জন্য অ্যাপসিগনেল APM, এবং রুবি APM এবং ইলিক্সির APM আপনার অ্যাপকে আটোমেটিক্যালি ইনস্ট্রুমেন্ট করে। কিন্তু অ্যাপসিগনেল ডিফল্টভাবে এই স্যাটেলাইট প্রসেসগুলো দেখে না। সব জায়গায় মনিটরিং প্রসারিত করতে এবং আপনার সকল ডেটা একই অ্যাপে পাওয়ার জন্য, আপনি অ্যাপসিগনেলের স্ট্যান্ডঅ্যালোন এজেন্ট ইনস্টল করতে পারেন।

অ্যাপসিগনেলের স্ট্যান্ডঅ্যালোন এজেন্ট

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

স্ট্যান্ডঅ্যালোন এজেন্ট ব্যবহার করা যায় মনিটর করার জন্য:

  • ইনফ্রাস্ট্রাকচার: যেসব মেশিন আমাদের সিস্টেমের অংশ কিন্তু অ্যাপ্লিকেশন কোড চালায় না।
  • ব্যাকগ্রাউন্ড জব: যেমন ইনটেন্সিভ ক্রন জব বা দীর্ঘসময় চলমান ডেটা-প্রসেসিং স্ক্রিপ্ট। যদি এই ব্যাকগ্রাউন্ড জবগুলো সাপোর্টেড ল্যাঙ্গুয়েজে (রুবি, ইলিক্সির, বা Node.js) লেখা থাকে, তবে আপনি স্ট্যান্ডার্ড ইন্টিগ্রেশন ব্যবহার করতে পারেন।
  • আরও ভাষা: বক্সের বাইরে থেকে সাপোর্ট করা ভাষা ছাড়া অন্যান্য ভাষায় লেখা প্রোগ্রাম।

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

এটি কীভাবে কাজ করে

এজেন্টটি deb বা rpm প্যাকেজ হিসেবে শিপ করা হয় এবং এর কোনো ল্যাঙ্গুয়েজ ডিপেন্ডেন্সি নেই। এটি যেকোনো ডেবিয়ান/উবুন্টু বা রেড হ্যাট-ভিত্তিক সিস্টেমে চলে। বিস্তারিত ইনস্টলেশন নির্দেশনা জন্য এজেন্ট ডকুমেন্টেশন চেক করুন।

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

StatsD কী?

StatsD/tree آرবিত্রারি ডেটা কলেক্ট এবং এগরিগেট করার একটি স্ট্যান্ডার্ড। এটি মেট্রিক এবং পারফরম্যান্স ইনফরমেশন লগ করার ওপর ফোকাস করে। এটি UDP কানেকশন এর ওপর একটি লাইটওয়েট টেক্সট প্রোটোকল ব্যবহার করে যেটির আপনার মেশিনে ছোট ফুটপ্রিন্ট থাকে।

একটি StatsD মেসেজ এর রূপ এভাবে হয়:

KEY:VALUE|TYPE 

যেখানে KEY যেকোনো আর্বিট্রারি স্ট্রিং, এবং VALUE একটি নম্বর। টাইপ ভ্যালু নির্দেশ করে নম্বরটি কীভাবে প্রসেস হবে।

আমরা তিন ধরনের মেট্রিক সাপোর্ট করি:

  • c: এটি একটি কাউন্টার যা প্রতিবার কল হলে ইনক্রিমেন্ট হয়। উদাহরণস্বরূপ, active_users:1|c active_users কাউন্টারে ১ যোগ করে।
  • g: একটি গেজ একটি নিউমেরিক ভ্যালু নেয় এবং আপডেট না হওয়া পর্যন্ত সেটি মেইনটেইন করে। এটি সেই ভ্যালু রেকর্ড করার জন্য উপযোগী যা সময়ের সাথে সাথে আপ-ডাউন হয়, যেমন থ্রুপুট, এক্টিভ ইউজারের সংখ্যা, বা একটি কিউতে পেন্ডিং টাস্কের সংখ্যা।
  • t: টাইমিং ভ্যালু সংরক্ষণ করে। এই টাইপ ডিউরেশন ট্র্যাক করার জন্য আদর্শ। অ্যাপসিগনেল লগ করা সকল টাইমিং-এর মানে, কাউন্ট, এবং পারসেন্টাইল ক্যালকুলেট করে।

অন্যান্য অসাপোর্টেড মেট্রিক টাইপ সাইলেন্টলি উপেক্ষা করা হয়।

StatsD-এ ডেটা পাঠানো

স্ট্যান্ডঅ্যালোন এজেন্ট পোর্ট ৮১২৫-এ UDP প্যাকেটের জন্য লিসেন করে। আমরা নেটক্যাট ব্যবহার করে কমান্ড লাইন থেকে StatsD-ফরম্যাটেড স্ট্রিং পাঠাতে পারি:

echo -n "myscript.myevent.counter:1|c" | nc -4u -w0 localhost 8125

যেহেতু আমরা UDP ব্যবহার করছি, আমাদের রেসপন্সের জন্য অপেক্ষা করতে হয় না।

Socatও কাজ করে:

echo -n "myscript.myevent.counter:1|c" | socat - udp:localhost:8125

এটা যেকোনো ব্যাচ বা ক্রন জব ইনস্ট্রুমেন্ট করা সহজ করে দেয়। উদাহরণস্বরূপ, নিচের লাইনগুলো একটি গেজ ব্যবহার করে লগ করে একটি ব্যাকআপ জব কত ডেটা জেনারেট করেছে:

backup_size=$(du -m /backups | cut -f1) echo -n "backup.data:$backup_size|g" | nc -4u -w0 localhost 8125

আমরা শুধু ইন্টিজার পর্যন্ত সীমাবদ্ধ নই। StatsD ফ্লোটিং-পয়েন্ট নম্বরের সাথে ও কাজ করে:

echo -n "network.latency:0.2|g" | nc -4u -w0 localhost 8125

ট্যাগ ব্যবহার করা

আপনি আপনার মেট্রিকের সাথে ট্যাগ যোগ করতে পারেন। StatsD সার্ভার মেসেজের শেষে অপশনাল ট্যাগ সাপোর্ট করে:

KEY:VALUE|TYPE|#TAGS 

আমরা একই মেসেজে একাধিক ট্যাগ অ্যাপ্লাই করতে পারি এবং ফিল্টার করার জন্য মান অ্যাসাইন করতে পারি:

echo -n "backup.data:$backup_size|g|#backups,env:production" | nc -4u -w0 localhost 8125

আমরা অ্যাপসিগনেলে ডেটা কীভাবে দেখব সেটি একটু পরে জানব।

ভাষা ইনস্ট্রুমেন্ট করা

StatsD সার্ভার যেকোনো এমন ভাষার সাথে কম্প্যাটিবল যা UDP প্যাকেট পাঠাতে পারে। চলুন কিছু উদাহরণ দেখি।

পাইথন ডেটা মাইনিং এবং মেশিন লার্নিং-এর জনপ্রিয় ভাষা। আমরা বিল্ট-ইন socket লাইব্রেরি ব্যবহার করে পাইথন অ্যাপ্লিকেশনে ইনস্ট্রুমেন্টেশন যোগ করতে পারি:

import time # ফাংশন নেওয়া সময় মাপুন start = time.process_time() train_my_model() training_time = time.process_time() - start # ভ্যালু statsd-এ পাঠান import socket UDP_IP = "127.0.0.1" UDP_PORT = 8125 MESSAGE = b"model.training.time:" + bytes(str(training_time), 'utf-8') + b"|t" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

আমরা জাভাতে java.net লাইব্রেরি ব্যবহার করে অনুরূপ ফলাফল অর্জন করতে পারি:

byte[] buffer = "mybatch.exception.counter:1|c".getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); DatagramPacket packet = new DatagramPacket( buffer, buffer.length, address, 8125 ); DatagramSocket datagramSocket = new DatagramSocket(); datagramSocket.send(packet);

PHP একোনো অত্যন্ত জনপ্রিয় ভাষার উদাহরণ। আমরা socket_sendto ব্যবহার করে UDP প্যাকেট পাঠাতে পারি:

$msg = "mywebsite.active_users:$ACTIVE_USERS|g"; $len = strlen($msg); $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 8125); socket_close($sock);

StatsD ক্লায়েন্টস

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

অ্যাপসিগনেলে হোস্ট ডেটা দেখা

Host Metrics ড্যাশবোর্ড আপনার মেশিনের রিসোর্স ইউটিলাইজেশন দেখায়:

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

ড্যাশবোর্ড লোড এবং CPU গড়, ডিস্ক, নেটওয়ার্ক, মেমরি, এবং সওয়াপ ব্যবহার দেখায়:

ড্যাশবোর্ড তৈরি করা

অ্যাপসিগনেল আপনার পাঠানো StatsD ভ্যালুর জন্য অটোমেটিক্যালি ড্যাশবোর্ড জেনারেট করে না—আপনাকে এর জন্য কাস্টম ড্যাশবোর্ড তৈরি করতে হবে।

প্রথমে, ড্যাশবোর্ড মেনুর অধীনে Add dashboard-এ ক্লিক করুন:

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

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

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

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

অপশনালি, ফিল্টার করার জন্য ট্যাগ ব্যবহার করুন:

পরবর্তীতে, Back to overview-এ ক্লিক করুন। আপনি ভিন্ন গ্রাফ টাইপ এবং ভ্যালু ইউনিট ট্রাই করতে চাইতে পারেন যাতে বুঝতে পারেন কোনটি আপনার প্রতিনিধিত্ব করতে চাওয়া ডেটার জন্য সবচেয়ে ভালো।

টাইমিং ডেটা এরিয়া গ্রাফের সাথে ভালো দেখায় কারণ মানে এবং পারসেন্টাইল আরও স্পষ্ট দেখায়।

লাইন গ্রাফ কাউন্টার এবং গেজের জন্য চমৎকার কাজ করে।

যখন আপনি ফলাফল देखकर খুশি হবেন, Create graph-এ ক্লিক করুন।

লক্ষ্য করুন যে আপনি অন্য যেকোনো অটোমেটিক্যালি ইনস্ট্রুমেন্টেড বা পরিমাপ করা মেট্রিকের জন্যও ড্যাশবোর্ড যোগ করতে পারেন যদি আপনার পারফরম্যান্স মনিটরিং টুল (APM) হিসেবে Node.js-এর জন্য অ্যাপসিগনেল সেট আপ থাকে, অথবা আপনার রুবি (অন রেলস) APM বা ইলিক্সির APM।

সমাপন

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

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

  • StatsD রেফারেন্স।
  • কাস্টম মেট্রিক কীভাবে পাঠাতে হয়।
  • অ্যাপসিগনেলে ড্যাশবোর্ড তৈরি করা।
  • স্ট্যান্ডঅ্যালোন এজেন্ট দিয়ে একটি কাফকা ইস্যু চিহ্নিত এবং সমাধান করা।

  1. পাইথনে পান্ডাজ এবং ম্যাটপ্লটলিব দিয়ে ডেটা অ্যানালাইসিস এবং ভিজ্যুয়ালাইজেশন

  2. Defraggler দিয়ে বুট-টাইমে ডিস্ক, ফাইল ও সিস্টেম ফাইল ডিফ্র্যাগ করুন

  3. Defraggler দিয়ে বুট-টাইমে ডিস্ক, ফাইল ও সিস্টেম ফাইল ডিফ্র্যাগ করুন

  4. GCE, Cloud Storage, এবং Pub/Sub ব্যবহার করে Ruby-তে একটি विश्वস্ত আপটাইম মনিটরিং সিস্টেম বিল্ড করুন