Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
API proxy'si veya paylaşılan akış revizyonlarının Edge kullanıcı arayüzü ya da yönetim API'si üzerinden dağıtımı, Configuration failed (Yapılandırma başarısız oldu) hatasıyla başarısız oluyor.
Hata Mesajı
Edge kullanıcı arayüzünde aşağıdaki gibi bir hata mesajı alırsınız:
The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}
Edge kullanıcı arayüzünde görülen örnek bir hata mesajının ekran görüntüsünü aşağıda bulabilirsiniz:

Olası nedenler
Bir API proxy'sinin dağıtımı, birçok farklı nedenden dolayı "Yapılandırma başarısız oldu" hatasıyla sonuçlanabilir. Aşağıdaki tabloda, bu hataya yol açan sık karşılaşılan birkaç neden listelenmiştir :
| Neden | Açıklama | Aşağıdaki Durumlarda Geçerli Sorun Giderme Talimatları |
| JavaCallout politikasında eksik Java sınıfı | JavaCallout politikası tarafından referans verilen JAR dosyasında bir Java sınıfı eksik. | Edge Private Cloud kullanıcıları |
| Koşul akışındaki koşullarda yanlış işlenenler kullanılıyor | Koşullardaki operatörlerin bir veya iki tarafında kullanılan işlenenler/ifadeler geçerli değil. | |
| Mesaj günlüğü politikasında geçersiz ana makine adı | MessageLogging politikasında kullanılan ana makine adı çözümlenemiyor veya bazı istenmeyen özel karakterler içerebilir. | |
| Geçersiz KeyValueMap Adı | API proxy'sindeki KeyValueMapOperations politikasında KeyValueMap geçersiz veya boş. |
Sık Karşılaşılan Teşhis Adımları
Aşağıdaki API'yi kullanarak dağıtım hatasını gözlemlediğiniz API proxy'sinin belirli revizyonu için dağıtım durumunu alın:
curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Yukarıdaki API'den alınan örnek çıkışı aşağıda görebilirsiniz:
"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" },Dağıtım durumu çıkışındaki her bir mesaj işlemcisinde "Yapılandırma başarısız oldu" hata mesajını görürsünüz.
Mesaj İşleyicilerinden birine giriş yapın ve günlüğü kontrol edin
/opt/apigee/var/log/edge-message-processor/logs/system.log. API proxy'sinin dağıtımı sırasında hata olup olmadığını kontrol edin.Mesaj İşleyici günlüğünde gözlemlenen hataya/istisnaya bağlı olarak, sorunun çözümü için uygun sorun giderme adımlarını ve çözümü uygulamanız gerekir.
Aşağıdaki bölümlerde, "Yapılandırma başarısız oldu" dağıtım hatasına yol açan en sık karşılaşılan istisnalardan bazıları ve bunları gidermek için uygulayabileceğiniz adımlar açıklanmaktadır.
Neden: JavaCallout politikasında Java sınıfı eksik
Teşhis
- Aşağıda gösterildiği gibi bir API proxy'sinin dağıtımı (DeployEvent) sırasında "Failed to instantiate the JavaCallout Class" mesajıyla herhangi bir istisna görürseniz Mesaj İşleyici günlüklerinde 2. adıma geçin. Aksi takdirde Koşul akışındaki koşullarda yanlış işlenenler kullanılıyor bölümüne gidin.
API proxy'sinin dağıtımı sırasında Mesaj İşleyici aşağıdaki istisnayı gösteriyor:
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>Yukarıdaki istisnada yer alan hata mesajı, JavaCallout sınıfının
com.something.apigee.callout.crypto.main.SecretCalloutbaşlatılamadığını gösteriyor. Bu hata genellikle JavaCallout politikasında belirtilen JAR dosyasında veya bağımlı JAR dosyalarından herhangi birinde belirli sınıf kullanılamadığında ortaya çıkar.com.something.apigee.callout.crypto.mainpaketine ait tüm sınıfları içeren JAR dosyasını kontrol edin vecom.something.apigee.callout.crypto.main.SecretCalloutsınıfının eksik olduğunu onaylayın.
Çözünürlük
- Eksik sınıfı belirli JAR dosyasına ekleyin ve JAR dosyasını yükleyin.
- API proxy'sini yeniden dağıtın.
- Yukarıdaki örnekte, sorunu şu şekilde çözdük:
- JAR dosyasına eksik sınıf
com.something.apigee.callout.crypto.main.SecretCalloutekleniyor. - Güncellenen JAR dosyasını yükleme ve API Proxy'sini yeniden dağıtma.
- JAR dosyasına eksik sınıf
Neden: Koşul akışındaki operatörlerle yanlış işlenenler kullanılıyor
Teşhis
API proxy'si veya paylaşılan akış dağıtımı sırasında, aşağıdaki örnek mesajlarda gösterildiği gibi Mesaj İşleyici günlüklerinde
com.apigee.expressions.parser.ParseExceptionsimgesini görürseniz 2. adıma geçin. Değilse sonraki nedene (Mesaj Günlüğü politikasında geçersiz ana makine adı) geçin.Örnek Hata Mesajı
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressionsBu sorunu nasıl teşhis edeceğinizi anlamak için bir örneğe göz atalım.
Örnek: <Operator> ifadesinin işlenenleri veri ifadeleri olmalıdır
Paylaşılan akışın dağıtımı sırasında Mesaj İşleyici aşağıdaki istisnayı gösteriyor:
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" hata mesajı, eşittir (=), eşit değildir (!=) veya Stats with (=|) operatörünü içeren bir koşulda sorun olduğunu gösterir.Hata mesajında belirtilen operatörün yer aldığı tüm koşul akışlarındaki koşullara bakın ve aşağıdaki sorunlardan herhangi birinin olup olmadığını kontrol edin:
- Operatörün her iki tarafındaki ifadeler aynı türdedir. Örneğin, operatörün sol tarafında bir dize değişkeniniz varsa sağ tarafında başka bir dize değişkeni veya dize değeri olması gerekir.
- Operatörler arasında geçerli değişkenler kullanılır.
- Operatör ile ifadelerin her biri arasında boşluk var.
Yukarıda belirtilen ölçütlerden herhangi biri karşılanmazsa ParseException - "
Both the operands for EQUALS expression should be data expressions" hatasını alırsınız.Bu sorunu anlamak için bir örneğe bakalım. Aşağıda, bir hata koşulu örneği verilmiştir:
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>Bu örnekte, "veya" operatörü ile sonraki koşul arasında boşluk olmadığını görebilirsiniz. Bu nedenle, ikinci koşul ayrıştırılırken EQUALS operatörü için ilk ifade "or(fault.name" olarak alınır. Bu, geçerli bir değişken adı olmadığı için geçerli bir veri ifadesi olarak değerlendirilmez. Bu nedenle, aşağıdaki istisnayı alırsınız:
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Çözünürlük
- Operatörlerin her iki tarafında da her zaman uygun veri ifadeleri bulunduğundan emin olun.
Yukarıda bahsedilen örnekte, kod snippet'inde açıklandığı gibi "veya" operatöründen sonra boşluk bırakılması çözümü uygulanmıştır:
<Condition> (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved") </Condition>
Invalid Host Name in MessageLogging Policy (Mesaj Günlüğü Politikasında Geçersiz Ana Makine Adı)
Teşhis
API proxy'si veya paylaşılan akış dağıtımı sırasında Mesaj İşleyici günlüklerinde aşağıdaki gibi "Invalid HostName" (Geçersiz Ana Makine Adı) mesajıyla ilgili bir istisna görürseniz 2. adıma geçin. Bu durumda bir sonraki nedene (Invalid KeyValueMap Name) geçin.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerBu sorunu nasıl gidereceğinizi ve çözeceğinizi anlamak için aşağıdaki iki örneği inceleyelim.
1. örnek: İstenmeyen özel karakter içeren HostName
API proxy'sinin dağıtımı sırasında Mesaj İşleyici aşağıdaki istisnayı gösteriyor:
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>Yukarıdaki istisna, dağıtımın "Invalid HostName '<hostname>' for Syslog handler" (Syslog işleyicisi için geçersiz ana makine adı "<hostname>") nedeniyle başarısız olduğunu gösteriyor. Bu, MessageLogging politikasında kullanılan HostName'in geçersiz bir ana makine adı olduğunu gösterir.
Mesaj İşleyici günlüğündeki istisna dikkatlice incelendiğinde, HostName'in sonunda istenmeyen bir özel karakter olan "/" olduğu görülür.
'splunkprod.myorg.com/'.Bu istenmeyen özel karakter, dağıtım hatasına neden oldu.
Çözünürlük
- Sorunu çözmek için MessageLogging politikasını değiştirerek istenmeyen özel karakterleri kaldırın.
- Yukarıdaki örnekte, özel karakter "/" MessageLogging politikasından kaldırıldı. Bu işlem sorunu çözdü.
2. örnek: Çözümlenemeyen ana makine adı
Mesaj İşleyici günlüğünde, API proxy'si için dağıtım etkinliğinin tetiklendiğini gösteren birkaç satır vardı. Bunu, API proxy'sinin dağıtımı sırasında oluşan bir istisna izliyordu:
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>Yukarıdaki istisna, dağıtımın "Invalid HostName '<hostname>' for Syslog handler" (Syslog işleyicisi için geçersiz ana makine adı "<hostname>") nedeniyle başarısız olduğunu gösteriyor.
İstisnanın üzerindeki satırı okuduğunuzda, Message Processor'ın MessageLogging politikasında sağlanan
'input-prd.cloud.splunk.com'ana makine adını çözümleyemediğini fark edebilirsiniz.Bunu onaylamak için ileti günlüğü politikasında kullanılan ana makine adına ve bağlantı noktası numarasına telnet yapmayı deneyebilirsiniz.
API proxy'sinin belirli bir düzeltmesindeki MessageLogging politikasını kontrol edin ve kullanılan ana makine adını ile bağlantı noktasını doğrulayın. Yukarıdaki örnekte API proxy'sinin adı: myapi, düzeltme: 42.
MessageLogging Politikası
<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>Belirli bir bağlantı noktasıyla ana makineye Telnet bağlantısı oluşturun. Bu örnekte telnet'i denedik ve Mesaj İşleyici günlüğünde görülen hatanın aynısıyla karşılaştık:
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
Bu durum, ana makine adının çözümlenemediğini açıkça kanıtladı.
Çözünürlük
- Geçerli ana makine adını kullanmak için MessageLogging politikasını değiştirin.
Sorun devam ederse Must Gather Diagnostic Information (Teşhis Bilgileri Toplama) bölümüne gidin.
Neden: Geçersiz KeyValueMap Adı
Teşhis
Aşağıda gösterildiği gibi bir API proxy'si veya paylaşılan akış dağıtımı sırasında Mesaj İşleyici günlüklerinde "KeyValueMap name is invalid" (KeyValueMap adı geçersiz) mesajıyla bir istisna görürseniz 2. adıma geçin. Aksi takdirde Must Gather Diagnostic Information (Teşhis Bilgileri Toplanmalıdır) bölümüne gidin.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerBu sorunu nasıl gidereceğinizi ve çözeceğinizi anlamak için bir örneğe göz atalım.
API proxy'si dağıtımı sırasında hataya yol açan "KeyValueMap name is invalid" (KeyValueMap adı geçersiz) mesajıyla istisnayı gösteren örnek Mesaj İşleyici günlüğü
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]Yukarıdaki ikinci istisna, dağıtım hatasının API Proxy: CustomerAPI, revizyon: 1 için oluştuğunu gösterir.
Stacktrace'i kontrol ettiğinizde, KeyValuMapOperations politikası yürütülürken hatanın oluşturulduğunu fark edebilirsiniz.
API proxy paketini incelediğinizde, aşağıdaki gibi bir koda sahip bir KeyValuMapOperations politikası olduğunu görürsünüz:
<?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>Yukarıda görüldüğü gibi, KeyValueMap'in adını belirten mapIdentifier boş bir dizeye sahip. KeyValueMap adı boş dize olamaz. Dağıtım hatasının nedeni buydu.
Çözünürlük
- KeyValueMapOperations politikasını, KeyValueMap için uygun ve geçerli bir ada sahip olacak şekilde değiştirin.
Yukarıdaki örnekte, KeyValueMapOperations'ı aşağıdaki şekilde gösterildiği gibi KeyValueMap adının "MyKeyValueMap" olması için değiştirerek sorunu çözdük:
<?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>
Toplanması Gereken Teşhis Bilgileri
Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse lütfen aşağıdaki teşhis bilgilerini toplayın. Apigee Edge Destek Ekibi ile iletişime geçerek toplanan bilgileri paylaşın.
Komutun çıkışı
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Mesaj işleyici günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.logBu Playbook'taki hangi bölümlerin denendiği ve bu sorunun çözümünü hızlandırmamıza yardımcı olacak diğer analizler hakkında ayrıntılar.