Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Wdrożenie serwera proxy interfejsu API lub wersji przepływu współdzielonego za pomocą interfejsu Edge lub API zarządzania nie uda się z powodu błędu Nie udało się skonfigurować.
Komunikat o błędzie
W interfejsie Edge pojawi się komunikat o błędzie, który widać poniżej:
The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}
Oto zrzut ekranu przykładowego komunikatu o błędzie zaobserwowanego w interfejsie Edge:
Możliwe przyczyny
Wdrożenie serwera proxy interfejsu API może się nie powieść z komunikatem „Konfiguracja nie powiodła się” z różnych powodów. W tabeli poniżej znajdziesz kilka częstych przyczyn tego błędu :
Przyczyna | Opis | Instrukcje dotyczące rozwiązywania problemów dotyczące |
Brak klasy Java w zasadzie JavaCallout | W pliku JAR, do którego odwołuje się zasada JavaCallout, brakuje klasy Java. | Użytkownicy Edge Private Cloud |
Nieprawidłowe operandy używane w warunkach w przepływie warunku | Operatory lub wyrażenia użyte po jednej lub obu stronach operatorów w warunkach są nieprawidłowe. | |
Nieprawidłowa nazwa hosta w zasadzie logowania wiadomości | Nie można rozpoznać nazwy hosta użytej w zasadzie MessageLogging lub może ona zawierać niechciane znaki specjalne. | |
Nieprawidłowa nazwa mapy klucz-wartość | Wartość KeyValueMap w zasadzie KeyValueMapOperations na serwerze proxy interfejsu API jest nieprawidłowa lub pusta. |
Najczęstsze kroki diagnostyki
Użyj poniższego interfejsu API, aby pobrać stan wdrożeń dla konkretnej wersji serwera proxy interfejsu API, w przypadku której występuje błąd wdrażania:
curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
Oto przykładowe dane wyjściowe z powyższego interfejsu 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" },
W danych wyjściowych stanu wdrożenia w przypadku każdego procesora wiadomości pojawi się komunikat o błędzie „Konfiguracja nie powiodła się”.
Zaloguj się w jednym z procesorów wiadomości i sprawdź dziennik
/opt/apigee/var/log/edge-message-processor/logs/system.log
. Sprawdź, czy podczas wdrażania serwera proxy interfejsu API nie wystąpiły jakieś błędy.W zależności od błędu lub wyjątku zaobserwowanego w dzienniku procesora wiadomości musisz wykonać odpowiednie kroki procedury rozwiązywania problemów i rozwiązać problem.
W sekcjach poniżej znajdziesz często występujące wyjątki, które powodują wystąpienie błędu wdrożenia „Konfiguracja nie powiodła się”, oraz sposoby rozwiązywania problemów i rozwiązywania problemów.
Przyczyna: brak klasy Java w zasadzie JavaCallout
Diagnostyka
- Jeśli w dziennikach procesora wiadomości zobaczysz wyjątek z komunikatem „Nie udało się utworzyć instancji klasy JavaCallout Class” podczas wdrażania serwera proxy interfejsu API (DeployEvent) w sposób pokazany poniżej, przejdź do kroku 2. Jeśli tak nie jest, przejdź do sekcji Nieprawidłowe operandy używane w warunkach w przepływie warunku.
Podczas wdrażania serwera proxy interfejsu API w procesorze wiadomości widoczny jest następujący wyjątek:
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>
Komunikat o błędzie w powyższym wyjątku wskazuje, że nie udało się utworzyć instancji klasy JavaCallout
com.something.apigee.callout.crypto.main.SecretCallout
. Ten błąd występuje zazwyczaj wtedy, gdy konkretna klasa nie jest dostępna w pliku JAR określonym w zasadzie JavaCallout lub w jednym z zależnych plików JAR.Sprawdź plik JAR zawierający wszystkie klasy powiązane z pakietem
com.something.apigee.callout.crypto.main
i upewnij się, że brakuje konkretnej klasycom.something.apigee.callout.crypto.main.SecretCallout
.
Rozdzielczość
- Dodaj brakującą klasę do konkretnego pliku JAR i prześlij plik JAR.
- Wdróż ponownie serwer proxy interfejsu API.
- W przykładzie powyżej rozwiązaliśmy problem przez:
- Dodaję brakującą klasę
com.something.apigee.callout.crypto.main.SecretCallout
do pliku JAR. - Przesyłam zaktualizowany plik JAR i ponownie wdrażam serwer proxy interfejsu API.
- Dodaję brakującą klasę
Przyczyna: w przepływie warunku używane są nieprawidłowe operandy z operatorami
Diagnostyka
Jeśli w dziennikach procesora wiadomości zauważysz zdarzenie
com.apigee.expressions.parser.ParseException
, które pojawi się podczas wdrażania serwera proxy interfejsu API lub przepływu współdzielonego (jak pokazano w przykładowych komunikatach poniżej), przejdź do kroku 2. Jeśli nie, przejdź do następnej przyczyny Nieprawidłowa nazwa hosta w zasadzie rejestrowania wiadomości.Przykładowy komunikat o błędzie
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Przeanalizujmy przykład, aby zrozumieć, jak zdiagnozować ten problem.
Przykład : operatory argumentu <operator> powinno być wyrażeniem danych
Podczas wdrażania przepływu współdzielonego w procesorze wiadomości widoczny jest następujący wyjątek:
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>
Komunikat o błędzie w wyjątku ParseException – „
Both the operands for EQUALS expression should be data expressions
” wskazuje, że problem dotyczy warunków obejmujących (=), nierównych (!=) lub statystyk z (=|).Przejrzyj warunki we wszystkich przepływach warunków, które dotyczą konkretnego operatora wymienionego w komunikacie o błędzie i sprawdź, czy występują któreś z tych problemów:
- Wyrażenia po obu stronach operatora są tego samego typu. Jeśli np. po lewej stronie operatora masz zmienną typu ciąg znaków, to po prawej musisz umieścić inną zmienną ciągu lub wartość ciągu.
- Między operatorami zostały użyte prawidłowe zmienne.
- Między operatorem a wyrażeniami jest spacja.
Jeśli któreś z powyższych kryteriów nie zostanie spełnione, wyświetli się wyjątek ParseException – „
Both the operands for EQUALS expression should be data expressions
”.Przeanalizujmy przykład, aby zrozumieć ten problem. Oto przykładowy warunek błędu,
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>
W tym przykładzie widać, że między znakiem „lub” nie ma spacji a następnie następny warunek. Zatem podczas analizy drugiego warunku pierwsze wyrażenie w operatorze EQUALS przyjmuje postać "or(fault.name"). To nie jest prawidłowa nazwa zmiennej, więc nie jest traktowana jako prawidłowe wyrażenie danych. W związku z tym otrzymujesz taki wyjątek:
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Rozdzielczość
- Zadbaj o to, aby po obu stronach operatorów zawsze były podane odpowiednie wyrażenia związane z danymi.
W przykładzie powyżej rozwiązaniem było zapewnienie spacji po znaku „lub” zgodnie z opisem we fragmencie kodu:
<Condition> (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved") </Condition>
Nieprawidłowa nazwa hosta w zasadzie rejestrowania wiadomości
Diagnostyka
Jeśli w dziennikach procesora wiadomości zauważysz wyjątek z komunikatem „Invalid HostName” (Nieprawidłowa nazwa hosta) podczas wdrażania serwera proxy interfejsu API lub przepływu współdzielonego, jak pokazano poniżej, przejdź do kroku 2. Jeśli nie, przejdź do następnej przyczyny Nieprawidłowa nazwa mapy klucz-wartość.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
Przyjrzyjmy się 2 przykładom poniżej, aby dowiedzieć się, jak rozwiązać ten problem.
Przykład 1. Nazwa hosta zawiera niechciany znak specjalny
Podczas wdrażania serwera proxy interfejsu API w procesorze wiadomości widoczny jest następujący wyjątek:
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>
Powyższy wyjątek pokazuje, że wdrożenie kończy się niepowodzeniem z powodu nieprawidłowej nazwy hosta „<nazwa hosta>” dla modułu obsługi syslog”. Oznacza to, że nazwa HostName używana w zasadzie MessageLogging jest nieprawidłową nazwą hosta.
Po uważnym przyjrzeniu się wyjątku w dzienniku procesora wiadomości wykazuje on niechciany znak specjalny „/”. na końcu nazwy hosta
'splunkprod.myorg.com/'.
Ten niechciany znak specjalny był przyczyną błędu wdrożenia.
Rozdzielczość
- Zmodyfikuj zasadę MessageLogging, aby usunąć wszelkie niechciane znaki specjalne, aby rozwiązać problem.
- W powyższym przykładzie znak specjalny „/” została usunięta z zasady MessageLogging. To rozwiązało problem.
Przykład 2. Niepoprawna nazwa hosta
Dziennik procesora wiadomości zawierał kilka wierszy, które wskazują, że uruchomione jest zdarzenie wdrożenia serwera proxy interfejsu API, po którym następuje wyjątek występujący podczas wdrażania serwera proxy interfejsu 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>
Powyższy wyjątek pokazuje, że wdrożenie kończy się niepowodzeniem z powodu nieprawidłowej nazwy hosta „<nazwa hosta>” dla modułu obsługi syslog”.
Jeśli zapoznasz się z wierszem powyżej, możesz zauważyć, że procesor wiadomości nie może rozpoznać nazwy hosta
'input-prd.cloud.splunk.com'
podanej w zasadach MessageLogging.Aby to potwierdzić, możesz spróbować połączyć się przez Telnet z nazwą hosta i numerem portu używanym w zasadzie logowania wiadomości.
Sprawdź zasadę MessageLogging w konkretnej wersji serwera proxy interfejsu API i zweryfikuj nazwę hosta i numer portu. W powyższym przykładzie nazwa serwera proxy interfejsu API: myapi, wersja: 42.
Zasady MessageLogging
<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>
Połączenie Telnet z hostem z określonym portem. W tym przykładzie skorzystaliśmy z polecenia Telnet i napotkaliśmy ten sam błąd co w dzienniku procesora wiadomości:
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
To jasno udowodniło, że nazwy hosta nie można podać.
Rozdzielczość
- Zmodyfikuj zasadę MessageLogging, aby użyć prawidłowej nazwy hosta.
Jeśli problem nadal występuje, przejdź do artykułu Wymagane zbieranie informacji diagnostycznych.
Przyczyna: nieprawidłowa nazwa mapy klucz-wartość
Diagnostyka
Jeśli podczas wdrażania serwera proxy interfejsu API lub przepływu współdzielonego (jak pokazano poniżej) w dziennikach procesora wiadomości widoczny będzie wyjątek z komunikatem „KeyValueMap name is invalid”, przejdź do kroku 2. Jeśli nie, przejdź do artykułu Wymagane zbieranie informacji diagnostycznych.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
Spójrzmy na przykład, aby zrozumieć, jak rozwiązać ten problem.
Przykładowy dziennik procesora wiadomości zawierający wyjątek z komunikatem „KeyValueMap name is invalid” (Nazwa KeyValueMap jest nieprawidłowa) prowadzi do błędu podczas wdrażania serwera proxy interfejsu 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]
Drugi wyjątek powyżej wskazuje, że wystąpił błąd wdrożenia w przypadku parametru API Proxy: CustomerAPI, wersja: 1.
Gdy sprawdzasz zrzut stosu, możesz zauważyć, że podczas wykonywania zasady KeyValuMapOperations zwracany jest błąd.
Przeglądając pakiet interfejsów API serwera proxy, zauważasz, że istnieje 1 zasada KeyValuMapOperations z poniższym kodem:
<?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>
Jak widać powyżej, mapIdentifier, który wskazuje nazwę KeyValueMap, zawiera pusty ciąg znaków. Nazwa KeyValueMap nie może być pustym ciągiem znaków. To było przyczyną błędu wdrożenia.
Rozdzielczość
- Zmodyfikuj zasadę KeyValueMapOperations, aby miała prawidłową prawidłową nazwę dla KeyValueMap.
W powyższym przykładzie rozwiązaliśmy problem, modyfikując obiekt KeyValueMapOperations, tak aby nazwa KeyValueMap wyglądała na „MyKeyValueMap”. jak poniżej:
<?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>
Musi zbierać informacje diagnostyczne
Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zbierz poniższe informacje diagnostyczne. Skontaktuj się z zespołem pomocy Apigee Edge i przekaż mu zebrane informacje.
Dane wyjściowe polecenia
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
Logi procesora wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log
Szczegółowe informacje o wypróbowanych sekcjach tego Poradnika oraz inne informacje, które pomogą nam szybciej rozwiązać ten problem.