আপনি কি কখনও উত্পাদনে একটি ত্রুটি মোকাবেলা করেছেন, এবং আপনি যাই চেষ্টা করুন না কেন৷ , আপনি আপনার বিকাশ বা স্টেজিং পরিবেশে সমস্যাটি প্রতিলিপি করতে পারবেন না? প্রায়শই পরবর্তী ধাপ হল প্রোডাকশনে একটি ডিবাগ লগ টস করে আরও ডেটা সংগ্রহ করা। যদি আপনার কাছে একটি অনুরোধের সাথে লগগুলিকে সংযুক্ত করার একটি ভাল উপায় না থাকে তবে এটি হতাশাজনক হতে পারে, বিশেষ করে একটি ঘটনার সময়৷
আমরা সাহায্য করার জন্য একটি বৈশিষ্ট্য যোগ করেছি, এবং এটিকে ব্রেডক্রাম্বস বলা হয়।
একটি ব্রেডক্রাম্ব এটি অনেকটা লগ ইভেন্টের মতো, কিন্তু এটি একটি ত্রুটির পাশাপাশি সংরক্ষিত এবং রিপোর্ট করা হয়েছে। লগের মতো, একটি ব্রেডক্রাম্বে একটি বার্তা থাকে, তবে এটি মেটাডেটাও (হ্যাশম্যাপের আকারে) ধরে রাখতে পারে। একটি অনুরোধের (বা কাজের আমন্ত্রণ) সারা জীবন ধরে ব্রেডক্রাম্বের একটি সেট সংগ্রহ করা হয় এবং কোনও ত্রুটি রিপোর্ট না করা হলে তা অবিলম্বে ফেলে দেওয়া হয়।
স্ট্যাকে আপনার নিজের ব্রেডক্রাম্ব যোগ করা সহজ। শুধু Honeybadger.add_breadcrumb
-এ একটি কল করুন আপনার কোডের যেকোনো জায়গায়:
Honeybadger.add_breadcrumb("Loading User", metadata: {
user_name: user_name,
})
এবং যদি এর পরে একটি ত্রুটি রিপোর্ট করা হয়, তাহলে আপনি এটি ব্রেডক্রাম্ব স্ট্যাকে দেখতে পাবেন:
ওহ user_name
খালি দেখায়, এতে সমস্যা হতে পারে।
স্বয়ংক্রিয় ব্রেডক্রাম্ব
হানিব্যাজার রুবি লাইব্রেরিতে স্বয়ংক্রিয়ভাবে ব্রেডক্রাম্ব সংগ্রহ করার জন্য রুবি এবং রেলের হুক রয়েছে। উদাহরণস্বরূপ, প্রোডাকশনে নির্গত সমস্ত লগ বার্তা (Logger
এর মাধ্যমে পাঠানো হয় ক্লাস) ধরা হয় এবং ব্রেডক্রাম্বস হিসাবে তৈরি করা হয়। এছাড়াও আমরা কন্ট্রোলার অ্যাকশন, এসকিউএল কোয়েরি, অ্যাক্টিভ জব ইনভোকেশন ইত্যাদির জন্য ব্রেডক্রাম্ব সংগ্রহ করতে রেল ইন্সট্রুমেন্টেশনের সাথে যুক্ত হই...
আপনি কিভাবে এটি ব্যবহার করতে পারেন?
ব্রেডক্রাম্বগুলি বর্তমানে আমাদের রুবি ক্লায়েন্টের মাধ্যমে উপলব্ধ। আপনাকে অবশ্যই 4.4.0
সংস্করণে আপডেট করতে হবে এবং কনফিগারেশনে এটি সক্রিয় করতে ভুলবেন না কারণ এটি অক্ষম হবে ডিফল্টরূপে যতক্ষণ না আমরা একটি 5.0.0
প্রকাশ করি রত্নটির সংস্করণ, নিশ্চিত করতে যে আমরা যেকোন সমস্যা সমাধান করি।
অনুগ্রহ করে এটি চেষ্টা করে দেখুন এবং আপনি যদি কোনো সমস্যায় পড়েন তাহলে আমাদের জানান৷
ব্রেডক্রাম্বস প্রসারিত করা
এখন যেহেতু ব্রেডক্রাম্বগুলি আনুষ্ঠানিকভাবে চালু করা হয়েছে, আসুন কীভাবে সেগুলি প্রসারিত করবেন তার একটি দ্রুত উদাহরণ দেখি। আপনি যদি একটি Rails অ্যাপে ব্রেডক্রাম্বস সক্ষম করেন, তাহলে আপনি বিনামূল্যে কিছু স্ট্যান্ডার্ড ইন্সট্রুমেন্টেশন ব্রেডক্রাম্বস সংযুক্ত পাবেন, কিন্তু আমরা যদি আরও চাই?
ধরা যাক আমরা যখনই আমাদের অ্যাপ একটি HTTP অনুরোধ পাঠায় তখন আমরা একটি ব্রেডক্রাম্ব তৈরি করতে চাই। ডিবাগ করার সময় এই তথ্যটি কাজে আসতে পারে৷
এটি সম্পন্ন করার একটি সহজ উপায় হল Honeybadger.add_breadcrumb
কল করা প্রতিটি অনুরোধের আমন্ত্রণে।
def send_a_message
res = conn.post("/message", { user: user.id, body: "Hey!" }.to_json)
Honeybadger.add_breadcrumb("Request: /message", metadata: { user: user.id })
res
end
এখানে আমরা /message
-এ প্রতিটি পোস্টের পরে একটি ব্রেডক্রাম্ব সংরক্ষণ করি . পরের বার যখন আমাদের অ্যাপটি এই বার্তাটি পাঠানোর পরে একটি ত্রুটি ছুঁড়ে দেয়, তখন আমাদের দেখতে হবে কোন ব্যবহারকারী বার্তাটি পাঠিয়েছেন এবং কখন এটি ত্রুটির সাথে সম্পর্কিত হয়েছে, হ্যাঁ!
যদিও এটি কিছুটা কষ্টকর, কারণ আমাদের একটি add_breadcrumb
প্রয়োজন আমরা একটি অনুরোধ পাঠাই প্রতিটি অবস্থানে কল. আমি মনে রাখতে চাই , তবে, সেখানে আছে এই মত ব্রেডক্রাম্ব তৈরি করার সুবিধা। আপনি এই পদ্ধতিতে কোন মেটাডেটা ক্যাপচার করতে চান সে সম্পর্কে আপনি খুব নির্দিষ্ট হতে পারেন। প্রায়শই এটি উত্পাদনে একটি বাগ দ্বারা অনুপ্রাণিত লক্ষ্যযুক্ত তথ্য সংগ্রহ করার একটি দুর্দান্ত উপায়৷
সত্যিই আমি জানতে চাই কখন এবং কোথায় একটি অনুরোধ বেরিয়ে যায়। এটাও ভালো হবে যদি একটি লাইব্রেরি আমার জন্য বেশিরভাগ কাজ করতে পারে;)।
ফ্যারাডে এর সাথে ইন্সট্রুমেন্টিং
আমরা একটু প্রতারণা করতে যাচ্ছি এবং ধরে নিচ্ছি আপনি জনপ্রিয় ফ্যারাডে অনুরোধ লাইব্রেরি ব্যবহার করছেন৷
আমরা আমাদের কাজটি সম্পন্ন করার জন্য আমাদের নিজস্ব মিডলওয়্যার তৈরি করতে পারি, কিন্তু পরিবর্তে আমি একটি ব্রোকার হিসাবে রেল ইন্সট্রুমেন্টেশন ব্যবহার করতে চাই। ভাগ্যক্রমে, ফ্যারাডে_মিডলওয়্যার রত্ন দ্বারা সরবরাহ করা মিডলওয়্যার রয়েছে যা আমাদের জন্য ইভেন্টগুলি নির্গত করবে। রত্নটি আপনার Gemfile
-এ আছে তা নিশ্চিত করুন এবং instrumentation
নিশ্চিত করুন মিডলওয়্যার সংযোগে ইনজেকশন করা হয়।
connection = Faraday.new do |conn|
conn.use :instrumentation
conn.adapter Faraday.default_adapter
end
আপনি যদি আপনার অ্যাপের মধ্যে আপনার সংযোগ ভাগ না করেন তবে এটির জন্য একটু কাজ করতে হবে। আপনি যদি অলস হন তবে সমস্ত অনুরোধের মিডলওয়্যার সক্ষম আছে কিনা তা নিশ্চিত করতে আপনি সংযোগ বিকল্পগুলিকেও প্রিপেন্ড করতে পারেন। যদিও সতর্ক থাকুন, কারণ এটি আপনার অ্যাপের মধ্যে ঘটতে থাকা ফ্যারাডে অনুরোধগুলিকে সাহায্য করবে এবং রত্নগুলিও অন্তর্ভুক্ত করবে (যা আপনি চাইতে পারেন)!
রেল ইন্সট্রুমেন্টেশন ব্যবহার করার কিছু চমৎকার পার্শ্বপ্রতিক্রিয়া আছে, একটি হল আমরা অন্যান্য ব্যবহারের ক্ষেত্রে একাধিক সাবস্ক্রিপশন করতে পারি (সাধারণ লগিংয়ের উদ্দেশ্যে বলুন)।
আমাদের অনুরোধগুলিকে দ্বিধাদ্বন্দ্বে দেখছেন
এখন যেহেতু আমাদের ফ্যারাডে অনুরোধগুলি কার্যকর করা হয়েছে, আমরা সদস্যতা নিতে পারি এবং কিছু ব্রেডক্রাম্ব তৈরি করতে পারি:
ActiveSupport::Notifications.subscribe "request.faraday" do |_, _, _, _, data|
method = data[:method].to_s.upcase
metadata = data.to_h.slice(:url, :status).merge({method: method})
Honeybadger.add_breadcrumb("#{method}: #{metadata[:url]}", category: "request", metadata: metadata)
end
হানিব্যাজার এখন প্রতিটি বহির্গামী অনুরোধের জন্য একটি ব্রেডক্রাম্ব যোগ করছে!
লক্ষ্য করুন আমরা আমাদের অনুরোধ থেকে শুধুমাত্র কয়েকটি ডেটা পয়েন্ট পরিদর্শন করছি। আমরা আউটগোয়িং বা রেসপন্স বডি পেলোড যোগ করি না কারণ আমাদের ব্রেডক্রাম্ব মেটাডেটাতে সংবেদনশীল ডেটা ফাঁস হওয়ার একটি ভাল সম্ভাবনা রয়েছে।
আমাদের জানান কিভাবে এটা যায়!
আমরা আশা করি যে ব্রেডক্রাম্বস আপনার ডিবাগিং টুলবক্স একটি সহায়ক সংযোজন হবে। এটি চেষ্টা করে দেখুন, এবং আপনি যোগ করতে চান এমন কিছু থাকলে আমাদের চিৎকার দিন৷
৷