OpenTelemetry বনাম প্রোপাইটারি APM এজেন্ট: কোনটি বাছবেন?
OpenTelemetry বনাম প্রোপাইটারি APM এজেন্ট: ভেন্ডর লক-ইন ঝুঁকি, লগ-মেট্রিক্স-ট্রেসের গুণমান, এবং ড্যাশবোর্ড ও এলার্ট তৈরির বাস্তব কাজ কেমন—সবকিছু তুলনা করে।

আপনি APM দিয়ে কোন সমস্যা সমাধান করতে চাইছেন
টার্মস সাধারণত APM চালু করে যখন কিছুই ঠিক নেই: পেজ ধীর, র্যান্ডম এরর, বা আউটেজ যা বোঝতে অনেক সময় লাগে। প্রথম সপ্তাহটা মনে হতে পারে একটা জয়—অবশেষে ট্রেস, কয়েকটি চার্ট এবং একটি সুন্দর “সার্ভিস হেলথ” স্ক্রিন দেখা যায়। তারপর পরবর্তী ইনসিডেন্ট আসে এবং সেটা এখনও ঘণ্টা কয়েক লাগে, এলার্টগুলো “কিছুই না” জন্য বাজে, আর людзі ড্যাশবোর্ডে বিশ্বাস হারায়।
উপযোগী পর্যবেক্ষণ মানে ডেটা বেশি সংগ্রহ করা নয়। এটি দ্রুত উত্তর পাওয়া, পর্যাপ্ত প্রসঙ্গ থাকায় সিদ্ধান্ত নেওয়া সম্ভব করা। একটি ভাল সেটআপ আপনাকে নির্দিষ্ট ব্যর্থ অনুরোধটি খুঁজে পেতে, কী পরিবর্তন হয়েছে দেখতে, এবং ব্যবহারকারীরা প্রভাবিত হচ্ছেন কিনা নিশ্চিত করতে সাহায্য করে। এটি মিথ্যা সতর্কতাও কমায় যাতে টিম যখন প্রয়োজন তখনই সাড়া দেয়।
অধিকাংশ সময় এজেন্ট ইনস্টল করাতেই যায় না। সময় যায় কাঁচা সিগন্যালগুলোকে ভরসাযোগ্য কিছুকারে রূপ দেওয়াতে: কী ইনস্ট্রুমেন্ট করা হবে (আর কী হচ্ছে নয়েজ), environment আর version মতো সঙ্গত ট্যাগ যোগ করা, টিমের চিন্তার সঙ্গে মিলানো ড্যাশবোর্ড তৈরি, এলার্ট টিউন করা, এবং মানুষকে শেখানো যে “ভালো” কেমন দেখায়।
এখানেই OpenTelemetry বনাম প্রোপাইটারি APM এজেন্টের মধ্যে পছন্দ বাস্তবে আসে। একটি প্রোপাইটারি এজেন্ট আপনাকে দ্রুত “প্রথম ডেটা” দেখাতে পারে, কিন্তু তা প্রায়ই আপনাকে সেই ভেন্ডারের নামকরণ, স্যাম্পলিং ও প্যাকেজিংয়ের দিকে ঠেলে দেয়। কয়েক মাস পরে যখন আপনি নতুন ব্যাকএন্ড যোগ করবেন, ক্লাউড বদলাবেন, বা লগ কিভাবে হ্যান্ডেল করা হয় তা পরিবর্তন করবেন, তখন লক্ষ্য করবেন ড্যাশবোর্ড ও এলার্ট ভেন্ডর-স্পেসিফিক আচরণের উপর নির্ভরশীল।
একটি সাধারণ উদাহরণ: আপনি একটি ইন্টারনাল অ্যাডমিন টুল এবং একটি কাস্টমার পোর্টাল তৈরি করছেন। শুরুতে আপনি প্রধানত এরর ও ধীর এন্ডপয়েন্টগুলোর ভিজিবিলিটি চান। পরে আপনাকে ব্যবসার স্তরের ভিউ দরকার হবে, যেমন চেকআউট ব্যর্থতা বা অঞ্চনভিত্তিক লগইন সমস্যা। যদি আপনার সেটআপ ইনস্ট্রুমেন্টেশন আবার করতে না গেলে বা ক্যোয়ারিগুলো শেখাতে না পারে, তাহলে বারবার সেই খরচ দিতে হয়।
লক্ষ্য “সেরা” টুল বেছে নেওয়া নয়। লক্ষ্য হলো এমন এক পদ্ধতি বেছে নেওয়া যা ডিবাগিং দ্রুত রাখে, এলার্টিং শান্ত রাখে, এবং ভবিষ্যতে পরিবর্তনগুলি সাশ্রয়ী রাখে।
সংক্ষিপ্ত সংজ্ঞা: OpenTelemetry এবং প্রোপাইটারি এজেন্ট
জনেরা যখন OpenTelemetry বনাম প্রোপাইটারি APM এজেন্ট তুলনা করে, তারা দুইটি ভিন্ন ধারণা তুলনা করছে: পর্যবেক্ষণ ডেটা সংগ্রহের জন্য একটি ভাগ করা স্ট্যান্ডার্ড বনাম একটি প্যাকেজকৃত, ভেন্ডর-অধিকৃত মনিটরিং স্ট্যাক।
OpenTelemetry (সাধারণত OTel বলা হয়) হল একটি ওপেন স্ট্যান্ডার্ড এবং টুলস সেট টেলিমেট্রি ডেটা উৎপাদন ও পাঠানোর জন্য। এটি তিনটি মূল সিগন্যাল কভার করে: ট্রেস (সার্ভিস জুড়ে কী ঘটেছে), মেট্রিক্স (কিভাবে সিস্টেম সময়ের সাথে আচরণ করে), এবং লগ (কোনো সময়বিন্দুতে সিস্টেম কী বলেছে)। মূল বিষয় হল OpenTelemetry কোনো একক মনিটরিং ভেন্ডার নয়। এটি সিগন্যাল তৈরি ও সরানোর একটি সাধারণ উপায় যাতে আপনি সিদ্ধান্ত নেন কোথায় ডেটা যাবে।
একটি প্রোপাইটারি APM এজেন্ট হল একটি ভেন্ডর-স্পেসিফিক লাইব্রেরি বা প্রসেস যা আপনি আপনার অ্যাপে (বা হোস্টে) ইনস্টল করেন। এটি ভেন্ডারের প্রত্যাশিত ফরম্যাটে ডেটা সংগ্রহ করে এবং প্রায়ই সেরা কাজ করে যখন আপনি ঐ ভেন্ডারের ব্যাকএন্ড, ড্যাশবোর্ড এবং এলার্টিংও ব্যবহার করেন।
কালেক্টর, গেটওয়ে, এবং ব্যাকএন্ড (সরল কথায়)
অধিকাংশ টেলিমেট্রি পাইপলাইন তিনটি অংশে থাকে:
- ইনস্ট্রুমেন্টেশন: কোড বা এজেন্ট যা ট্রেস, মেট্রিক্স, এবং লগ তৈরি করে।
- কালেক্টর (বা গেটওয়ে): একটি মধ্যবর্তী সার্ভিস যা সিগন্যাল গ্রহণ করে, ব্যাচ করে, ফিল্টার করে এবং ফরওয়ার্ড করে।
- ব্যাকএন্ড: যেখানে ডেটা স্টোর করা হয়, কুয়েরি করা হয়, এবং ড্যাশবোর্ড ও এলার্টে রূপান্তরিত হয়।
OpenTelemetry-র ক্ষেত্রে কালেক্টরটি সাধারণত কমন হয় কারণ এটি আপনাকে অ্যাপ কোড না বদলে পরে ব্যাকএন্ড পরিবর্তন করতে দেয়। প্রোপাইটারি এজেন্টগুলোর ক্ষেত্রে কালেক্টরের ভূমিকা এজেন্টে বান্ডলড থাকতে পারে, বা ডেটা সরাসরি ভেন্ডার ব্যাকএন্ডে যেতে পারে।
“ইনস্ট্রুমেন্টেশন” আসলে কী বোঝায়
ইনস্ট্রুমেন্টেশন মানে আপনার সফটওয়্যার কী করছে তা রিপোর্ট করা।
ব্যাকেন্ড সার্ভিসগুলোর জন্য সাধারণত এটি SDK বা অটো-ইনস্ট্রুমেন্টেশন সক্রিয় করা এবং কী স্প্যানের নামকরণ করা (যেমন “checkout” বা “login”)। ওয়েব অ্যাপের জন্য এটি পেজ লোড, ফ্রন্টএন্ড অনুরোধ, এবং ব্যবহারকারীর ক্রিয়াকলাপ অন্তর্ভুক্ত করতে পারে (গোপনীয়তা মনোযোগ দিয়ে)। মোবাইল অ্যাপে সাধারণত ধীর স্ক্রিন, নেটওয়ার্ক কল, এবং ক্র্যাশ অন্তর্ভুক্ত থাকে।
যদি আপনি AppMaster (appmaster.io) মতো প্ল্যাটফর্ম দিয়ে অ্যাপ তৈরি করেন (যা Go ব্যাকেন্ড, Vue3 ওয়েব অ্যাপ এবং Kotlin/SwiftUI মোবাইল অ্যাপ জেনারেট করে), তখনও একই সিদ্ধান্ত প্রযোজ্য। আপনি স্ক্যাফল্ডিংতে কম সময় ব্যয় করবেন এবং সঙ্গত নামকরণ, কোন ইভেন্টগুলো গুরুত্বপূর্ণ, এবং ডেটা কোথায় যাবে সে বিষয়ে সম্মত হওয়ার দিকে বেশি সময় দেবেন।
ভেন্ডর লক-ইন: বাস্তবে কেমন লাগে
লক-ইন সাধারণত এ নিয়ে নয় যে আপনি এজেন্ট আনইনস্টল করতে পারবেন কি না। এটি সেই সব জিনিস নিয়ে—আপনি যা তৈরি করেছেন: ড্যাশবোর্ড, এলার্ট, নামকরণ নিয়ম, এবং আপনার টিম কীভাবে ইনসিডেন্ট তদন্ত করে।
প্রতিদিন কোথায় লক-ইন দেখা যায়
প্রথম ফাঁদ হল ডেটা পোর্টেবিলিটি। যদিও আপনি রা ড ডেটা এক্সপোর্ট করতে পারেন, মাসব্যাপী ইতিহাস সরানো এবং ড্যাশবোর্ড ব্যবহারযোগ্য রাখা কঠিন। প্রোপাইটারি টুলগুলো প্রায়শই কাস্টম মডেলে ডেটা স্টোর করে, এবং ড্যাশবোর্ডগুলো ভেন্ডরের কুয়েরি ভাষা, উইজেট বা “ম্যাজিক” ফিল্ডের উপর নির্ভর করে। আপনি স্ক্রিনশট রেখে দিতে পারেন, কিন্তু জীবন্ত ড্যাশবোর্ড হারাবেন।
দ্বিতীয় ফাঁদ হল কোড ও কনফিগে কাপলিং। OpenTelemetry-ও coupling সৃষ্টি করতে পারে যদি আপনি ভেন্ডর-স্পেসিফিক এক্সপোর্টার ও মেটাডেটায় নির্ভর করেন, কিন্তু প্রোপাইটারি এজেন্ট প্রায়শই আরও দূর গিয়ে কাস্টম API দেয় যেমন এরর, ইউজার সেশন, RUM, বা ডেটাবেস বিশেষ “এক্সট্রা”। যত বেশি আপনার অ্যাপ কোড ঐ API কল করবে, পরবর্তীতে পরিবর্তন করা তত বেশি রিফ্যাক্টরিং হয়ে যাবে।
প্রাইসিংও লক-ইন তৈরি করতে পারে। প্যাকেজিং পরিবর্তন, উচ্চ-কার্ডিনালিটি প্রাইসিং, বা ট্রেস বনাম লগের আলাদা রেটস ব্যবহার বাড়তি খরচ বাড়িয়ে দিতে পারে ঠিক সেই সময়ে যখন ব্যবহার বাড়ে। যদি আপনার ইনসিডেন্ট রেসপন্স ভেন্ডার UI-র উপর নির্ভর করে, দর কষাকষাও কঠিন হয়ে যায়।
কমপ্লায়েন্স ও গভর্ন্যান্সও গুরুত্বপূর্ণ। আপনাকে স্পষ্ট জবাব জানতে হবে ডেটা কোথায় যায়, কতক্ষণ রাখা হয়, এবং সংবেদনশীল ফিল্ডগুলো কিভাবে হ্যান্ডেল করা হয়। এটি মাল্টি-ক্লাউড সেটআপ বা কঠোর আঞ্চলিক চাহিদার ক্ষেত্রে জরুরি হয়ে ওঠে।
চিন্হগুলো যে আপনি আটকে যাচ্ছেন:
- ড্যাশবোর্ড ও এলার্ট রিইউজেবল ফরম্যাটে এক্সপোর্ট করা যায় না
- অ্যাপ কোড মূল ওয়ার্কফ্লোর জন্য ভেন্ডর-অনলি SDK কল ব্যবহার করে
- টিম প্রোপাইটারি ফিল্ডগুলোর ওপর নির্ভর করে যা অন্যখানে পুনরায় তৈরি করা যায় না
- সার্ভিস বা ট্রাফিক বাড়ালে খরচ ফেটে যায়
- ডেটা রেসিডেন্সির অপশন গভর্ন্যান্স চাহিদার সাথে মেলে না
একটি exit কৌশল মূলত প্রথমদিকে ডকুমেন্টেশন। আপনার মূল SLO, নামকরণ কনভেনশন, এবং এলার্ট থ্রেশহোল্ড লিখে রাখুন। কোন সিগন্যাল কোন এলার্ট চালায় তার সংক্ষিপ্ত মানচিত্র রাখুন। যদি আপনি কখনো ছেড়ে যান, আপনি ভিউগুলো পুনর্নির্মাণ করতে চান, সিস্টেম পুনরায় লিখতে নয়।
সিগন্যাল কোয়ালিটি: লগ, মেট্রিক্স, ট্রেস তুলনা
সিগন্যাল কোয়ালিটি টুলের উপরে কম এবং সঙ্গতির উপর বেশি নির্ভর করে। ব্যবহারিক পার্থক্য হল কে নিয়মগুলো নির্ধারণ করে: এক ভেন্ডর এজেন্ট “ভাল পর্যাপ্ত” ডিফল্ট দিতে পারে, যেখানে OpenTelemetry আপনাকে নিয়ন্ত্রণ দেয় কিন্তু কনভেনশন নির্ধারণের আশা করে।
লগ: স্ট্রাকচার ও প্রসঙ্গ
লগ কেবল তখনই চাপের মধ্যে টিকে থাকে যখন সেগুলো স্ট্রাকচার্ড এবং সঙ্গত প্রসঙ্গ বহন করে। প্রোপাইটারি এজেন্টগুলি মাঝে মাঝে লগগুলোকে অটো-এনরিচ করে (সার্ভিস নাম, environment, request ID) যদি আপনি তাদের লগিং সেটআপ ব্যবহার করেন। OpenTelemetry-ও এটা করতে পারে, কিন্তু আপনাকে সার্ভিসগুলোর মধ্যে ফিল্ড স্ট্যান্ডার্ডাইজ করতে হবে।
একটি ভাল বেসলাইন: প্রতিটি লগ লাইনে একটি trace ID (আর সম্ভব হলে span ID) থাকে, এবং প্রয়োজনে ইউজার বা টেন্যান্ট আইডেন্টিফায়ারও থাকে। যদি এক সার্ভিস JSON লগ এবং আরেকটি প্লেইন টেক্সট লিখে, কোরিলেশন আন্দাজে পরিণত হয়।
মেট্রিক্স: নামকরণ ও কার্ডিনালিটি
মেট্রিক্স চুপচাপ ব্যর্থ হয়। আপনার অনেক চার্ট থাকতে পারে তবুও আপনি সেই মাত্রা মিস করতে পারেন যা ইনসিডেন্টে দরকার। ভেন্ডর এজেন্ট প্রায়ই প্রি-মেড মেট্রিক্স নিয়ে আসে স্থিতিশীল নাম ও বোধগম্য লেবেল সহ। OpenTelemetry-র সাথে আপনি একই মানোত্তীর্ণ ফল পেতে পারেন, কিন্তু আপনাকে টিমগুলোর মধ্যে নামকরণ ও লেবেল বাধ্যতামূলক করতে হবে।
দুটি সাধারণ ফাঁদ:
- উচ্চ-কার্ডিনালিটি লেবেল (পূর্ণ ইউজার আইডি, ইমেইল, আইডি মিশানো রিকোয়েস্ট পাথ) যা খরচ বাড়ায় এবং কুয়েরি ধীর করে।
- অনুপস্থিত মাত্রাগুলো, যেমন ল্যাটেন্সি ট্র্যাক করা কিন্তু এটিকে এন্ডপয়েন্ট বা ডিপেন্ডেন্সি অনুসারে ভাঙ্গা না হওয়া।
ট্রেস: কভারেজ, স্যাম্পলিং এবং সম্পূর্ণতা
ট্রেসিং কোয়ালিটি স্প্যান কভারেজের ওপর নির্ভর করে। অটো-ইনস্ট্রুমেন্টেশন (প্রায়ই প্রোপাইটারি এজেন্টে শক্তিশালী) দ্রুত অনেক কিছু ক্যাপচার করতে পারে: ওয়েব রিকোয়েস্ট, ডাটাবেস কল, সাধারণ ফ্রেমওয়ার্ক। OpenTelemetry অটো-ইনস্ট্রুমেন্টেশনও শক্তিশালী হতে পারে, কিন্তু ব্যাবসায়িক ধাপ ধরার জন্য আপনাকে ম্যানুয়াল স্প্যান যোগ করতেও হতে পারে।
স্যাম্পলিং সেখানে যেখানে টিমরা অবাক হয়। কঠোর স্যাম্পলিং খরচ বাঁচায় কিন্তু ভাঙা গল্প তৈরি করে যেখানে গুরুত্বপূর্ণ রিকোয়েস্টটি অনুপস্থিত থাকে। একটি ব্যবহারিক পদ্ধতি হলো সাধারণ ট্রাফিক স্যাম্পল করা while errors and slow requests-কে বেশি রেটে রাখা।
ক্রস-সার্ভিস কোরিলেশনই প্রকৃত পরীক্ষা: আপনি কি একটি এলার্ট থেকে সঠিক ট্রেসে, এবং সেই একই রিকোয়েস্টের জন্য লগে ঝাঁপিয়ে পড়তে পারেন? সেটা তখনই কাজ করে যখন propagation হেডারগুলো সঙ্গত এবং প্রতিটি সার্ভিস তা মেনে চলে।
ভাল সিগন্যাল চাইলে, ভালো কনভেনশন দিয়ে শুরু করুন:
- স্ট্যান্ডার্ড লগ ফিল্ড (trace_id, service, env, request_id)
- মেট্রিক নাম ও অনুমোদিত লেবেল (সাথে নিষিদ্ধ উচ্চ-কার্ডিনালিটি লেবেলগুলোর একটি তালিকা)
- একটি ন্যূনতম ট্রেসিং পলিসি (কি অবশ্যই ট্রেস করা হবে, এবং এরর-এ কিভাবে স্যাম্পলিং বদলায়)
- পরিবেশ জুড়ে সঙ্গত সার্ভিস নামকরণ
- মূল ব্যবসায়িক ওয়ার্কফ্লোতে ম্যানুয়াল স্প্যানের জন্য একটি পরিকল্পনা
প্রচেষ্টা ও রক্ষণাবেক্ষণ: সিদ্ধান্তের লুকানো অংশ
টিমগুলো সাধারণত প্রথমে ফিচারগুলো তুলনা করে, তারপর কয়েক মাস পরে প্রকৃত খরচ অনুভব করে: কে ইনস্ট্রুমেন্টেশন পরিষ্কার রাখে, কে ভাঙা ড্যাশবোর্ড ঠিক করে, এবং সিস্টেম বদলে গেলে আপনি কত দ্রুত উত্তর পান।
প্রথম মান পাওয়ার সময় সাধারণত প্রোপাইটারি এজেন্টের পক্ষে থাকে। আপনি একটি এজেন্ট ইনস্টল করেন এবং প্রস্তুত ড্যাশবোর্ড ও এলার্ট পেয়ে যান যা প্রথম দিনেই ভাল দেখায়। OpenTelemetry সমানভাবে শক্তিশালী হতে পারে, কিন্তু প্রাথমিক সাফল্য নির্ভর করে একটি ব্যাকএন্ড আছে কি না টেলিমেট্রি সংরক্ষণ ও প্রদর্শনের জন্য, এবং নামকরণ ও ট্যাগের বোধগম্য ডিফল্ট আছে কি না।
ইনস্ট্রুমেন্টেশন সাধারণত উভয় পদ্ধতিতেই শতভাগ স্বয়ংক্রিয় হয় না। অটো-ইনস্ট্রুমেন্টেশন সাধারণ ফ্রেমওয়ার্ক ঢেকে দেয়, কিন্তু ফাঁকগুলো দ্রুত দেখা দেয়: ইন্টারনাল 큐, কাস্টম মিডলওয়্যার, ব্যাকগ্রাউন্ড জব, এবং ব্যবসায়িক-নির্দিষ্ট ধাপ। সবচেয়ে উপকারী টেলিমেট্রি সাধারণত কিছুটা ম্যানুয়াল কাজ থেকে আসে: প্রধান ওয়ার্কফ্লো (checkout, টিকিট তৈরি, রিপোর্ট জেনারেশন) চারপাশে স্প্যান যোগ করা এবং সঠিক অ্যাট্রিবিউট রেকর্ড করা।
সার্ভিস নামকরণ ও অ্যাট্রিবিউটগুলো ঠিক করে দেয় ড্যাশবোর্ড ব্যবহারযোগ্য কি না। যদি একটি সার্ভিস api, আরেকটি api-service, আর তৃতীয়টি backend-prod নামে রিপোর্ট করে, প্রতিটি চার্টই একটি ধাঁধা হয়ে যায়। একই সমস্যা environment, region এবং version ট্যাগের সাথেও ঘটে।
একটি ব্যবহারিক নামকরণ বেসলাইন:
- প্রতিটি deployable ইউনিটের জন্য একটি স্থির সার্ভিস নাম বেছে নিন
environment(prod, staging, dev) এবংversionস্ট্যান্ডার্ডাইজ করুন- মেট্রিক লেবেল থেকে উচ্চ-কার্ডিনালিটি মান (যেমন user IDs) দূরে রাখুন
- কনসিসটেন্ট এরর ফিল্ড ব্যবহার করুন (type, message, status)
অপারেশনাল ওভারহেডও আলাদা। OpenTelemetry প্রায়ই কালেক্টর চালানো ও আপগ্রেড করা, স্যাম্পলিং টিউন করা, এবং ড্রপ করা টেলিমেট্রি ট্রাবলশুট করা মানে। প্রোপাইটারি এজেন্ট কিছু সেটআপ হ্যান্ডেল কমায়, কিন্তু আপনাকে তখনও এজেন্ট আপগ্রেড, পারফরম্যান্স ওভারহেড, এবং প্লাটফর্ম কুইর্কস ম্যানেজ করতে হবে।
টিম টার্নওভারের জন্যও পরিকল্পনা করুন। সেরা পছন্দটি হলো যেটা টিম মূল মালিক চলে যাওয়ার পরও বজায় রাখতে পারে। যদি আপনি AppMaster-এ অ্যাপ বানান, তাহলে এক স্ট্যান্ডার্ড ইনস্ট্রুমেন্টেশনের উপায় ডকুমেন্ট করা সাহায্য করে যাতে প্রতিটি নতুন অ্যাপ একই কনভেনশন অনুসরণ করে।
ধাপে ধাপে: আপনার সিস্টেমে দুটি অপশন মূল্যায়ন করার কিভাবে
শুরুতে সবকিছু ইনস্ট্রুমেন্ট করবেন না। ডেটায় ডুবে যাবেন আগে আপনি কিছু শিখবেন না। একটি ন্যায্য তুলনা শুরু করা হয় আপনার সিস্টেমের একটি ছোট, বাস্তব অংশ দিয়ে যা ব্যবহারকারীরা কিভাবে সমস্যার সম্মুখীন হন সেটির সাথে মিলে।
একটি বা দুইটি সমালোচনামূলক ইউজার জার্নি বেছে নিন যা ব্যবসার জন্য গুরুত্বপূর্ণ এবং ভাঙ্গলে চিনতে সহজ, যেমন “ইউজার লগইন করে এবং ড্যাশবোর্ড লোড করে” অথবা “চেকআউট সম্পন্ন হয় এবং একটি রিসিপ্ট ইমেল পাঠানো হয়।” এই ফ্লোগুলো একাধিক সার্ভিসকে ক্রস করে এবং সফলতা/ব্যর্থতার স্পষ্ট সংকেত তৈরি করে।
আরও ডেটা সংগ্রহের আগে, একটি মৌলিক সার্ভিস ম্যাপ ও নামকরণ নিয়মে সম্মত হোন। সিদ্ধান্ত নিন কি গন্য করা হবে সার্ভিস, কিভাবে নামকরণ হবে (মানব-বন্ধু, স্থিতিশীল নাম), এবং কিভাবে এনভায়রনমেন্ট আলাদা করা হবে (prod বনাম staging)। এই একবারের শৃঙ্খলা একই জিনিস পাঁচটি ভিন্ন নামে দেখার সমস্যা প্রতিরোধ করে।
একটি ন্যূনতম অ্যাট্রিবিউট সেট ব্যবহার করুন যাতে আপনি ইভেন্ট ফিল্টার ও সংযুক্ত করতে পারেন ব্যয় বাড়ানো ছাড়াই: env, version, tenant (যদি মাল্টি-টেন্যান্ট), এবং একটি request ID (বা trace ID) যা আপনি একটি এরর থেকে কপি করে end-to-end অনুবর্তন করতে পারেন।
একটি ব্যবহারিক পাইলট প্ল্যান (1–2 সপ্তাহ)
- 1–2 জার্নিকে end-to-end ইনস্ট্রুমেন্ট করুন (ফ্রন্টএন্ড, API, ডেটাবেস, ও 1–2 প্রধান ইন্টিগ্রেশন)।
- সার্ভিস নাম, এন্ডপয়েন্ট, এবং প্রধান অপারেশনের জন্য নামকরণ নিয়ম জোরদার করুন।
- ন্যূনতম অ্যাট্রিবিউট দিয়ে শুরু করুন: env, version, tenant, এবং request বা trace IDs।
- একটি স্যাম্পলিং প্ল্যান নির্ধারণ করুন: এরর ও ধীর রিকোয়েস্ট বেশি রাখুন; সাধারণ ট্রাফিক স্যাম্পল করুন।
- দুইটি জিনিস পরিমাপ করুন: time-to-diagnosis এবং এলার্ট নয়েজ (যেইগুলো actionable নয়)।
আপনি যদি জেনারেটেড সোর্স কোড (উদাহরণস্বরূপ, AppMaster থেকে Go ব্যাকএন্ড ও ওয়েব অ্যাপ) এক্সপোর্ট ও চালান, এটাকে পাইলটের অন্যান্য অ্যাপের মতো বিবেচনা করুন। উদ্দেশ্য নয় নিখুঁত কভারেজ; উদ্দেশ্য হলো শেখা কোন পদ্ধতি আপনাকে “কিছু ভুল আছে” থেকে “এটাই ব্যর্থ ধাপ” এ সবচেয়ে কম চলতে সময় নিয়ে পৌঁছায়।
ব্যবহারযোগ্য ড্যাশবোর্ড ও এলার্ট (অবিরাম টিউনিং ছাড়া)
ড্যাশবোর্ড ও এলার্ট তখনই ব্যর্থ হয় যখন তারা ইনসিডেন্টে মানুষের জিজ্ঞাসা করা প্রশ্নের উত্তর দেয় না। শুরুতে ব্যবহারকারী ব্যথার সঙ্গে যুক্ত সংকেতের একটি ছোট সেট নিয়ে শুরু করুন, বস্তুত অবকাঠামো ট্রিভিয়ারির নয়।
একটি ব্যবহারিক স্টার্টার সেট হল ল্যাটেন্সি, এরর, ও স্যাচুরেশন। যদি আপনি প্রতিটি এন্ডপয়েন্টের p95 ল্যাটেন্সি, সার্ভিস অনুযায়ী এরর রেট, এবং এক স্যাচুরেশন সিগন্যাল (কিউ ডেপথ, DB কানেকশন, বা ওয়ার্কার_utilization) দেখতে পারেন, সাধারণত আপনি দ্রুত সমস্যাটি খুঁজে পেতে পারেন।
প্রতি নতুন সার্ভিসের জন্য প্যানেল পুনর্নির্মাণ এড়াতে নামকরণ ও লেবেল সম্পর্কে কড়া হোন। service.name, deployment.environment, http.route, এবং status_code এর মতো সঙ্গত অ্যাট্রিবিউট ব্যবহার করুন। এখানেই টিমগুলো প্রায়শই পার্থক্য অনুভব করে: OpenTelemetry একটি স্ট্যান্ডার্ড শেপ উৎসাহ দেয়, আর প্রোপাইটারি এজেন্ট সহায়ক এক্সট্রা ফিল্ড যোগ করতে পারে, কখনো কখনো ভেন্ডর-স্পেসিফিক ফিল্ডে।
ড্যাশবোর্ডগুলো ছোট ও পুনরাবৃত্তযোগ্য রাখুন। একটি “Service overview” ড্যাশবোর্ড যদি প্রতিটি API-র জন্য কাজ করে যদি সব সার্ভিস একই মূল মেট্রিক ও ট্যাগ এমিট করে।
ব্যবহারকারীর প্রভাব নির্দেশ করা এলার্ট
এলার্টগুলো তখনি বাজবে যখন ব্যবহারকারী তা অনুভব করে, সার্ভার ব্যস্ত দেখলেই নয়। শক্তিশালী ডিফল্টগুলোর মধ্যে আছে: মূল এন্ডপয়েন্টে উচ্চ এরর রেট, সম্মত থ্রেশহোল্ডের উপরে sustained p95 ল্যাটেন্সি (৫–১০ মিনিট), এবং এমন স্যাচুরেশন যা শীঘ্রই ব্যর্থতার পূর্বাভাস দেয় (কিউ বৃদ্ধি, DB পুল এক্সহস্ট)। একটি “মিসিং টেলিমেট্রি” এলার্টও রাখুন যাতে আপনি লক্ষ্য করেন কখন কোন সার্ভিস রিপোর্ট করা বন্ধ করেছে।
একটি এলার্ট বাজলে, এলার্ট বর্ণনায় একটি বা দুটি রুনবুক নোট যোগ করুন: কোন ড্যাশবোর্ড প্রথমে খুলবেন, কোন সাম্প্রতিক ডিপ্লয় চেক করবেন, এবং কোন লগ ফিল্ড দিয়ে ফিল্টার করবেন।
ওনারশিপও পরিকল্পনা করুন। প্রতি মাসে একটি সংক্ষিপ্ত রিভিউ রাখুন। একজন ব্যক্তিই নয়েজি এলার্ট সরাবে, ডুপ্লিকেট মিলিয়ে দেবে, এবং থ্রেশহোল্ড অ্যাডজাস্ট করবে। এটাই নিশ্চিত করার ভাল সময় যে নতুন সার্ভিসগুলো একই লেবেল অনুসরণ করছে যাতে বিদ্যমান ড্যাশবোর্ড কাজ করে।
সময় ও বাজেট নষ্ট করে এমন সাধারণ ভুল
পর্যবেক্ষণে দ্রুত টাকা জ্বলিয়ে ফেলার দ্রুততম উপায় হল সবকিছু একসাথে চালু করা। টিমগুলো প্রতিটি অটো-ইনস্ট্রুমেন্টেশন অপশন চালু করে দেয় এবং তারপর আশ্চর্য হয় কেন বিলগুলো ঝাঁপিয়ে বেড়ে যায়, কুয়েরি ধীর হয় এবং মানুষ ড্যাশবোর্ডে বিশ্বাস হারায়।
উচ্চ-কার্ডিনালিটি ডেটা একটি ঘনঘন দোষী। মেট্রিক লেবেল ও অ্যাট্রিবিউটে ইউজার আইডি, সম্পূর্ণ URL, বা কাঁচা রিকোয়েস্ট বডি রাখলে সহজ চার্টগুলোই ব্যয়বহুল হয়ে পড়ে।
নামকরণ সমস্যা আরেকটি নীরব বাজেট কিলার। যদি একটি সার্ভিস http.server.duration রিপোর্ট করে এবং অন্যটি request_time_ms, আপনি তাদের তুলনা করতে পারবেন না এবং প্রতিটি ড্যাশবোর্ড কাস্টম কাজ হয়ে যায়। আরও খারাপ হয় যখন একই ইউজার ফ্লোয়ের জন্য স্প্যান নাম ও রুট টেমপ্লেট ভিন্ন।
টুল ডিফল্টগুলো সপ্তাহ নষ্ট করতে পারে। অনেক প্রোডাক্ট প্রি-মেড এলার্ট নিয়ে আসে, কিন্তু সেগুলো প্রায়ই ছোট স্পাইক-এ পেজ করে বা প্রকৃত ইনসিডেন্টে নিরব থাকে। গড়ের উপর ভিত্তি করে এলার্ট দিলে টেইল ল্যাটেন্সি মিস হয়ে যায় যেখানে গ্রাহকরা ব্যথা অনুভব করে।
প্রসঙ্গের অভাব তদন্তকে দীর্ঘ করে দেয়। যদি আপনি টেলিমেট্রিকে version ট্যাগ না দিন, আপনি ইস্যুকে কোনো রিলিজের সঙ্গে যুক্ত করতে পারবেন না। যারা প্রচুর শিপ করে বা কোড পুনর্জেনারেট করে তাদের জন্য এটা আরও বেশি গুরুত্বপূর্ণ।
ট্রেসগুলো লগকে প্রতিস্থাপন করে না। ট্রেস পথ ও সময় দেখায়, কিন্তু লগগুলোতে মানবিক বিস্তারিত থাকে: ভ্যালিডেশন ব্যর্থতা, তৃতীয় পক্ষের রেসপন্স, এবং ব্যবসায়িক নিয়ম।
দ্রুত ফিক্স যা প্রায়ই দ্রুত ফল দেয়:
- একটি ছোট সেট এন্ডপয়েন্ট ও একটি গুরুত্বপূর্ণ ইউজার জার্নি দিয়ে শুরু করুন
- সার্ভিস, রুট, স্প্যান নাম, ও স্ট্যাটাস কোডের জন্য নামকরণ নিয়মে একমত হন
- ড্যাশবোর্ড তৈরি করার আগে সর্বত্র version ও environment ট্যাগ যোগ করুন
- এলার্টগুলো ব্যবহারকারীর লক্ষণ (এরর রেট, p95 ল্যাটেন্সি) অনুযায়ী টিউন করুন, প্রতিটি মেট্রিক নয়
- লগ ও ট্রেসকে একটি শেয়ার্ড request বা trace ID দিয়ে সংযুক্ত রাখুন
উদাহরণ: একটি ছোট প্রোডাক্ট ও একটি ইন্টারনাল টুলের জন্য বাছাই
চিত্রিত করুন একটি পাঁচ জনের টিম যাঁরা দুইটো চালায়: একটি পাবলিক API যা পেইং কাস্টমার ব্যবহার করে, এবং একটি ইন্টারনাল অ্যাডমিন টুল যা সাপোর্ট ও অপস ব্যবহার করে। API-র জন্য দ্রুত ইনসিডেন্ট রেসপন্স প্রয়োজন। অ্যাডমিন টুল প্রতি সপ্তাহে কাজ বদলে যায়।
এমন পরিস্থিতিতে, ভালো পছন্দ প্রায়শই প্রযুক্তির চেয়ে বেশি নির্ভর করে কে দৈনন্দিন অপারেশনগুলো দায়িত্বে থাকবে।
অপশন A: প্রোপাইটারি এজেন্ট দিয়ে শুরু করুন (এখনই গতি)
এটি “আজই” এরর ও ধীর এন্ডপয়েন্ট দেখা-শুনি পাওয়ার দ্রুততম পথ। আপনি এজেন্ট ইনস্টল করেন, এটি কমন ফ্রেমওয়ার্ক অটো-ডিটেক্ট করে, এবং আপনি দ্রুত ড্যাশবোর্ড ও বেসিক এলার্ট পান।
পরবর্তীতে যা কঠিন হতে পারে তা হলো সুইচ করা। ড্যাশবোর্ড, এলার্ট থ্রেশহোল্ড, এবং স্যাম্পলিং আচরণ সেই এক ভেন্ডারের সাথে বাঁধা থাকতে পারে। অ্যাডমিন টুল বদলে গেলে (নতুন এন্ডপয়েন্ট, ব্যাকগ্রাউন্ড জব), আপনি হয়তো ভেন্ডর-স্পেসিফিক সেটিংস বারবার টিউন করবেন এবং বেশি ইনজেশন খরচ দেবেন।
2 সপ্তাহ পরে সাধারণত আপনার কাছে সার্ভিস ম্যাপ, শীর্ষ এরর, এবং কয়েকটি উপযোগী এলার্ট থাকে।
2 মাস পরে লক-ইন প্রায়শই ড্যাশবোর্ড, কুয়েরি ভাষা, এবং কাস্টম ইনস্ট্রুমেন্টেশনের আশেপাশে দেখা দেয়।
অপশন B: OpenTelemetry দিয়ে শুরু করুন (ভবিষ্যতে নমনীয়তা)
এটি শুরুতে বেশি সময় লাগতে পারে কারণ আপনাকে একটি এক্সপোর্টার বেছে নিতে হবে এবং লগ, মেট্রিক্স, ট্রেসের জন্য “ভালো” কী তা সংজ্ঞায়িত করতে হবে। আপনাকে ড্যাশবোর্ড বুঝার মতো নামকরণ ও অ্যাট্রিবিউটও বেশি ম্যানুয়ালি নির্ধারণ করতে হতে পারে।
পেটা হলো পোর্টেবিলিটি। একই সিগন্যালকে বিভিন্ন ব্যাকএন্ডে রুট করা যায়, API ও অ্যাডমিন টুল জুড়ে কনভেনশনগুলো সঙ্গত রাখা যায়, এবং যখন চাহিদা বদলে যায় ইনস্ট্রুমেন্টেশন পুনরায় লেখা লাগবে না।
2 সপ্তাহ পরে আপনার কাছে হয়ত কম পলিশ্ড ড্যাশবোর্ড থাকবে কিন্তু ট্রেস স্ট্রাকচার ও নামকরণ স্বচ্ছ থাকবে।
2 মাস পরে আপনি বেশি স্থিতিশীল কনভেনশন, পুনঃব্যবহারযোগ্য এলার্ট, এবং সহজ টুল চেঞ্জের সম্ভাবনা পাবেন।
একটি সহজ সিদ্ধান্ত নিয়ম:
- যদি সাপোর্ট ইঞ্জিনিয়ারদের এই সপ্তাহেই উত্তর দরকার, প্রোপাইটারি প্রথম সঠিক সিদ্ধান্ত হতে পারে।
- যদি প্রোডাক্ট প্রতি সপ্তাহে বদলে যায় এবং আপনি ভেন্ডার বদলানোর সম্ভাবনা দেখেন, OpenTelemetry দিয়ে শুরু করুন।
- যদি এক ব্যক্তি পার্ট-টাইম অপসের দায়িত্বে থাকেন, দ্রুত ডিফল্ট পছন্দ করুন।
- যদি একটি টিম পুরোপুরি অপস দায়িত্বে রাখে, পোর্টেবল সিগন্যাল ও স্পষ্ট কনভেনশনকে প্রাধান্য দিন।
সংক্ষিপ্ত চেকলিস্ট ও পরবর্তী ধাপ
আপনি যদি OpenTelemetry বনাম প্রোপাইটারি APM এজেন্টের মধ্যে আটকে থাকেন, দিনটি নির্ভর করুন সেই জিনিসগুলোর ওপর যেগুলোর ওপর আপনি দৈনন্দিনভাবে নির্ভর করবেন: পোর্টেবিলিটি, সিগন্যালের মধ্যে পরিষ্কার কোরিলেশন, এবং এমন এলার্ট যা দ্রুত সমাধানে নিয়ে যায়।
চেকলিস্ট:
- পোর্টেবিলিটি: আপনি কি পরে ব্যাকএন্ড বদলালে ইনস্ট্রুমেন্টেশন পুনরায় না লিখেই কাজ চালিয়ে যেতে পারবেন?
- কোরিলেশন: আপনি কি ধীর রিকোয়েস্ট ট্রেস থেকে সঠিক লগ ও সম্পর্কিত মেট্রিক্স দ্রুত দেখতে পারবেন?
- সিগন্যাল কভারেজ: আপনাকে কি বেসিকগুলো (HTTP route নাম, এরর টাইপ, ডেটাবেস স্প্যান) মেলে, নাকি গ্যাপ আছে?
- এলার্টের ব্যবহারিতা: এলার্টগুলো কি কি বদলেছে এবং কোথায় সে সম্পর্কে বলে, নাকি সেগুলো শুধু নয়েজি থ্রেশহোল্ড?
- অপারেশনাল প্রচেষ্টা: কে আপডেট, এজেন্ট রোলআউট, SDK পরিবর্তন, ও স্যাম্পলিং দেখবে, এবং কত ঘন?
লক-ইন সাধারণত গ্রহণযোগ্য যখন আপনি একটি ছোট টিম এবং দ্রুত ভ্যালু চান এবং আপনি নিশ্চিত যে বছরগুলো ধরে ঐ স্ট্যাকেই থাকবেন। এটি বেশি ঝুঁকিপূর্ণ যদি অনেক এনভায়রনমেন্ট, মিশ্র প্রযুক্তি স্ট্যাক, কমপ্লায়েন্স বাধ্যবাধকতা, বা বাজেট পুনর্বিবেচনার পরে ভেন্ডার পরিবর্তনের বাস্তব সম্ভাবনা থাকে।
অবিরাম টিউনিং এড়াতে, একটি সংক্ষিপ্ত পাইলট চালান এবং আউটপুটগুলো আগে নির্ধারণ করুন: তিনটি ড্যাশবোর্ড এবং পাঁচটি এলার্ট যা একটি খারাপ দিনে সত্যিই সাহায্য করবে। তারপর কভারেজ বাড়ান।
পাইলটকে কংক্রিট রাখুন:
- 3টি ড্যাশবোর্ড নির্ধারণ করুন (সার্ভিস হেলথ, টপ এন্ডপয়েন্ট, ডেটাবেস ও এক্সটার্নাল কল)
- 5টি এলার্ট নির্ধারণ করুন (এরর রেট, p95 ল্যাটেন্সি, স্যাচুরেশন, কিউ ব্যাকলগ, ব্যর্থ জব)
- নামকরণ কনভেনশন লিখে রাখুন (সার্ভিস নাম, environment ট্যাগ, রুট প্যাটার্ন)
- একটা ছোট অ্যাট্রিবিউট তালিকা (যেগুলো আপনি ফিল্টার ও গ্রুপ করতে ব্যবহার করবেন) ফ্রিজ করুন
- স্যাম্পলিং নিয়মে একমত হন (কি রাখা হবে, কি স্যাম্পল করা হবে, এবং কেন)
যদি আপনি নতুন ইন্টারনাল টুল ও কাস্টমার পোর্টাল তৈরি করছেন, AppMaster (appmaster.io) আপনাকে দ্রুত সমপূর্ণ অ্যাপ তৈরি করতে সাহায্য করতে পারে। এতে আপনার কাছে observability পদ্ধতি বেছে নেওয়ার সময় ও স্থান থাকে, তারপর আপনি তা ধারাবাহিকভাবে প্রয়োগ করতে পারেন যখন আপনি ডিপ্লয় ও পুনরাবৃত্তি করবেন।
প্রশ্নোত্তর
যদি আপনি এই সপ্তাহেই ব্যবহারযোগ্য ড্যাশবোর্ড ও এলার্ট চান এবং এক ভেন্ডরের ওয়ার্কফ্লোতে বাজি ধরতেও আপত্তি না করেন, তবে proprietary এজেন্ট বেছে নিন। যদি আপনার সিস্টেম, ক্লাউড বা টুলিং পরিবর্তনের সম্ভাবনা বেশি এবং আপনি ইনস্ট্রুমেন্টেশন পোর্টেবল রাখতে চান, তবে OpenTelemetryই বেছে নিন।
সবার ক্ষেত্রে নয়, কিন্তু সাধারণত হয়। লক-ইন প্রায়শই আসে ড্যাশবোর্ড, এলার্ট রুল, কুয়েরি ভাষা এবং আপনাদের টিম যে vendor-specific ফিল্ডগুলো দৈনন্দিনভাবে ব্যবহার করে সেগুলো থেকে। যদিও আপনি রা ড ডেটা এক্সপোর্ট করতে পারেন, ব্যবহারযোগ্য ভিউ পুনর্নির্মাণ করা এবং ঐতিহাসিক ধারাবাহিকতা রাখা কঠিন হতে পারে।
Collector ব্যবহার করুন যখন আপনি একটি স্ট্যান্ডার্ড পাইপলাইন চান যা সিগন্যাল ব্যাচ, ফিল্টার, স্যাম্পলিং ও রাউটিং করে এক বা একাধিক ব্যাকএন্ডে পাঠায়। এটি পরে ডেটা কোথায় যাবে সেটি বদলাতে অ্যাপ কোড পরিবর্তন না করেই সাহায্য করে। যদি আপনার কেবল একটি সার্ভিস এবং একটি ব্যাকএন্ড থাকে, আপনি শুরুর জন্য সরাসরি পাঠাতে পারেন, কিন্তু স্কেল বা গভর্নেন্স চাহিদা বাড়লে টিম সাধারণত collector যোগ করে।
দ্রুত ডায়াগনোসিস কমাতে এক বা দুটি গুরুত্বপূর্ণ ইউজার জার্নির জন্য ট্রেস ইনস্ট্রুমেন্ট করুন। তারপর সার্ভিস-লেভেল মেট্রিক্সের ছোট সেট যোগ করুন (ল্যাটেন্সি, এরর রেট, এবং একটি স্যাচুরেশন সিগন্যাল) যাতে এলার্ট নির্ভরযোগ্যভাবে ট্রিগার করতে পারে। লগগুলো স্ট্রাকচার্ড রাখুন এবং ট্রেস আইডি দিয়ে কোরিলেট করুন যাতে আপনি কারণ নিশ্চিত করতে পারেন ও সঠিক এরর ডিটেইল দেখেন।
একটি স্থির সার্ভিস নাম ব্যবহার করুন, স্ট্যান্ডার্ড environment মান (যেমন prod ও staging) এবং প্রতিটি সিগন্যালেই version যুক্ত করুন যাতে আপনি ইস্যুকে রিলিজের সঙ্গে জুড়তে পারেন। metric label-এ user ID, ইমেইল বা পুরো URL রাখা থেকে বিরত থাকুন। এই মৌলিক নিয়মগুলি আগে করলেই ড্যাশবোর্ড পুনঃব্যবহারযোগ্য থাকবে এবং খরচ নিয়ন্ত্রিত থাকবে।
অনুমোদিত লেবেল ও অ্যাট্রিবিউটগুলোর সেটকে একটি চুক্তি হিসেবে বিবেচনা করুন। মেট্রিক্স কম-কার্ডিনালিটি রাখুন এবং ডিটেইল আইডেন্টিফায়ারগুলো লগে রাখুন (প্রয়োজনীয় ক্ষেত্রেই)। ট্রেসের জন্য ব্যবসায়িক প্রাসঙ্গিক অ্যাট্রিবিউট সাবধানে রেকর্ড করুন এবং এমন স্যাম্পলিং রুল ব্যবহার করুন যা এরর ও ধীর অনুরোধকে বেশি রাখে।
সাধারণ ট্রাফিক স্যাম্পল করুন কিন্তু এরর ও ধীর অনুরোধের জন্য বেশি রেট রাখুন যাতে ইনসিডেন্টে প্রয়োজনীয় ট্রেস পাওয়ার সম্ভাবনা বাড়ে। যদি স্যাম্পলিং খুব আগ্রেসিভ হয়, আপনি দেখবেন “কিছু ভুল হচ্ছে” কিন্তু কেন তা জানাবে এমন ট্রেস পাবেন না। প্রকটিক্যালভাবে, ইঞ্জিনিয়াররা ধারাবাহিকভাবে ফেইলিং রিকোয়েস্ট খুঁজে পায় কি না তা পরিমাপ করে স্যাম্পলিং পুনরায় নির্ধারণ করুন।
প্রাথমিকভাবে ব্যবহারকারীর প্রভাবের সঙ্গে সম্পর্কিত এলার্টগুলো দিন: গুরুত্বপূর্ণ এন্ডপয়েন্টে উচ্চ এরর রেট, সম্মত থ্রেশহোল্ডের চেয়ে sustained p95 ল্যাটেন্সি (৫–১০ মিনিট), এবং এমন একটি স্যাচুরেশন সিগন্যাল যা শীঘ্রই ব্যর্থতার পূর্বাভাস দেয় (কিউ ব্যাকলগ, DB কনেকশন পুল এক্সহস্টশন)। একটি মিসিং টেলিমেট্রি এলার্টও রাখুন যাতে কোন সার্ভিস রিপোর্ট করা বন্ধ করলে আপনি জানতে পারেন। যদি কোন এলার্ট কার্যকর কোনো অ্যাকশন না নিয়ে থাকে, দ্রুত সেটিকে সরান বা টিউন করুন।
ট্রেসগুলো সার্ভিসের পথ ও সময় দেখায়, কিন্তু লগগুলোতে সাধারণত সঠিক এরর মেসেজ, ভ্যালিডেশন ডিটেইল বা তৃতীয় পক্ষের রেসপন্স থাকে যা সমাধানের জন্য দরকার। মেট্রিক্স ট্রেন্ড দেখতে ও এলার্ট ট্রিগার করতে সাহায্য করে। দ্রুততম ডিবাগিং আসে যখন তিনটি সিগন্যালই কোরিলেটেড থাকে, বিশেষ করে লগে ট্রেস আইডি থাকা অবস্থায়।
হ্যাঁ। জেনারেটেড অ্যাপ হলেও মূল কাজ হলো কনভেনশনগুলোতে একমত হওয়া: সার্ভিস নাম, রুট নামকরণ, প্রয়োজনীয় অ্যাট্রিবিউট (env ও version), এবং কোথায় টেলিমেট্রি পাঠানো হবে তা সিদ্ধান্ত নেওয়া। একটি ভাল পদ্ধতি হলো সব জেনারেটেড সার্ভিসের জন্য একটি স্ট্যান্ডার্ড ইনস্ট্রুমেন্টেশন প্যাটার্ন নির্ধারণ করা যাতে প্রতিটি নতুন অ্যাপই প্রথম দিন থেকেই সঙ্গতিপূর্ণ ট্রেস, মেট্রিক্স ও লগ উত্পাদন করে। (AppMaster (appmaster.io) এই ক্ষেত্রে সাহায্য করতে পারে)।


