Отладка расширения

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Отлаживать расширение можно с помощью сообщений, которые видны в двух местах: в инструменте трассировки и в журналах расширения. Если расширение не работает, иногда для выявления проблемы требуется информация из обоих разделов.

  • Инструмент трассировки Apigee Edge позволяет тестировать и редактировать код прокси-сервера API в процессе разработки. Сообщения трассировки содержат ошибки из кода прокси-сервера API, в том числе конфигурации прокси-сервера API и правил.

    Ошибки, связанные с расширениями, которые появляются в инструменте трассировки, обычно не содержат подробной информации, кроме того, какой вызов расширения не удался, а также код ошибки 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 вернет ошибку в расширение. Подробная информация об этих ошибках обычно приводится в журнале расширения.

Доказательства в инструменте Trace

В редакторе прокси-сервера эти ошибки обычно отображаются как ошибки уровня 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> и т. д. Эти ошибки обычно появляются в инструменте трассировки, но не в журналах расширения.

Доказательства в инструменте трассировки

В редакторе прокси-сервера эти ошибки обычно отображаются как ошибки уровня 4xx или 5xx. Однако редактор прокси-сервера не будет показывать никаких подробностей о причине ошибки, кроме того, что расширение вернуло ошибку. В инструменте трассировки появляется следующая ошибка, если в расширении 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'