502 ভুল গেটওয়ে - সকেট হ্যাং-আপ

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

সমস্যার উপসর্গ

Edge Microgateway-তে API কলের উত্তর হিসেবে ক্লায়েন্ট অ্যাপ্লিকেশন 502 Bad Gateway HTTP স্ট্যাটাস কোড সহ ECONNRESET কোড পায়।

সমস্যা সংক্রান্ত মেসেজ

ক্লায়েন্ট নিম্নলিখিত রেসপন্স কোড দেখতে পাবেন:

HTTP/1.1 502 Bad Gateway

উত্তরে নিম্নলিখিত সমস্যার মেসেজটি অন্তর্ভুক্ত থাকবে:

{"message":"socket hang up","code":"ECONNRESET"}

সম্ভাব্য কারণ

কারণ বিবরণ এর জন্য প্রযোজ্য সমস্যার সমাধান সংক্রান্ত নির্দেশাবলী
কানেকশন চালু রাখার টাইম-আউট ভুলভাবে কনফিগার করা হয়েছে Edge Microgateway ও টার্গেট সার্ভারের মধ্যে ভুলভাবে কনফিগার করা 'কিপ-অ্যালাইভ' টাইম-আউট। এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী
টার্গেট সার্ভার কানেকশন অসম্পূর্ণ রেখেই বন্ধ করে দেয় Edge Microgateway অনুরোধের পেলোড পাঠানোর সময় টার্গেট সার্ভার কানেকশন বন্ধ করে দেয়। এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী

সাধারণ ডায়াগনসিস ধাপ

  1. Edge Microgateway লগ চেক করুন:
    /var/tmp/edgemicro-`hostname`-*.log
  2. নির্দিষ্ট সময়সীমার মধ্যে (যদি সমস্যাটি আগে ঘটে থাকে) 502 কোড ECONNRESET সহ কোনও সমস্যা আছে কিনা তা দেখুন অথবা এখনও 502 সহ কোনও অনুরোধ ব্যর্থ হচ্ছে কিনা তা দেখুন।
    2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test]
    [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684]
    [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
  3. আপনার লগিং লেভেল warn বা info হিসেবে সেট করা থাকলে, দ্বিতীয় এলিমেন্টে টার্গেট সার্ভারের হোস্টনেম ও পোর্ট সহ একটি [warn] মেসেজও থাকবে। এই উদাহরণে এটি হল X.X.X.X:8080 এবং এটি পরে tcpdump ক্যাপচার করার জন্য ব্যবহার করা যেতে পারে।
    2021-06-23T03:52:24.109Z
    [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup]
    [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware]
    [targetRequest error][GET][][socket hang up][ECONNRESET][395]
  4. সমস্যার কোড [socket hang up][ECONNRESET] থেকে বোঝা যায় যে টার্গেট সার্ভার Edge Microgateway-এর সাথে কানেকশন বন্ধ করে দিয়েছে। এটি কত ঘন ঘন ঘটছে তা নির্ধারণ করতে লগে সার্চ করা যেতে পারে।

কারণ: ভুলভাবে কনফিগার করা 'কিপ-অ্যালাইভ' টাইমআউট

ডায়াগনসিস

  1. সমস্যার সাধারণ ডায়াগনসিস সংক্রান্ত ধাপ অনুসরণ করুন এবং আপনি [socket hang up][ECONNRESET] সমস্যার মেসেজ পেয়েছেন কিনা তা যাচাই করুন।
  2. উত্তর হ্যাঁ হলে, নিচে ব্যাখ্যা করা tcpdump-এর সাহায্যে আরও তদন্ত করুন:

tcpdump ব্যবহার করা

  1. Edge Microgateway এবং ব্যাকএন্ড সার্ভারের মধ্যে tcpdump ক্যাপচার করুন Edge Microgateway হোস্ট অপারেটিং সিস্টেমে নিম্নলিখিত কমান্ডের মাধ্যমে:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  2. tcpdump ক্যাপচার করা বিশ্লেষণ করুন:

    tcpdump আউটপুটের নমুনা: ( আরও বড় ছবি দেখুন)

    উপরের নমুনা tcpdump-এ, আপনি নিম্নলিখিত বিষয়গুলি দেখতে পাবেন:

    1. প্যাকেট 250288-এ, ক্লায়েন্ট একটি POST অনুরোধ পাঠায়।
    2. ২৫০৩৭১ নম্বর প্যাকেটে, সার্ভার 200 OK দিয়ে উত্তর দেয়।
    3. প্যাকেট 250559-এ, ক্লায়েন্ট একটি ACK. পাঠায়
    4. প্যাকেট 250560-এ, সার্ভার Continuation মেসেজ পাঠায়।
    5. প্যাকেট 250561-এ, ক্লায়েন্ট একটি ACK.
    6. প্যাকেট 262436-এ, সার্ভার FIN, ACK পাঠায় কানেকশন বন্ধ করার প্রসেস শুরু করা ক্লায়েন্টকে। মনে রাখবেন, এটি আগের প্যাকেট (250561) পাঠানোর পরে মোটামুটি পাঁচ সেকেন্ড পরে পাঠানো হয়েছে।
    7. প্যাকেট 262441-এ, ক্লায়েন্ট আরেকটি POST অনুরোধ পাঠায়। তবে, এটি ব্যর্থ হয় কারণ সার্ভার আগেই কানেকশন বন্ধ করার প্রক্রিয়া শুরু করে দিয়েছে। এটি RST-এর মাধ্যমে উত্তর দেয়, প্যাকেট 262441.

    এই উদাহরণে একই কানেকশন অন্তত একবার সফলভাবে আবার ব্যবহার করা হয়েছে, কিন্তু ফাইনাল অনুরোধে, সার্ভার পাঁচ সেকেন্ডের নিষ্ক্রিয় সময়ের পরে কানেকশন বন্ধ করে দেয়, যা সেই একই সময়ে ঘটে যখন ক্লায়েন্ট একটি নতুন অনুরোধ পাঠায়। এটি থেকে বোঝা যায় যে ব্যাকএন্ড সার্ভারের কিপ-অ্যালাইভ টাইমআউট সম্ভবত ক্লায়েন্টে সেট করা ভ্যালুর সমান বা তার থেকে কম। এটি যাচাই করতে, Edge Microgateway ও ব্যাকএন্ড সার্ভারে 'কিপ-অ্যালাইভ' টাইমআউট তুলনা করুন দেখুন।

কীপ-অ্যালাইভ টাইমআউটের তুলনা করা

  1. Edge Microgateway-তে নির্দিষ্ট কোনও কিপ-অ্যালাইভ টাইমআউট প্রপার্টি নেই। এটি যে অপারেটিং সিস্টেমে চলছে সেটি নির্ধারণ করে। সাধারণ উদাহরণ হল Windows, Linux এবং Docker কন্টেনার।
  2. এটি অপারেটিং সিস্টেমে কাস্টমাইজ করা হতে পারে। আপনার সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন। সাধারণত, Linux অপারেটিং সিস্টেমে ডিফল্ট হিসেবে দুই ঘণ্টার কিপ-অ্যালাইভ টাইম-আউট থাকে।
  3. এরপরে, আপনার ব্যাকএন্ড সার্ভারে কনফিগার করা 'কিপ-অ্যালাইভ' টাইমআউট প্রপার্টি চেক করুন। ধরা যাক, আপনার ব্যাকএন্ড সার্ভার ১০ সেকেন্ডের ভ্যালু দিয়ে কনফিগার করা আছে।
  4. আপনি যদি নির্ধারণ করেন যে অপারেটিং সিস্টেমে কিপ-অ্যালাইভ টাইমআউটের ভ্যালু উপরের উদাহরণে দেখানো ব্যাকএন্ড সার্ভারে কিপ-অ্যালাইভ টাইমআউট প্রপার্টির ভ্যালুর চেয়ে বেশি, তাহলে 502 সমস্যার কারণ এটিই।

রেজোলিউশন

Edge Microgateway যে অপারেটিং সিস্টেমে চলছে, সেটির কিপ-অ্যালাইভ টাইমআউট প্রপার্টি যেন ব্যাকএন্ড সার্ভারের তুলনায় সবসময় কম হয়, তা নিশ্চিত করুন।

  1. ব্যাকএন্ড সার্ভারে 'কিপ-অ্যালাইভ' টাইমআউটের জন্য সেট করা ভ্যালু নির্ধারণ করুন।
  2. অপারেটিং সিস্টেমে কিপ-অ্যালাইভ টাইমআউট প্রপার্টির জন্য উপযুক্ত ভ্যালু কনফিগার করুন, যাতে কিপ-অ্যালাইভ টাইমআউট প্রপার্টির ভ্যালু ব্যাকএন্ড সার্ভারে সেট করা ভ্যালুর থেকে কম হয়। এর জন্য আপনার অপারেটিং সিস্টেমে প্রযোজ্য ধাপগুলি অনুসরণ করুন।

পেশাদার পদ্ধতি

এই ধরনের রেস কন্ডিশন ও 502 সমস্যা এড়াতে, ডাউনস্ট্রিম কম্পোনেন্টগুলিতে আপস্ট্রিম সার্ভারে কনফিগার করা কীপ-অ্যালাইভ টাইমআউট থ্রেশহোল্ডের থেকে কম মান সেট করার জন্য অত্যন্ত সাজেস্ট করা হয়। প্রতিটি ডাউনস্ট্রিম হপ, প্রতিটি আপস্ট্রিম হপের থেকে কম হতে হবে। Edge Microgateway-তে, নিম্নলিখিত নির্দেশিকা ব্যবহার করা ভাল:

  1. ক্লায়েন্ট অ্যাপ্লিকেশন বা লোড ব্যালেন্সারের কিপ-অ্যালাইভ টাইমআউট Edge Microgateway-এর কিপ-অ্যালাইভ টাইমআউটের চেয়ে কম হতে হবে।

    Edge Microgateway-তে কিপ-অ্যালাইভ টাইমআউট কনফিগার করতে, আপনার ~/.edgemicro/org-env-config.yaml ফাইলে keep_alive_timeout ভ্যালু যোগ করুন।

    edgemicro:
      keep_alive_timeout: 65000
  2. Edge Microgateway অপারেটিং সিস্টেমের কিপ-অ্যালাইভ টাইমআউট টার্গেট সার্ভারের কিপ-অ্যালাইভ টাইমআউটের থেকে কম হতে হবে।
  3. Edge Microgateway-এর আগে বা পরে অন্য কোনও হপ থাকলে, একই নিয়ম প্রযোজ্য হবে। আপস্ট্রিমের সাথে কানেকশন বন্ধ করার দায়িত্ব সবসময় ডাউনস্ট্রিম ক্লায়েন্টের উপর ছেড়ে দেওয়া উচিত।

কারণ: টার্গেট সার্ভার কানেকশন অসম্পূর্ণ অবস্থায় বন্ধ করে দেয়

ডায়াগনসিস

  1. সমস্যার সমাধান সংক্রান্ত সাধারণ ধাপ অংশে ব্যাখ্যা করা ধাপগুলি অনুসরণ করুন এবং আপনি [socket hang up][ECONNRESET] সমস্যাটি পেয়েছেন কিনা তা যাচাই করুন।
  2. যদি হ্যাঁ হয়, তাহলে tcpdump-এর সাহায্যে আরও তদন্ত করুন, যা নিচে ব্যাখ্যা করা হয়েছে।

    উপরের উদাহরণে দেখানো সমস্যার মেসেজ [targetRequest error][GET][][socket hang up][ECONNRESET] থেকে বোঝা যাচ্ছে যে Edge Microgateway ব্যাকএন্ড (টার্গেট) সার্ভারে অনুরোধ পাঠানোর সময় এই সমস্যা হয়েছে। অর্থাৎ, Edge Microgateway ব্যাকএন্ড সার্ভারে API অনুরোধ পাঠিয়েছে এবং উত্তরের জন্য অপেক্ষা করছে। তবে, Edge Microgateway কোনও উত্তর পাওয়ার আগেই ব্যাকএন্ড সার্ভার হঠাৎ করে কানেকশন বন্ধ করে দেয়।

  3. আপনার ব্যাকএন্ড সার্ভার লগ চেক করে দেখুন যে কোনও সমস্যা বা তথ্য আছে কিনা যা ব্যাকএন্ড সার্ভারকে হঠাৎ করে কানেকশন বন্ধ করে দিতে বাধ্য করেছে। আপনি কোনও সমস্যা বা তথ্য খুঁজে পেলে, সমাধান বিভাগে যান এবং আপনার ব্যাকএন্ড সার্ভারে সমস্যাটি যথাযথভাবে সমাধান করুন।
  4. আপনার ব্যাকএন্ড সার্ভারে কোনও সমস্যা বা তথ্য খুঁজে না পেলে, Edge Microgateway সার্ভারে tcpdump আউটপুট সংগ্রহ করুন:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  5. tcpdump ক্যাপচার করা বিশ্লেষণ করুন:

    tcpdump আউটপুটের নমুনা: ( আরও বড় ছবি দেখুন)

    উপরের নমুনা tcpdump-এ, আপনি নিম্নলিখিত বিষয়গুলি দেখতে পাবেন:

    1. প্যাকেট ৪-এ, Edge Microgateway টার্গেট সার্ভারে একটি GET অনুরোধ পাঠিয়েছে।
    2. প্যাকেট ৫-এ, টার্গেট সার্ভার ACK-এর মাধ্যমে অনুরোধের প্রাপ্তি স্বীকার করেছে।
    3. তবে, প্যাকেট 6-এ, রেসপন্স পেলোড দিয়ে উত্তর দেওয়ার পরিবর্তে, টার্গেট সার্ভার একটি FIN, ACK পাঠায় যা কানেকশন বন্ধ করার প্রসেস শুরু করে।
    4. প্যাকেট 7 থেকে কানেকশন পারস্পরিকভাবে বন্ধ হয়ে যায়। উত্তর পাঠানোর আগেই কানেকশন বন্ধ হয়ে যাওয়ায়, Edge Microgateway ক্লায়েন্টকে HTTP 502 সমস্যা ফেরত পাঠাবে।
    5. মনে রাখবেন, প্যাকেট 8-এর টাইমস্ট্যাম্প, 2021-06-23T03:52:24.110Z Edge Microgateway লগে যে টাইমস্ট্যাম্পে সমস্যা লগ করা হয়েছে, তার সাথে সম্পর্কিত। লগ ফাইল ও tcpdump-এর টাইমস্ট্যাম্প প্রায়ই প্রকৃত প্যাকেট সংক্রান্ত সমস্যার সাথে কোরিলেট করতে ব্যবহার করা যেতে পারে।

    রেজোলিউশন

    ব্যাকএন্ড সার্ভারে যথাযথভাবে সমস্যার সমাধান করুন।

    সমস্যাটি থেকে গেলে এবং 502 Bad Gateway Error সমস্যার সমাধান করার জন্য আপনার সাহায্যের প্রয়োজন হলে অথবা Edge Microgateway-এর মধ্যে কোনও সমস্যা আছে বলে মনে করলে, রোগ নির্ণয় সংক্রান্ত তথ্য সংগ্রহ করুন লিঙ্কে যান।

    অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে

    উপরে উল্লেখ করা নির্দেশাবলী অনুসরণ করার পরেও সমস্যাটি থেকে গেলে, নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপরে Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন:

    • লগ ফাইল: ডিফল্ট ফোল্ডার হল /var/tmp, তবে এটি মূল config.yaml ফাইলে (logging > dir parameter) ওভাররাইড করা হতে পারে। Apigee সহায়তা টিমের কাছে লগ ফাইল জমা দেওয়ার আগে log > level পরিবর্তন করে info করার সাজেশন দেওয়া হয়।
    • কনফিগারেশন ফাইল: Edge Microgateway-এর মূল কনফিগারেশন ডিফল্ট Edge Microgateway ফোল্ডারের YAML ফাইলে থাকে, $HOME/.edgemicro। একটি ডিফল্ট কনফিগারেশন ফাইল আছে, যার নাম default.yaml এবং তারপরে প্রতিটি এনভায়রনমেন্টের জন্য একটি করে ফাইল ORG-ENV-config.yaml আছে। প্রভাবিত সংস্থা ও এনভায়রনমেন্টের জন্য এই ফাইলটি সম্পূর্ণভাবে আপলোড করুন।