Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Belirti
API proxy'si veya Paylaşılan Akış düzeltmelerinin Edge kullanıcı arayüzü veya yönetim API'si üzerinden dağıtılması Yapılandırma başarısız hatasıyla başarısız oluyor.
Hata Mesajı
Edge kullanıcı arayüzünde aşağıda gösterildiği 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özlemlenen örnek bir hata mesajının ekran görüntüsünü aşağıda bulabilirsiniz:
Olası Nedenler
API Proxy dağıtımı, "Yapılandırma başarısız oldu" değeriyle başarısız olabilir birçok farklı nedenden dolayı olabilir. Aşağıdaki tabloda, bu hataya neden olan ve sık karşılaşılan birkaç neden listelenmiştir :
Neden | Açıklama | Aşağıdakiler İçin Geçerli Sorun Giderme Talimatları |
JavaScript Politikası'nda Java Sınıfı Eksik | JavaAçıklama politikasında referans verilen JAR dosyasında bir Java sınıfı eksik. | Edge Private Cloud Kullanıcıları |
Koşul Akışı'ndaki koşullarda kullanılan yanlış işlenenler | Koşullardaki operatörlerin bir veya her iki tarafında kullanılan işlemler/ifadeler geçerli değildir. | |
İleti Günlük Kaydında Geçersiz Ana Makine Adı politikası | MessageLogging politikasında kullanılan ana makine adı çözümlenemiyor veya istenmeyen bazı özel karakterler içeriyor olabilir. | |
Geçersiz KeyValueMap Adı | API Proxy'sindeki KeyValueMapOperations politikasında KeyValueMap geçersiz veya boş. |
Genel Teşhis Adımları
Aşağıdaki API'yi kullanarak dağıtım hatasını gözlemlediğiniz API Proxy'sinin ilgili düzeltmesinin dağıtım durumunu öğrenin:
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ınmış bir ö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ışında, İleti İşleyicilerin her birinde "Yapılandırma başarısız oldu" hata mesajını görürsünüz.
Mesaj İşleyen(ler)inden birine giriş yapın ve
/opt/apigee/var/log/edge-message-processor/logs/system.log
günlüğünü kontrol edin. API Proxy'sinin dağıtımı sırasında herhangi bir hata olup olmadığına bakın.İleti İşleyici günlüğünde gözlemlenen hataya/istisnaya bağlı olarak, uygun sorun giderme adımlarını ve çözüm adımlarını uygulamanız gerekir.
Aşağıdaki bölümlerde, "Yapılandırma başarısız oldu" şeklinde dağıtım hatasına neden olan, en sık gözlemlenen istisnalardan bazıları yer almaktadır. Ayrıca, bu tür sorunları giderme ve çözme adımlarına yer verilmiştir.
Neden: JavaScript Çağrı Politikası'nda Java Sınıfı eksik
Teşhis
- İleti İşleyen günlüklerinde, aşağıda gösterildiği gibi bir API Proxy'sinin (DeployEvent) dağıtımı sırasında "Failed to Örnek the JavaScript Class" (JavaAçıklama Sınıfını örneklendiremedi) mesajıyla ilgili bir istisna görürseniz 2. Adım'a geçin. Aksi takdirde Koşul Akışı'ndaki koşullarda kullanılan yanlış işlenenler bölümüne gidin.
Mesaj İşleyici, API Proxy'sinin dağıtımı sırasında aşağıdaki istisnayı gösterir:
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 istisnadaki hata mesajı,
com.something.apigee.callout.crypto.main.SecretCallout
JavaScript sınıfının örneklenemediğini gösteriyor. Bu hata genellikle ilgili sınıf, JavaAçıklama politikasında belirtilen JAR dosyasında veya ona bağlı JAR dosyalarında bulunmadığında meydana gelir.com.something.apigee.callout.crypto.main
paketiyle ilgili tüm sınıfları içeren JAR dosyasını kontrol edin ve ilgilicom.something.apigee.callout.crypto.main.SecretCallout
sınıfının eksik olduğunu onaylayın.
Çözünürlük
- Eksik sınıfı ilgili 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:
- Eksik olan
com.something.apigee.callout.crypto.main.SecretCallout
sınıfı JAR dosyasına ekleniyor. - Güncellenmiş JAR dosyasını yüklemek ve API Proxy'sini yeniden dağıtmak.
- Eksik olan
Neden: Koşul Akışı'nda operatörlerle yanlış işlenenler
Teşhis
İleti İşleyici günlüklerinde, aşağıdaki örnek iletilerde gösterildiği gibi API Proxy'si veya Paylaşılan Akış dağıtımı sırasında bir
com.apigee.expressions.parser.ParseException
görürseniz 2. Adım'a geçin. Bu mümkün değilse bir sonraki nedene gidin: İleti Günlük Kaydında Geçersiz Ana Makine Adı politikası.Örnek Hata Mesajı
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Bu sorunun nasıl teşhis edileceğini anlamak için bir örneği inceleyelim.
Örnek : <Operatör> hizmeti sağlayıcıları ifadesi, veri ifadeleri olmalıdır
İleti İşleyen, Paylaşılan Akış dağıtımı sırasında aşağıdaki istisnayı gösterir:
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'daki hata mesajı: "
Both the operands for EQUALS expression should be data expressions
" (=) değerine eşit olmayan, (!=) değerine eşit olmayan veya (=|) operatörüne sahip istatistikler içeren bir koşulun sorunu olduğunu gösterir.Hata iletisinde belirtilen belirli operatörü içeren tüm Koşul Akışları'ndaki koşullara bakın ve aşağıdaki sorunlardan herhangi birinin olup olmadığına bakın:
- 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ğ tarafta 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 bir boşluk bulunur.
Yukarıda belirtilen ölçütlerden herhangi biri karşılanmazsa "
Both the operands for EQUALS expression should be data expressions
" adlı ParseException hatasını alırsınız.Bu sorunu anlamak için bir örneği inceleyelim. Aşağıda bir hata koşulu örneği verilmiştir:
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>
Bu örnekte, "or" (veya) ile arasında hiçbir boşluk olmadığını operatörü ve ardından sonraki koşul. Dolayısıyla, ikinci koşul ayrıştırılırken ilk ifade EQUALS operatörü için "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. Sonuç olarak şu 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 ifadelerinin bulunduğundan emin olun.
Yukarıda açıklanan örnekte çözüm, "veya" ifadesinden sonra alan olmasını sağlamaktı. işlecini kullanın:
<Condition> (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved") </Condition>
MessageLogging Politikası'nda Geçersiz Ana Makine Adı
Teşhis
İleti İşleyici günlüklerinde API Proxy'si veya Paylaşılan Akış dağıtımı sırasında aşağıda gösterildiği gibi " Invalid HostName" (Geçersiz Ana Makine Adı) mesajıyla ilgili bir istisna görürseniz 2. Adım'a geçin. Görmüyorsanız Geçersiz KeyValuemap Adı adlı bir sonraki nedene gidin.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
Bu sorunun nasıl giderileceğini ve çözüleceğini anlamak için aşağıdaki iki örneği inceleyelim.
1. Örnek: HostName'de istenmeyen özel karakter bulunuyor
Mesaj İşleyici, API Proxy'sinin dağıtımı sırasında aşağıdaki istisnayı gösterir:
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 "Geçersiz Ana Makine Adı '<anamakineadı>'" nedeniyle başarısız olduğunu gösterir belirtin". Bu, MessageLogging Politikası'nda kullanılan HostName değerinin geçersiz bir ana makine adı olduğunu gösterir.
İleti İşleyici günlüğündeki istisnanın dikkatlice incelenmesi, istenmeyen bir özel karakter ("/") olduğunu göstermektedir HostName'in sonunda:
'splunkprod.myorg.com/'.
Dağıtım hatasının nedeni, istenmeyen bu özel karakterdir.
Çözünürlük
- Sorunu çözmek için MessageLogging politikasını istenmeyen özel karakterleri kaldırarak değiştirin.
- Yukarıdaki örnekte, "/" özel karakteri , MessageLogging Politikası'ndan kaldırıldı. Bu işlem sorunu çözdü.
2. Örnek: Çözümlenemeyen Ana Makine Adı
Mesaj İşleyici günlüğünde bir API Proxy'si için dağıtım etkinliğinin tetiklendiğini gösteren birkaç satır vardır ve ardından API Proxy'sinin dağıtımı sırasında meydana gelen bir istisna gelir:
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 "Geçersiz Ana Makine Adı '<anamakineadı>'" nedeniyle başarısız olduğunu gösterir belirtin".
İstisnanın üzerindeki satırı okursanız İleti İşleyici'nin MessageLogging politikasında sağlanan
'input-prd.cloud.splunk.com'
ana makine adını çözümleyemediğini fark edebilirsiniz.Bunu onaylamak için İleti Kaydı politikasında kullanılan ana makine adı ve bağlantı noktası numarası için telnet kullanmayı deneyebilirsiniz.
API Proxy'sinin ilgili düzeltmesindeki MessageLogging politikasını kontrol edin ve kullanılan ana makine adını ve bağlantı noktası numarasını doğrulayın. Yukarıdaki örnekte API Proxy adı: myapi, Fix: 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 bağlantı noktasıyla ana makineye Telnet bağlantısı. Bu örnekte, telnet'i denedik ve İleti İşleyici günlüğünde gördüğümüz hatanın aynısını aldı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 Teşhis Bilgilerinin Toplanması Gerekenler bölümüne gidin.
Neden: Geçersiz KeyValuemap Adı
Teşhis
Mesaj İşleyici günlüklerinde, aşağıda gösterildiği gibi bir API Proxy'si veya Paylaşılan Akış dağıtımı sırasında "KeyValueMap adı geçersiz" mesajıyla ilgili bir istisna görürseniz 2. Adım'a geçin. Aksi takdirde Teşhis Bilgilerinin Toplanması Zorunludur bölümüne gidin.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
Bu sorunun nasıl giderileceğini ve çözüleceğini anlamak için bir örneği inceleyelim.
"KeyValueMap adı geçersiz" mesajıyla bir istisnayı gösteren örnek Mesaj İşleyici günlüğü API Proxy dağıtımı sırasında hataya neden oluyor
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, API Proxy: CustomerAPI, düzeltme: 1 için dağıtım hatası oluştuğunu gösterir.
Yığın izlemeyi kontrol ettiğinizde, KeyValuMapOperations politikası yürütülürken hatanın atıldığını fark edebilirsiniz.
API Proxy paketine baktığınızda, aşağıdaki gibi 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ı gösteren mapIdentifier boş bir dizeye sahip. KeyValueMap adı boş dize olamaz. Dağıtım hatasının nedeni budur.
Çö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 adını KeyValuemap adı "MyKeyValueMap" olacak şekilde değiştirerek sorunu çözdük aşağıdaki gibidir:
<?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>
Teşhis Bilgileri Toplanmalıdır
Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse lütfen aşağıdaki teşhis bilgilerini toplayın. Apigee Edge Destek Ekibi ile iletişime geçerek toplanan bilgileri iletin.
Komutun çıkışı
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
İleti işleyen günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log
Bu Başucu Kitabı'ndaki hangi bölümlerin denendiği ve bu sorunun çözümünü yavaşlatmamıza yardımcı olacak diğer bilgiler.