اشکال زدایی یک افزونه

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

شما می‌توانید با استفاده از پیام‌هایی که در دو مکان قابل مشاهده هستند، یک افزونه را اشکال‌زدایی کنید: ابزار Trace و گزارش‌های افزونه. وقتی یک افزونه کار نمی‌کند، شناسایی مشکل گاهی اوقات می‌تواند به اطلاعاتی از هر دو مکان نیاز داشته باشد.

  • ابزار Apigee Edge Trace جایی است که شما به طور مکرر کد پروکسی API را همزمان با توسعه آن، آزمایش و ویرایش می‌کنید. پیام‌های ردیابی شامل خطاهایی از کد پروکسی API شما، از جمله پروکسی API و پیکربندی خط‌مشی هستند.

    خطاهای مربوط به افزونه که در ابزار Trace ظاهر می‌شوند، معمولاً جزئیات زیادی ندارند، به جز اینکه می‌گویند فراخوانی کدام افزونه با شکست مواجه شده است، به همراه یک کد خطای HTTP. وقتی در اینجا چیز مفیدی نمی‌بینید، بهترین جای بعدی برای جستجو، گزارش افزونه‌ای است که استفاده می‌کنید.

  • افزونه‌ها در زمان اجرا، ورودی‌های لاگ ایجاد می‌کنند. (لاگ‌های افزونه فقط برای مدیران سازمان در دسترس هستند.)

    این گزارش‌ها شامل ورودی‌هایی هستند که توسط منبع خارجی که افزونه برای تعامل با آن پیکربندی شده است، بازگردانده می‌شوند. برای مثال، اگر اعتبارنامه‌های منبع خارجی در افزونه به اشتباه پیکربندی شده باشند، احتمالاً خطا در اینجا ظاهر می‌شود.

    این گزارش‌ها همچنین شامل ورودی‌هایی از کد افزونه داخلی هستند. هنگام بررسی گزارش‌ها، به خاطر داشته باشید که برخی از ورودی‌ها به خطایی که در حال اصلاح آن هستید، ربطی ندارند. ورودی‌های گزارش مربوط به افزونه معمولاً با کلمه details شروع می‌شوند، مانند ورودی گزارش زیر از افزونه Cloud Pub/Sub :

    details: 'Invalid resource name given (name=projects/example-test-123456/topic/extension-example). Refer to https://cloud.google.com/pubsub/docs/admin#resource_names for more information.'
    

انواع خطا و علل آن

پردازش درخواست افزونه از یک خط‌مشی ExtensionCallout در یک پروکسی API، از طریق افزونه، به منبع خارجی و سپس دوباره به منبع اصلی جریان می‌یابد. بنابراین، ممکن است در هر یک از این مکان‌ها خطایی رخ دهد.

خطاهایی که می‌بینید ممکن است در دسته‌های زیر قرار بگیرند.

خطاها در پیکربندی افزونه

این پیکربندی است که یک مدیر سازمان هنگام افزودن یک افزونه به یک محیط انجام می‌دهد .

برای مثال، اگر افزونه Cloud Logging را با یک شناسه پروژه Google Cloud نادرست پیکربندی کنید، Google Cloud Logging خطایی را به افزونه برمی‌گرداند. جزئیات مربوط به این خطاها معمولاً در گزارش افزونه موجود است.

شواهد در ابزار ردیابی

در ویرایشگر پروکسی، این خطاها معمولاً به صورت خطای سطح 4xx یا 5xx نشان داده می‌شوند. با این حال، ویرایشگر پروکسی هیچ جزئیاتی در مورد علت خطا نمایش نمی‌دهد، جز اینکه می‌گوید افزونه خطا را برگردانده است.

{
  "fault": {
    "faultstring":"Execution of ConnectorCallout Logging-Extension failed. Reason: Connector returned error statuscode=500",
    "detail": {
      "errorcode":"steps.connectorcallout.ExecutionFailed"
    }
  }
}

شواهد موجود در گزارش‌های افزونه

اگر جزئیاتی در مورد این نوع خطا وجود داشته باشد، آن را در ورودی‌های گزارش افزونه مشاهده خواهید کرد. پیام خطای زیر که توسط سرویس Cloud Pub/Sub برگردانده می‌شود، ناشی از یک شناسه پروژه ناقص است.

details: 'Project does not exist: example-test-12345'

خطاها در پیکربندی خط‌مشی ExtensionCallout

این خطاها زمانی رخ می‌دهند که سیاست ExtensionCallout به اشتباه پیکربندی شده باشد، چه از طریق خطای نحوی پیکربندی سیاست و چه از طریق کلیدها یا مقادیر پیکربندی نادرست. این خطاها بسته به نحوه پیکربندی سیاست، به دو شکل ظاهر می‌شوند:

  • مقادیر نادرست ارزیابی شده توسط منبع خارجی

    این می‌تواند زمانی رخ دهد که خطای پیکربندی برای افزونه معتبر به نظر برسد، اما برای منبع خارجی نامعتبر باشد. برای مثال، اگر افزونه یک شناسه پایگاه داده نادرست به Cloud Spanner ارسال کند، Cloud Spanner خطایی را برمی‌گرداند که در گزارش افزونه ثبت می‌شود:

    details: 'Database not found: projects/example-test-123456/instances/spanner-extension-example-db/databases/my-business-d'
    

    این مشکل همچنین می‌تواند به دلیل پیکربندی نادرست JSON در عنصر <Input> مربوط به سیاست رخ دهد. برای برخی از افزونه‌ها، بخشی از JSON توسط افزونه پردازش می‌شود و بخشی به منبع ارسال می‌شود. به عنوان مثال، JSON پیکربندی افزونه Cloud Logging شامل یک شیء metadata است که محتوای آن به Cloud Logging ارسال می‌شود. نام‌های کلید نادرست در آنجا - مانند typ به جای type - می‌توانند خطاهایی را از منبع خارجی که به عنوان ورودی در گزارش افزونه ظاهر می‌شوند، برگردانند:

    details: 'Resource type cannot be empty'
    
  • مقادیر نادرست ارزیابی شده توسط افزونه

    این خطاها شامل خطاهای نحوی در بخش‌های ارزیابی‌شده توسط سیاست در عنصر <Input> JSON، غلط املایی نام اکشن در عنصر <Action> و غیره می‌شود. این خطاها معمولاً در ابزار Trace ظاهر می‌شوند، اما در گزارش‌های افزونه‌ها ظاهر نمی‌شوند.

شواهد در ابزار ردیابی

در ویرایشگر پروکسی، این خطاها معمولاً به صورت خطای سطح 4xx یا 5xx نشان داده می‌شوند. با این حال، ویرایشگر پروکسی هیچ جزئیاتی در مورد علت خطا نمایش نمی‌دهد، جز اینکه می‌گوید افزونه خطا را برگردانده است. خطای زیر در ابزار Trace هنگام اشتباه املایی نام اکشن در افزونه Cloud Firestore ظاهر می‌شود.

{
  "fault":{
    "faultstring":"Execution of ConnectorCallout Add-User-Data failed. Reason: Connector returned error statuscode=404","detail":
    {
      "errorcode":"steps.connectorcallout.ExecutionFailed"
    }
  }
}

شواهد موجود در گزارش‌های افزونه

وقتی پیکربندی پالیسی منجر به خطای پردازش در منبع خارجی شود، معمولاً خطا در لاگ ظاهر می‌شود.

این خطایی است که در آن درخواست به منبع خارجی به دلایلی که مربوط به افزونه نیستند، با موفقیت انجام نشده است.

برای مثال، تصور کنید که از افزونه‌ی Cloud Spanner برای اضافه کردن یک ردیف به پایگاه داده استفاده می‌کنید، اما مقدار کلید اصلی آن ردیف از قبل در یک ردیف موجود استفاده شده است. Cloud Spanner خطایی را به افزونه برمی‌گرداند که آن خطا را به گزارش افزونه اضافه می‌کند.

شواهد در ابزار ردیابی

در ویرایشگر پروکسی، این خطاها معمولاً به صورت خطای سطح 4xx یا 5xx نشان داده می‌شوند. با این حال، ویرایشگر پروکسی هیچ جزئیاتی در مورد علت خطا نمایش نمی‌دهد، جز اینکه می‌گوید افزونه خطا را برگردانده است.

{
  "fault":{
    "faultstring":"Execution of ConnectorCallout Add-User-Data failed. Reason: Connector returned error statuscode=404",
    "detail":{
      "errorcode":"steps.connectorcallout.ExecutionFailed"
    }
  }
}

شواهد موجود در گزارش‌های افزونه

این گزارش معمولاً شامل ورودی‌هایی با پیام‌هایی از خود منبع خارجی خواهد بود. پیام گزارش زیر از Cloud Spanner خطای موجود در مقدار کلید اصلی را شرح می‌دهد.

details: 'Row [jonesy42] in table user already exists'