502 খারাপ গেটওয়ে - সকেট হ্যাং আপ

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

উপসর্গ

ক্লায়েন্ট অ্যাপ্লিকেশনটি এজ মাইক্রোগেটওয়েতে API কলগুলির প্রতিক্রিয়া হিসাবে ECONNRESET কোড সহ 502 Bad Gateway একটি HTTP স্ট্যাটাস কোড পায়।

ত্রুটি বার্তা

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

HTTP/1.1 502 Bad Gateway

প্রতিক্রিয়া নিম্নলিখিত ত্রুটি বার্তা অন্তর্ভুক্ত করবে:

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

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

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

সাধারণ রোগ নির্ণয়ের পদক্ষেপ

  1. এজ মাইক্রোগেটওয়ে লগগুলি পরীক্ষা করুন:
    /var/tmp/edgemicro-`hostname`-*.log
  2. একটি নির্দিষ্ট সময়ের মধ্যে কোড ECONNRESET এর সাথে কোন 502 ত্রুটি আছে কিনা তা দেখতে অনুসন্ধান করুন (যদি সমস্যাটি অতীতে ঘটে থাকে) বা 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] বার্তাও থাকবে। এই উদাহরণে এটি হল XXXX: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] নির্দেশ করে যে টার্গেট সার্ভার এজ মাইক্রোগেটওয়ের সাথে সংযোগ বন্ধ করে দিয়েছে। এটি কত ঘন ঘন ঘটছে তা নির্ধারণ করতে লগগুলিতে অনুসন্ধান করা যেতে পারে।

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

রোগ নির্ণয়

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

tcpdump ব্যবহার করে

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

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

    উপরের নমুনা tcpdump , আপনি নিম্নলিখিত দেখতে পারেন:

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

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

কিপ-লাইভ টাইমআউট তুলনা করুন

  1. এজ মাইক্রোগেটওয়ের একটি নির্দিষ্ট রাখা-জীবিত টাইমআউট সম্পত্তি নেই। এটি কোথায় চলছে তা অপারেটিং সিস্টেম দ্বারা নির্ধারিত হয়। সাধারণ উদাহরণ হল উইন্ডোজ, লিনাক্স এবং ডকার কন্টেইনার।
  2. এটি অপারেটিং সিস্টেমে কাস্টমাইজ করা সম্ভব হতে পারে। আপনার সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে চেক করুন। ডিফল্টরূপে, লিনাক্স অপারেটিং সিস্টেমে দুই ঘন্টার একটি ডিফল্ট কিপ-লাইভ টাইমআউট থাকে।
  3. এরপরে, আপনার ব্যাকএন্ড সার্ভারে কনফিগার করা কিপ-অ্যালাইভ টাইমআউট সম্পত্তি পরীক্ষা করুন। ধরা যাক আপনার ব্যাকএন্ড সার্ভারটি 10 ​​সেকেন্ডের মান দিয়ে কনফিগার করা হয়েছে।
  4. আপনি যদি নির্ধারণ করেন যে অপারেটিং সিস্টেমে কিপ-অ্যালাইভ টাইমআউটের মান উপরের উদাহরণের মতো ব্যাকএন্ড সার্ভারে কিপ-অ্যালাইভ টাইমআউট বৈশিষ্ট্যের মান থেকে বেশি, তাহলে এটি 502 ত্রুটির কারণ।

রেজোলিউশন

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

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

সর্বোত্তম অনুশীলন

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

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

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

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

কারণ: টার্গেট সার্ভার অকালে সংযোগ বন্ধ করে দেয়

রোগ নির্ণয়

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

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

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

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

    উপরের নমুনা tcpdump , আপনি নিম্নলিখিত দেখতে পারেন:

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

    রেজোলিউশন

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

    যদি সমস্যাটি অব্যাহত থাকে এবং আপনার 502 Bad Gateway Error সমস্যা সমাধানে সহায়তার প্রয়োজন হয় বা আপনি সন্দেহ করেন যে এটি এজ মাইক্রোগেটওয়ের মধ্যে একটি সমস্যা, তাহলে অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করুন এ যান৷

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

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

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