Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
Развертывание изменений API-прокси или Shared Flow через пользовательский интерфейс Edge или API управления завершается ошибкой "Configuration failed ".
Сообщение об ошибке
В пользовательском интерфейсе Edge появится сообщение об ошибке, как показано ниже:
The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}
Вот скриншот примера сообщения об ошибке, наблюдаемого в пользовательском интерфейсе Edge:

Возможные причины
Развертывание API-прокси может завершиться ошибкой «Configuration failed» по множеству различных причин. В таблице ниже перечислены некоторые часто встречающиеся причины, приводящие к этой ошибке:
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
| Отсутствует Java-класс в политике JavaCallout. | В JAR-файле, на который ссылается политика JavaCallout, отсутствует Java-класс. | Пользователи частного облака Edge |
| В условиях выполнения алгоритма обработки условий используются некорректные операнды. | Операнды/выражения, используемые с одной или обеих сторон операторов в условиях, недействительны. | |
| Недопустимое имя хоста в политике регистрации сообщений. | Имя хоста, используемое в политике MessageLogging, не может быть разрешено или может содержать нежелательные специальные символы. | |
| Недопустимое имя KeyValueMap | В политике KeyValueMapOperations в API-прокси значение KeyValueMap недействительно или пусто. |
Общие этапы диагностики
Получите статус развертывания для конкретной версии API-прокси, для которой вы наблюдаете ошибку развертывания, используя указанный ниже API:
curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Вот пример выходных данных, полученных с помощью указанного выше API;
"server" : [ { "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", "status" : "error", "type" : [ "message-processor" ], "uUID" : "0a20926c-f4bf-401b-af84-05fd84b9f492" }, { "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", "status" : "error", "type" : [ "message-processor" ], "uUID" : "f2ee6ab4-a108-4465-a7ba-b56530d8e3fc" }, { "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", "status" : "error", "type" : [ "message-processor" ], "uUID" : "0f41991e-b310-4e77-aac5-5fdb150ef9f6" },В выходных данных о состоянии развертывания в каждом из обработчиков сообщений вы увидите сообщение об ошибке «Сбой конфигурации» .
Войдите в один из обработчиков сообщений и проверьте журнал
/opt/apigee/var/log/edge-message-processor/logs/system.log. Убедитесь, что нет ошибок, возникших во время развертывания API-прокси.В зависимости от ошибки/исключения, обнаруженного в журнале обработчика сообщений, необходимо выполнить соответствующие действия по устранению неполадок и решению проблемы.
В разделах ниже описаны некоторые из наиболее часто встречающихся исключений, приводящих к ошибке развертывания « Сбой конфигурации» , а также приведены шаги по устранению и исправлению этих ошибок.
Причина: Отсутствует Java-класс в политике JavaCallout.
Диагноз
- Если в журналах обработчика сообщений вы видите какое-либо исключение с сообщением «Не удалось создать экземпляр класса JavaCallout» во время развертывания прокси-сервера API (DeployEvent), как показано ниже, перейдите к шагу № 2. В противном случае перейдите к разделу «Неправильные операнды, используемые в условиях в потоке условий» .
В процессе развертывания API-прокси обработчик сообщений выдает следующее исключение:
2017-10-10 05:02:42,330 Apigee-Main-5 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='oauth2', applicationRevision='14', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class com.something.apigee.callout.crypto.main.SecretCallout at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:89) ~[javacallout-1.0.0.jar:na] at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:230) ~[message-processor-1.0.0.jar:na] … <snipped>Сообщение об ошибке в указанном выше исключении указывает на то, что не удалось создать экземпляр класса JavaCallout
com.something.apigee.callout.crypto.main.SecretCallout. Эта ошибка обычно возникает, когда конкретный класс отсутствует в JAR-файле, указанном в политике JavaCallout, или в любом из зависимых от него JAR-файлов.Проверьте JAR-файл, содержащий все классы, относящиеся к пакету
com.something.apigee.callout.crypto.main, и убедитесь, что отсутствует конкретный классcom.something.apigee.callout.crypto.main.SecretCallout.
Разрешение
- Добавьте недостающий класс в соответствующий JAR-файл и загрузите этот JAR-файл.
- Повторно разверните API-прокси.
- В приведенном выше примере мы решили проблему следующим образом:
- Добавление отсутствующего класса
com.something.apigee.callout.crypto.main.SecretCalloutв JAR-файл. - Загрузка обновлённого JAR-файла и повторное развертывание API-прокси.
- Добавление отсутствующего класса
Причина: Неправильные операнды, использованные с операторами в потоке условий.
Диагноз
В журналах обработчика сообщений, если вы видите исключение
com.apigee.expressions.parser.ParseExceptionэто означает, что в них может отображаться ошибка.com.apigee.expressions.parser.ParseExceptionЕсли при развертывании API-прокси или общего потока, как показано в приведенных ниже примерах сообщений, перейдите к шагу № 2. В противном случае перейдите к следующей причине: Недопустимое имя хоста в политике ведения журнала сообщений .Пример сообщения об ошибке
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressionsДавайте рассмотрим пример, чтобы понять, как диагностировать эту проблему.
Пример: Операндами для выражения <Оператор> должны быть выражения данных.
В процессе развертывания общего потока сообщений обработчик сообщений выдает следующее исключение:
2017-11-23 09:11:04,498 Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.loadXMLConfigurations() : Unable to Load default for path /organizations/myorg/apiproxies/Introspection/revisions/12/sharedflows/default 2017-11-23 09:11:04,499 Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() : sync error for Introspection and revision 12 2017-11-23 09:11:04,499 Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() : Actual Error com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions at com.apigee.expressions.parser.ExpressionParser.buildExpressionTree(ExpressionParser.java:337) ~[expressions-1.0.0.jar:na] at com.apigee.expressions.parser.ExpressionParser.parse(ExpressionParser.java:24) ~[expressions-1.0.0.jar:na] at com.apigee.expressions.parser.ExpressionParser.parseLogicExpression(ExpressionParser.java:28) ~[expressions-1.0.0.jar:na] at com.apigee.messaging.runtime.Step.getExpression(Step.java:67) ~[message-processor-1.0.0.jar:na] at com.apigee.messaging.runtime.Step.handleAdd(Step.java:58) ~[message-processor-1.0.0.jar:na] at com.apigee.messaging.runtime.SharedFlowRuntime.addStep(SharedFlowRuntime.java:81) ~[message-processor-1.0.0.jar:na] … <snipped>Сообщение об ошибке в ParseException — «
Both the operands for EQUALS expression should be data expressions» — указывает на проблему, связанную с условием равенства (=), неравного значения (!=) или статистической значимости с оператором (=|).Просмотрите условия во всех потоках условий, включающих конкретного оператора, упомянутого в сообщении об ошибке, и проверьте, нет ли каких-либо из следующих проблем:
- Выражения по обе стороны от оператора имеют один и тот же тип. Например, если слева от оператора находится строковая переменная, то справа от неё должна находиться другая строковая переменная или строковое значение.
- Между операторами используются допустимые переменные.
- Между оператором и каждым из выражений стоит пробел.
Если хотя бы один из вышеупомянутых критериев не выполняется, возникает исключение ParseException — "
Both the operands for EQUALS expression should be data expressions".Давайте рассмотрим пример, чтобы понять эту проблему. Вот пример ошибки, которая...
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>В этом примере видно, что между оператором «или» и следующим условием нет пробела. Поэтому при разборе второго условия первое выражение воспринимается как «or(fault.name)» для оператора EQUALS. Это недопустимое имя переменной, поэтому оно не рассматривается как допустимое выражение данных. В результате возникает следующее исключение:
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Разрешение
- Убедитесь, что по обе стороны от операторов всегда используются корректные выражения данных.
В приведенном выше примере решение заключалось в том, чтобы обеспечить наличие пробела после оператора «или», как описано в фрагменте кода:
<Condition> (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved") </Condition>
Недопустимое имя хоста в политике регистрации сообщений.
Диагноз
Если в журналах обработчика сообщений вы видите какое-либо исключение с сообщением "Invalid HostName" во время развертывания API-прокси или общего потока, как показано ниже, перейдите к шагу № 2. В противном случае перейдите к следующей причине : Invalid KeyValueMap Name .
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerРассмотрим два примера ниже, чтобы понять, как устранять и решать эту проблему.
Пример 1: Имя хоста содержит нежелательный специальный символ.
В процессе развертывания API-прокси обработчик сообщений выдает следующее исключение:
2018-01-20 02:12:13,535 Apigee-Main-3 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='providersearch', applicationRevision='4', deploymentSpec=basepath=/;env=prod;, deploymentID=null}] com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na] at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] ...<snipped>Приведенное выше исключение указывает на то, что развертывание завершается с ошибкой "Недопустимое имя хоста '<имя хоста>' для обработчика Syslog" . Это означает, что имя хоста, используемое в политике MessageLogging, является недопустимым именем хоста.
Внимательное изучение исключения в журнале обработчика сообщений показывает, что в конце имени хоста
'splunkprod.myorg.com/'.Этот нежелательный специальный символ стал причиной ошибки при развертывании.
Разрешение
- Для решения проблемы измените политику MessageLogging, удалив все нежелательные специальные символы.
- В приведенном выше примере специальный символ "/" был удален из политики регистрации сообщений. Это решило проблему.
Пример 2: Неразрешимое имя хоста
В журнале обработчика сообщений было несколько строк, указывающих на то, что сработало событие развертывания API-прокси, за которым последовало исключение, возникшее во время развертывания API-прокси:
2017-12-22 00:13:49,057 Apigee-Main-87446 INFO MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : configuring [DeployEvent{organization='myorg', application='myapi', applicationRevision='42', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] 2017-12-22 00:13:49,318 Apigee-Main-87446 ERROR c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.refresh() : Unable to resolve host : input-prd.cloud.splunk.com: Name or service not known 2017-12-22 00:13:49,323 Apigee-Main-87446 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {} com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'input-prd.cloud.splunk.com' for Syslog handler at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na] at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.populateDestinations(MessageLoggingStepDefinition.java:118) ~[message-logging-1.0.0.jar:na] at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.handleAdd(MessageLoggingStepDefinition.java:99) ~[message-logging-1.0.0.jar:na] … <snipped>Приведенное выше исключение указывает на то, что развертывание завершается с ошибкой "Недопустимое имя хоста '<hostname>' для обработчика Syslog" .
Если вы внимательно прочитаете строку выше сообщения об исключении, то заметите, что обработчик сообщений не может разрешить имя хоста
'input-prd.cloud.splunk.com'указанное в политике MessageLogging.Для подтверждения этого вы можете попробовать подключиться через Telnet к имени хоста и номеру порта, указанным в политике регистрации сообщений.
Проверьте политику MessageLogging в конкретной версии API-прокси и убедитесь в правильности используемого имени хоста и номера порта. В приведенном выше примере имя API-прокси: myapi, версия: 42.
Политика ведения журнала сообщений
<MessageLogging async="false" continueOnError="false" enabled="true" name="Log-To-Splunk"> <DisplayName>Log-To-Splunk</DisplayName> <Syslog> <Message>Message.id = {request.header.id}</Message> <Host>input-prd.cloud.splunk.com</Host> <Port>2900</Port> <Protocol>TCP</Protocol> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </Syslog> </MessageLogging>Подключитесь к хосту через Telnet, используя указанный порт. В этом примере мы попробовали использовать Telnet и получили ту же ошибку, что и в журнале обработчика сообщений:
telnet input-prd.cloud.splunk.com 2900 telnet: input-prd.cloud.splunk.com: Name or service not known input-prd.cloud.splunk.com: Host name lookup failure
Это ясно доказало, что имя хоста не может быть разрешено.
Разрешение
- Измените политику MessageLogging, чтобы она использовала допустимое имя хоста.
Если проблема сохраняется, перейдите к разделу «Необходимо собрать диагностическую информацию» .
Причина: Недопустимое имя KeyValueMap.
Диагноз
Если в журналах обработчика сообщений во время развертывания API-прокси или общего потока, как показано ниже, вы видите исключение с сообщением «Недопустимое имя KeyValueMap» , перейдите к шагу № 2. В противном случае перейдите к разделу «Необходимо собрать диагностическую информацию» .
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerДавайте рассмотрим пример, чтобы понять, как устранять и решать эту проблему.
Пример журнала обработчика сообщений , демонстрирующий исключение с сообщением "Недопустимое имя KeyValueMap", приводящее к ошибке при развертывании API-прокси.
2018-02-27 14:14:50,318 Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {} com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name is invalid at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na] at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na] at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na] at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na] at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) [config-entities-1.0.0.jar:na] at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) [message-processor-1.0.0.jar:na] 2018-02-27 14:14:50,344 Apigee-Main-6 ERROR BOOTSTRAP - RuntimeConfigurationServiceImpl.dispatchToListeners() : RuntimeConfigurationServiceImpl.dispatchToListeners : Error occurred while dispatching the request DeployEvent{organization='myorg', application='CustomerAPI', applicationRevision='1', deploymentSpec=basepath=/;env=test;, deploymentID=null} to com.apigee.application.bootstrap.listeners.MessageProcessorBootstrapListener@5009d06e com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name is invalid at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na] at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na] at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na] at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na] at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) ~[config-entities-1.0.0.jar:na] at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) ~[message-processor-1.0.0.jar:na]Второе исключение, указанное выше, свидетельствует о том, что ошибка развертывания произошла для API-прокси: CustomerAPI, версия: 1.
Проверив трассировку стека, можно заметить, что ошибка возникает при выполнении политики KeyValuMapOperations.
Изучив пакет API Proxy, вы обнаружите одну политику KeyValuMapOperations, содержащую код, показанный ниже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier=""> <DisplayName>Pulling Keys</DisplayName> <Properties/> <ExclusiveCache>false</ExclusiveCache>Как видно выше, mapIdentifier , указывающий имя KeyValueMap, содержит пустую строку. Имя KeyValueMap не может быть пустой строкой. Это и стало причиной ошибки развертывания.
Разрешение
- Измените политику KeyValueMapOperations, чтобы присвоить KeyValueMap корректное допустимое имя.
В приведенном выше примере мы решили проблему, изменив KeyValueMapOperations и присвоив KeyValueMap имя "MyKeyValueMap", как показано ниже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier="MyKeyValueMap"> <DisplayName>Pulling Keys</DisplayName> <Properties/> <ExclusiveCache>false</ExclusiveCache>
Необходимо собрать диагностическую информацию.
Если проблема сохраняется даже после выполнения вышеуказанных инструкций, пожалуйста, соберите следующую диагностическую информацию. Свяжитесь со службой поддержки Apigee Edge и предоставьте им собранную информацию.
Вывод команды
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Журналы обработчика сообщений
/opt/apigee/var/log/edge-message-processor/logs/system.logПодробная информация о том, какие разделы этого руководства были опробованы, а также любые другие сведения, которые помогут нам ускорить решение этой проблемы.