অতীতে, যখন আমরা ব্যাকএন্ড সম্পর্কে কথা বলতাম, আমরা সাধারণত একটি একক, বড় ডাটাবেস সহ একটি বড় অ্যাপ্লিকেশন উল্লেখ করতাম এবং লগিং নিরীক্ষণের জন্য যথেষ্ট ছিল। এখন, Kubernetes- এর মতো প্রযুক্তির জন্য ধন্যবাদ, মাইক্রোসার্ভিসেস মান হয়ে উঠেছে। অ্যাপ্লিকেশনগুলি আরও অসংখ্য এবং বিতরণ করা হয়েছে, এবং আমাদের অ্যাপ্লিকেশনগুলিতে সমস্যাগুলি ডিবাগিং এবং নির্ণয়ের জন্য প্রথাগত লগিং আর যথেষ্ট নয়৷
মনিটরিং সংগঠিত করার জন্য একটি চমৎকার সমাধান হল OpenTelemetry — একটি আধুনিক টুলকিট যা ডিবাগিং এবং ডিস্ট্রিবিউটেড সিস্টেমের কর্মক্ষমতা বিশ্লেষণের জন্য ব্যবহার করা যেতে পারে।
এই নিবন্ধটি আইটি পেশাদারদের জন্য উদ্দেশ্যে করা হয়েছে যারা ব্যাকএন্ড অপ্টিমাইজেশানে তাদের জ্ঞান প্রসারিত করতে চাইছেন। নীচে, আমরা OpenTelemetry কী, এর মূল ধারণা এবং এটি যে সমস্যাগুলি সমাধান করতে সাহায্য করে তার বিস্তারিত বর্ণনা করব। আপনি যদি আগ্রহী হন যে কিভাবে OpenTelemetry ব্যাকএন্ড সিস্টেম নিরীক্ষণ এবং ডিবাগ করার জন্য আপনার দৃষ্টিভঙ্গি পরিবর্তন করতে পারে, তাদের নির্ভরযোগ্যতা এবং দক্ষতা বৃদ্ধি করে — পড়ুন।
2000 এর দশকের শেষের দিকে বড় প্রযুক্তি সংস্থাগুলি প্রথমে বিতরণ করা লগিং এবং ট্রেসিংয়ের চ্যালেঞ্জের মুখোমুখি হয়েছিল। 2010 সালে, Google একটি গবেষণাপত্র প্রকাশ করে,
2014 সালে, Kubernetes আবির্ভূত হয়, মাইক্রোসার্ভিসেস এবং অন্যান্য ক্লাউড-ডিস্ট্রিবিউটেড সিস্টেমের উন্নয়নকে উল্লেখযোগ্যভাবে সহজতর করে। এর ফলে অনেক কোম্পানি মাইক্রোসার্ভিসে বিতরণ করা লগিং এবং ট্রেসিং নিয়ে সমস্যার সম্মুখীন হয়েছে। বিতরণকৃত ট্রেসিংকে মানসম্মত করার জন্য, CNCF দ্বারা গৃহীত ওপেনট্রেসিং স্ট্যান্ডার্ড এবং Google-এর OpenCensus প্রকল্প তৈরি করা হয়েছিল।
2019 সালে, OpenTracing এবং OpenCensus প্রকল্পগুলি OpenTelemetry নামে একীভূত হওয়ার ঘোষণা দিয়েছে। এই প্ল্যাটফর্মটি বহু বছর ধরে জমে থাকা সর্বোত্তম অনুশীলনগুলিকে একত্রিত করে, যে কোনও সিস্টেমে ট্রেসিং, লগিং এবং মেট্রিক্সের নির্বিঘ্ন একীকরণের অনুমতি দেয়, তাদের জটিলতা নির্বিশেষে।
আজ, OpenTelemetry শুধুমাত্র একটি প্রকল্প নয়; এটি টেলিমেট্রি ডেটা সংগ্রহ এবং প্রেরণের জন্য একটি শিল্প মান। এটি Google এবং Microsoft-এর মতো বিশেষজ্ঞ এবং বাজার-নেতৃস্থানীয় সংস্থাগুলির একটি সম্প্রদায় দ্বারা বিকাশিত এবং সমর্থিত। প্রকল্পটি বিকশিত হতে থাকে, একীকরণ এবং ব্যবহারের প্রক্রিয়াকে সহজ করার জন্য নতুন ক্ষমতা অর্জন করে।
OpenTelemetry হল একটি বিস্তৃত চর্চা এবং সরঞ্জামের সেট যা সংজ্ঞায়িত করে যে একটি অ্যাপ্লিকেশন বাইরের বিশ্বের সাথে যোগাযোগ করার জন্য কী সংকেত তৈরি করতে পারে এবং কীভাবে এই সংকেতগুলি সংগ্রহ করা যায় এবং অ্যাপ্লিকেশনের অবস্থা এবং সামগ্রিকভাবে সিস্টেমের উপর নজরদারি করার জন্য ভিজ্যুয়ালাইজ করা যায়। তিনটি প্রধান ধরনের সংকেত হল ট্রেসিং, লগিং এবং মেট্রিক্স সংগ্রহ ।
**আসুন প্রতিটি উপাদান ঘনিষ্ঠভাবে দেখা যাক: \
ওপেনটেলিমেট্রি অপারেশন প্রেক্ষাপটের ধারণা প্রবর্তন করে। একটি প্রসঙ্গে প্রাথমিকভাবে বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে যেমন `trace_id`
(বর্তমান অপারেশনের জন্য শনাক্তকারী) এবং `span_id`
(একটি সাব-রিকোয়েস্টের জন্য আইডেন্টিফায়ার, প্রতিটি সাব-রিকোয়েস্টের একটি অনন্য `span_id`
আছে)।
অতিরিক্তভাবে, একটি প্রসঙ্গে স্ট্যাটিক তথ্য থাকতে পারে, যেমন নোডের নাম যেখানে অ্যাপ্লিকেশনটি স্থাপন করা হয়েছে বা পরিবেশের নাম (prod/qa)। এই ক্ষেত্রগুলি, OpenTelemetry পরিভাষায় সম্পদ হিসাবে পরিচিত, সহজ অনুসন্ধানযোগ্যতার জন্য প্রতিটি লগ, মেট্রিক বা ট্রেসের সাথে সংযুক্ত করা হয়। প্রসঙ্গগুলি বর্তমান প্রান্তবিন্দুর শনাক্তকারীর মতো গতিশীল ডেটাও অন্তর্ভুক্ত করতে পারে ( `http_path: "GET /user/:id/info"`
), যা লগ, মেট্রিক্স বা ট্রেসের গোষ্ঠীর সাথে বেছে বেছে সংযুক্ত করা যেতে পারে।
OpenTelemetry প্রসঙ্গগুলি প্রসঙ্গ প্রচার প্রোটোকল ব্যবহার করে বিভিন্ন অ্যাপ্লিকেশনের মধ্যে পাস করা যেতে পারে। এই প্রোটোকলগুলি হেডার সেটগুলি নিয়ে গঠিত যা প্রতিটি HTTP বা gRPC অনুরোধে বা সারিগুলির জন্য বার্তাগুলির শিরোনামে যোগ করা হয়। এটি ডাউনস্ট্রিম অ্যাপ্লিকেশনগুলিকে এই শিরোনামগুলি থেকে অপারেশন প্রসঙ্গ পুনর্গঠনের অনুমতি দেয়।
এখানে প্রসঙ্গ প্রচারের কিছু উদাহরণ রয়েছে:
B3-প্রচার এটি শিরোনামের একটি সেট ( x-b3-*
) মূলত জিপকিন ট্রেসিং সিস্টেমের জন্য তৈরি করা হয়েছে। এটি ওপেনট্রেসিং-এ অভিযোজিত হয়েছিল এবং অনেক সরঞ্জাম এবং লাইব্রেরি দ্বারা ব্যবহৃত হয়েছিল। B3-প্রসারণ trace_id
/ span_id
এবং একটি পতাকা বহন করে যা নির্দেশ করে যে স্যাম্পলিং প্রয়োজনীয় কিনা।
W3C ট্রেস কনটেক্সট W3C ওয়ার্কিং গ্রুপ দ্বারা তৈরি করা হয়েছে, এই স্ট্যান্ডার্ডটি বিভিন্ন প্রসঙ্গ প্রচার পদ্ধতিকে একক স্ট্যান্ডার্ডে একীভূত করে এবং OpenTelemetry-এ এটি ডিফল্ট। এই মানগুলি প্রয়োগ করার একটি ভাল উদাহরণ হল নিরীক্ষণ এবং ডিবাগিং নির্ভুলতার সাথে আপস না করে বিভিন্ন প্রযুক্তির সাথে বাস্তবায়িত মাইক্রোসার্ভিসগুলির মাধ্যমে পাস করা একটি অনুরোধের বাস্তবায়ন ট্র্যাক করা।
ট্রেসিং হল রেকর্ডিং এবং পরবর্তীতে একাধিক মাইক্রোসার্ভিসের মাধ্যমে একটি অনুরোধের পথের সময়রেখা ভিজ্যুয়ালাইজ করার প্রক্রিয়া।
ভিজ্যুয়ালাইজেশনে, প্রতিটি বারকে একটি "স্প্যান" বলা হয় এবং একটি অনন্য "span_id" আছে। রুট স্প্যানটিকে একটি "ট্রেস" হিসাবে উল্লেখ করা হয় এবং একটি "trace_id" আছে, যা সমগ্র অনুরোধের শনাক্তকারী হিসাবে কাজ করে৷
এই ধরনের ভিজ্যুয়ালাইজেশন আপনাকে অনুমতি দেয়:
trace_id
এবং span_id
তৈরি করে।
এর আপাত সরলতা সত্ত্বেও, লগিং সমস্যা নির্ণয়ের জন্য সবচেয়ে শক্তিশালী সরঞ্জামগুলির মধ্যে একটি। OpenTelemetry প্রাসঙ্গিক তথ্য যোগ করে ঐতিহ্যগত লগিং উন্নত করে। বিশেষভাবে, যদি একটি সক্রিয় ট্রেস উপস্থিত থাকে, তাহলে `trace_id` এবং `span_id` বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে লগগুলিতে যোগ করা হয়, সেগুলিকে ট্রেস টাইমলাইনে লিঙ্ক করে৷ অধিকন্তু, লগ অ্যাট্রিবিউটে OpenTelemetry প্রসঙ্গ থেকে স্ট্যাটিক তথ্য যেমন নোড আইডেন্টিফায়ার, সেইসাথে বর্তমান HTTP এন্ডপয়েন্ট আইডেন্টিফায়ারের মতো গতিশীল তথ্য (`http_path: "GET /user/:id"`) অন্তর্ভুক্ত থাকতে পারে।
`trace_id` ব্যবহার করে, আপনি বর্তমান অনুরোধের সাথে যুক্ত সমস্ত মাইক্রোসার্ভিস থেকে লগ খুঁজে পেতে পারেন, যখন `span_id` আপনাকে উপ-অনুরোধের মধ্যে পার্থক্য করতে দেয়। উদাহরণস্বরূপ, পুনরায় চেষ্টা করার ক্ষেত্রে, বিভিন্ন প্রচেষ্টার লগগুলিতে আলাদা `span_id` থাকবে। এই শনাক্তকারীগুলি ব্যবহার করে রিয়েল-টাইমে পুরো সিস্টেমের আচরণের দ্রুত বিশ্লেষণ সক্ষম করে, সমস্যা নির্ণয়ের গতি বাড়ায় এবং স্থিতিশীলতা এবং নির্ভরযোগ্যতা বৃদ্ধি করে।
মেট্রিক্স সংগ্রহ সিস্টেম পারফরম্যান্সের পরিমাণগত ডেটা প্রদান করে, যেমন লেটেন্সি, ত্রুটির হার, সম্পদ ব্যবহার এবং আরও অনেক কিছু। মেট্রিক্সের রিয়েল-টাইম মনিটরিং আপনাকে কর্মক্ষমতা পরিবর্তনের সাথে সাথে প্রতিক্রিয়া জানাতে, ব্যর্থতা এবং সম্পদের ক্লান্তি রোধ করতে এবং ব্যবহারকারীদের জন্য অ্যাপ্লিকেশনটির উচ্চ প্রাপ্যতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে দেয়।
প্রমিথিউস এবং গ্রাফানার মতো মেট্রিক স্টোরেজ এবং ভিজ্যুয়ালাইজেশন সিস্টেমগুলির সাথে একীকরণ এই ডেটাটি কল্পনা করা সহজ করে তোলে, উল্লেখযোগ্যভাবে পর্যবেক্ষণকে সহজতর করে।
OpenTelemetry মেট্রিক সংগ্রাহক প্রমিথিউস এবং OpenMetrics মানগুলির সাথে সামঞ্জস্যপূর্ণ, উল্লেখযোগ্য পরিবর্তন ছাড়াই OpenTelemetry সমাধানে একটি সহজ রূপান্তর সক্ষম করে। OpenTelemetry SDK মেট্রিক্সের সাথে ট্রেস_আইডি উদাহরণ রপ্তানি করার অনুমতি দেয়, এটি লগ উদাহরণ এবং ট্রেসের সাথে মেট্রিক্সের সম্পর্ক স্থাপন করা সম্ভব করে।
একসাথে, লগ, মেট্রিক্স এবং ট্রেসিং সিস্টেমের অবস্থার একটি বিস্তৃত দৃশ্য তৈরি করে:
তিনটি মূল উপাদান ছাড়াও, OpenTelemetry-এ স্যাম্পলিং, ব্যাগেজ এবং অপারেশন প্রসঙ্গ ব্যবস্থাপনার ধারণা অন্তর্ভুক্ত রয়েছে।
উচ্চ-লোড সিস্টেমে, লগ এবং ট্রেসের পরিমাণ বিশাল হয়ে যায়, অবকাঠামো এবং ডেটা স্টোরেজের জন্য যথেষ্ট সম্পদের প্রয়োজন হয়। এই সমস্যাটির সমাধান করার জন্য, OpenTelemetry স্ট্যান্ডার্ডের মধ্যে রয়েছে সিগন্যাল স্যাম্পলিং — শুধুমাত্র ট্রেস এবং লগের একটি অংশ রপ্তানি করার ক্ষমতা। উদাহরণস্বরূপ, আপনি অনুরোধের শতাংশ, দীর্ঘ-চলমান অনুরোধ, বা ত্রুটির অনুরোধ থেকে বিশদ সংকেত রপ্তানি করতে পারেন। এই পদ্ধতিটি উল্লেখযোগ্য সম্পদ সংরক্ষণ করার সময় পরিসংখ্যান তৈরি করার জন্য পর্যাপ্ত নমুনা সংগ্রহের অনুমতি দেয়।
যাইহোক, যদি প্রতিটি সিস্টেম স্বাধীনভাবে সিদ্ধান্ত নেয় যে কোন অনুরোধগুলি বিস্তারিতভাবে পর্যবেক্ষণ করা হবে, আমরা প্রতিটি অনুরোধের একটি খণ্ডিত দৃষ্টিভঙ্গি দিয়ে শেষ করব। কিছু সিস্টেম বিস্তারিত ডেটা রপ্তানি করতে পারে যখন অন্যরা শুধুমাত্র আংশিকভাবে রপ্তানি করতে পারে বা মোটেও রপ্তানি করতে পারে না।
এই সমস্যাটি সমাধান করার জন্য, OpenTelemetry এর প্রসঙ্গ প্রচার পদ্ধতি `trace_id`/`span_id` সহ একটি নমুনা ফ্ল্যাগ প্রেরণ করে। এটি নিশ্চিত করে যে ব্যবহারকারীর অনুরোধ গ্রহণকারী প্রাথমিক পরিষেবাটি যদি সিদ্ধান্ত নেয় যে অনুরোধটি বিশদভাবে পর্যবেক্ষণ করা উচিত, তবে অন্যান্য সমস্ত সিস্টেম এটি অনুসরণ করবে। অন্যথায়, সমস্ত সিস্টেমের সম্পদ সংরক্ষণের জন্য আংশিকভাবে বা সংকেত রপ্তানি করা উচিত নয়। এই পদ্ধতিটিকে "হেড স্যাম্পলিং" বলা হয় - অনুরোধ প্রক্রিয়াকরণের শুরুতে এলোমেলোভাবে বা কিছু ইনপুট বৈশিষ্ট্যের উপর ভিত্তি করে নেওয়া একটি সিদ্ধান্ত।
এছাড়াও, ওপেনটেলিমেট্রি "টেইল স্যাম্পলিং" সমর্থন করে, যেখানে সমস্ত অ্যাপ্লিকেশন সর্বদা সমস্ত সংকেত বিস্তারিতভাবে রপ্তানি করে, তবে একটি মধ্যবর্তী বাফার বিদ্যমান। সমস্ত ডেটা সংগ্রহ করার পরে, এই বাফারটি সম্পূর্ণ ডেটা ধরে রাখতে বা শুধুমাত্র একটি আংশিক নমুনা রাখার সিদ্ধান্ত নেয়। এই পদ্ধতিটি প্রতিটি অনুরোধ বিভাগের আরও প্রতিনিধি নমুনার (সফল/দীর্ঘ/ত্রুটি) জন্য অনুমতি দেয় তবে অতিরিক্ত অবকাঠামো সেটআপ প্রয়োজন।
ব্যাগেজ মেকানিজম স্বয়ংক্রিয়ভাবে অনুরোধ প্রক্রিয়াকরণের সময় সমস্ত মাইক্রোসার্ভিসের মধ্যে trace_id
/ span_id
সহ নির্বিচারে কী-মান জোড়া প্রেরণ করার অনুমতি দেয়। অনুরোধ পাথ জুড়ে প্রয়োজনীয় অতিরিক্ত তথ্য প্রেরণের জন্য এটি কার্যকর—যেমন ব্যবহারকারীর তথ্য বা রানটাইম পরিবেশ সেটিংস।
W3C স্ট্যান্ডার্ড অনুযায়ী লাগেজ ট্রান্সমিট করার জন্য হেডারের উদাহরণ: tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE,userId=1c30032v5
এখানে ব্যাগেজ ব্যবহারের কিছু উদাহরণ রয়েছে:
userId
, productId
বা deviceId
মতো ব্যবসার প্রসঙ্গ তথ্য পাস করা সমস্ত মাইক্রোসার্ভিসের মাধ্যমে পাস করা যেতে পারে। অ্যাপ্লিকেশনগুলি স্বয়ংক্রিয়ভাবে এই তথ্য লগ করতে পারে, মূল অনুরোধের জন্য ব্যবহারকারীর প্রসঙ্গ দ্বারা লগ অনুসন্ধানের অনুমতি দেয়৷
SDK বা অবকাঠামোর জন্য নির্দিষ্ট কনফিগারেশন প্যারামিটার সেটিংস।
রাউটিং পতাকা পতাকা যা লোড ব্যালেন্সারদের রাউটিং সিদ্ধান্ত নিতে সাহায্য করে। পরীক্ষার সময়, কিছু অনুরোধ মক ব্যাকএন্ডে রুট করা প্রয়োজন হতে পারে। যেহেতু সমস্ত পরিষেবার মাধ্যমে লাগেজ স্বয়ংক্রিয়ভাবে প্রেরণ করা হয়, তাই অতিরিক্ত প্রোটোকল তৈরি করার প্রয়োজন নেই—শুধু লোড ব্যালেন্সারে একটি নিয়ম সেট আপ করুন৷
মনে রাখবেন যে ব্যাগেজের কার্যক্ষমতার প্রভাব ন্যূনতম হলেও অত্যধিক ব্যবহার নেটওয়ার্ক এবং পরিষেবার লোডকে উল্লেখযোগ্যভাবে বৃদ্ধি করতে পারে। পারফরম্যান্সের সমস্যাগুলি এড়াতে ব্যাগেজের মধ্য দিয়ে আপনাকে কোন ডেটা পাস করতে হবে তা সাবধানে বেছে নিন।
অবকাঠামো স্তরে ওপেনটেলিমেট্রি প্রয়োগ করার ক্ষেত্রে ওপেনটেলিমেট্রি ব্যাকএন্ডগুলিকে অ্যাপ্লিকেশন আর্কিটেকচারে একীভূত করা এবং ডেটা একত্রিতকরণের জন্য পরিকাঠামো কনফিগার করা জড়িত।
প্রক্রিয়াটি চারটি ধাপ নিয়ে গঠিত:
অ্যাপ্লিকেশন ইন্টিগ্রেশন প্রথম পর্যায়ে, ওপেনটেলিমেট্রি SDKগুলি সরাসরি মেট্রিক্স, লগ এবং ট্রেস সংগ্রহের জন্য অ্যাপ্লিকেশনগুলিতে একত্রিত হয়, প্রতিটি সিস্টেমের উপাদানের কার্যকারিতা সম্পর্কে ডেটার একটি অবিচ্ছিন্ন প্রবাহ নিশ্চিত করে।
রপ্তানিকারকদের কনফিগার করা সংগৃহীত ডেটা অ্যাপ্লিকেশন থেকে রপ্তানিকারকদের মাধ্যমে বহিরাগত সিস্টেমে আরও প্রক্রিয়াকরণের জন্য রুট করা হয়, যেমন লগিং, মনিটরিং, ট্রেসিং বা বিশ্লেষণ সিস্টেম, আপনার প্রয়োজনের উপর নির্ভর করে।
একত্রীকরণ এবং সঞ্চয়স্থান এই পর্যায়ে ডেটা স্বাভাবিককরণ, এটিকে অতিরিক্ত তথ্য দিয়ে সমৃদ্ধ করা এবং সিস্টেমের অবস্থার একটি একীভূত দৃশ্য তৈরি করতে বিভিন্ন উত্স থেকে ডেটা একত্রিত করা জড়িত থাকতে পারে।
ডেটা ভিজ্যুয়ালাইজেশন অবশেষে, প্রক্রিয়াকৃত ডেটা গ্রাফানা (মেট্রিক্স এবং ট্রেসের জন্য) বা কিবানা (লগের জন্য) এর মতো সিস্টেমে ড্যাশবোর্ড হিসাবে উপস্থাপন করা হয়। এটি দলগুলিকে সিস্টেমের স্বাস্থ্যের দ্রুত মূল্যায়ন করতে, সমস্যা এবং প্রবণতা সনাক্ত করতে এবং জেনারেট করা সংকেতের উপর ভিত্তি করে সতর্কতা সেট আপ করতে দেয়।
একটি অ্যাপ্লিকেশনের সাথে সংহত করার জন্য, আপনাকে ব্যবহার করা প্রোগ্রামিং ভাষার জন্য উপযুক্ত OpenTelemetry SDK সংযোগ করতে হবে বা সরাসরি OpenTelemetry সমর্থন করে এমন লাইব্রেরি এবং ফ্রেমওয়ার্ক নিয়োগ করতে হবে। OpenTelemetry প্রায়ই পরিচিত লাইব্রেরি থেকে ব্যাপকভাবে ব্যবহৃত ইন্টারফেস প্রয়োগ করে, ড্রপ-ইন প্রতিস্থাপনের অনুমতি দেয়। উদাহরণস্বরূপ, মাইক্রোমিটার লাইব্রেরি সাধারণত জাভা ইকোসিস্টেমে মেট্রিক্স সংগ্রহের জন্য ব্যবহৃত হয়। OpenTelemetry SDK তার মাইক্রোমিটার ইন্টারফেসের বাস্তবায়ন প্রদান করে, প্রধান অ্যাপ্লিকেশন কোড পরিবর্তন না করেই মেট্রিক রপ্তানি সক্ষম করে। তাছাড়া, OpenTelemetry পুরানো OpenTracing এবং OpenCensus ইন্টারফেসের বাস্তবায়ন অফার করে, ওপেনটেলিমেট্রিতে একটি মসৃণ স্থানান্তরকে সহজতর করে।
আইটি সিস্টেমে, ওপেনটেলিমেট্রি নির্ভরযোগ্য এবং দক্ষ ব্যাকএন্ডের ভবিষ্যতের চাবিকাঠি হয়ে উঠতে পারে। এই টুলটি ডিবাগিং এবং মনিটরিংকে সহজ করে এবং একটি নতুন স্তরে অ্যাপ্লিকেশন কর্মক্ষমতা এবং অপ্টিমাইজেশন সম্পর্কে গভীর বোঝার সুযোগও খুলে দেয়। একটি ভবিষ্যত গঠনে সাহায্য করতে OpenTelemetry সম্প্রদায়ে যোগ দিন যেখানে ব্যাকএন্ড বিকাশ সহজ এবং আরও কার্যকর!