Anda melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Deployment revisi proxy API atau Shared Flow melalui UI Edge atau management API gagal dengan error Konfigurasi gagal.
Pesan Error
Anda akan mendapatkan pesan error di UI Edge seperti yang ditunjukkan di bawah:
The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}
Berikut adalah screenshot contoh pesan error yang diamati di UI Edge:

Kemungkinan Penyebab
Deployment Proxy API dapat gagal dengan error "Konfigurasi gagal" karena berbagai alasan. Tabel di bawah mencantumkan beberapa penyebab yang sering diamati dan menyebabkan error ini :
| Penyebab | Deskripsi | Petunjuk Pemecahan Masalah yang Berlaku Untuk |
| Class Java Tidak Ada dalam Kebijakan JavaCallout | Class Java tidak ada dalam file JAR yang direferensikan oleh kebijakan JavaCallout. | Pengguna Edge Private Cloud |
| Operand yang salah digunakan dalam kondisi di Condition Flow | Operand/ekspresi yang digunakan di satu atau kedua sisi operator dalam kondisi tidak valid. | |
| Nama Host tidak valid dalam kebijakan Message Logging | Nama host yang digunakan dalam kebijakan MessageLogging tidak dapat di-resolve atau mungkin memiliki beberapa karakter khusus yang tidak diinginkan. | |
| Nama KeyValueMap tidak valid | KeyValueMap tidak valid atau kosong dalam kebijakan KeyValueMapOperations di Proxy API. |
Langkah-Langkah Diagnosis Umum
Dapatkan status deployment untuk revisi tertentu dari Proxy API yang mengalami error deployment menggunakan API di bawah:
curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Berikut adalah contoh output dari API di atas:
"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" },Anda akan melihat pesan error "Konfigurasi gagal" di setiap Message Processor dalam output status deployment.
Login ke salah satu Message Processor dan periksa log
/opt/apigee/var/log/edge-message-processor/logs/system.log. Lihat apakah ada error selama deployment Proxy API.Bergantung pada error/pengecualian yang diamati dalam log Message Processor, Anda harus mengikuti langkah-langkah pemecahan masalah dan resolusi yang sesuai untuk masalah tersebut.
Bagian di bawah ini memberikan beberapa pengecualian yang paling sering diamati dan menyebabkan error deployment "Konfigurasi gagal" serta memberikan langkah-langkah untuk memecahkan masalah dan menyelesaikannya.
Penyebab: Class Java Tidak Ada dalam Kebijakan JavaCallout
Diagnosis
- Dalam log Message Processor, jika Anda melihat pengecualian dengan pesan "Failed to instantiate the JavaCallout Class" selama deployment Proxy API (DeployEvent) seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Operand yang salah digunakan dalam kondisi di Condition Flow.
Message Processor menampilkan pengecualian berikut selama deployment Proxy 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>Pesan error dalam pengecualian di atas menunjukkan bahwa class JavaCallout
com.something.apigee.callout.crypto.main.SecretCallouttidak dapat dibuat instance-nya. Error ini umumnya terjadi jika class tertentu tidak tersedia dalam file JAR yang ditentukan dalam kebijakan JavaCallout atau salah satu file JAR dependennya.Periksa file JAR yang berisi semua class yang terkait dengan paket
com.something.apigee.callout.crypto.maindan pastikan class tertentucom.something.apigee.callout.crypto.main.SecretCallouttidak ada.
Resolusi
- Tambahkan class yang tidak ada ke file JAR tertentu dan upload file JAR.
- Deploy ulang Proxy API.
- Dalam contoh di atas, kami menyelesaikan masalah dengan:
- Menambahkan class
com.something.apigee.callout.crypto.main.SecretCalloutyang tidak ada ke file JAR. - Mengupload file JAR yang diperbarui dan men-deploy ulang Proxy API.
- Menambahkan class
Penyebab: Operand yang salah digunakan dengan operator di Condition Flow
Diagnosis
Dalam log Message Processor, jika Anda melihat
com.apigee.expressions.parser.ParseExceptionselama deployment Proxy API atau Shared Flow seperti yang ditunjukkan dalam contoh pesan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka penyebab berikutnya Nama Host tidak valid dalam kebijakan Message Logging.Contoh Pesan Error
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressionsMari kita lihat contoh untuk memahami cara mendiagnosis masalah ini.
Contoh : Operand untuk ekspresi <Operator> harus berupa ekspresi data
Message Processor menampilkan pengecualian berikut selama deployment Shared Flow:
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>Pesan error di ParseException - "
Both the operands for EQUALS expression should be data expressions" menunjukkan bahwa kondisi yang melibatkan sama dengan (=), tidak sama dengan (!=), atau Statistik dengan operator (=|) memiliki masalah.Lihat kondisi di semua Condition Flow yang melibatkan operator tertentu yang disebutkan dalam pesan error dan lihat apakah ada masalah berikut:
- Ekspresi di kedua sisi operator memiliki jenis yang sama. Misalnya, jika Anda memiliki variabel string di sisi kiri operator, Anda harus memiliki variabel string atau nilai string lain di sisi kanan.
- Variabel yang valid digunakan di antara operator.
- Ada spasi antara operator dan setiap ekspresi.
Jika salah satu kriteria yang disebutkan di atas tidak terpenuhi, Anda akan mendapatkan ParseException - "
Both the operands for EQUALS expression should be data expressions".Mari kita lihat contoh untuk memahami masalah ini. Berikut adalah contoh kondisi error
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>Dalam contoh ini, Anda dapat melihat bahwa tidak ada spasi antara operator "or" dan kondisi berikutnya. Jadi, saat kondisi kedua diuraikan, ekspresi pertama diambil sebagai "or(fault.name" untuk operator EQUALS. Ini bukan nama variabel yang valid, sehingga tidak diperlakukan sebagai ekspresi data yang valid. Akibatnya, Anda mendapatkan pengecualian ini:
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Resolusi
- Pastikan Anda selalu memiliki ekspresi data yang tepat di kedua sisi operator.
Dalam contoh yang dibahas di atas, resolusinya adalah memastikan ada spasi setelah operator "or" seperti yang dijelaskan dalam cuplikan kode:
<Condition> (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved") </Condition>
Nama Host tidak valid dalam Kebijakan MessageLogging
Diagnosis
Dalam log Message Processor, jika Anda melihat pengecualian dengan pesan "Invalid HostName" selama deployment Proxy API atau Shared Flow seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka penyebab berikutnya Nama KeyValueMap tidak valid.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerMari kita lihat dua contoh di bawah untuk memahami cara memecahkan masalah dan menyelesaikan masalah ini.
Contoh 1: HostName memiliki karakter khusus yang tidak diinginkan
Message Processor menampilkan pengecualian berikut selama deployment Proxy 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>Pengecualian di atas menunjukkan bahwa deployment gagal karena "Invalid HostName '<hostname>' for Syslog handler". Hal ini menunjukkan bahwa HostName yang digunakan dalam Kebijakan MessageLogging adalah nama host yang tidak valid.
Memeriksa pengecualian dalam log Message Processor dengan cermat menunjukkan bahwa ada karakter khusus "/" yang tidak diinginkan di akhir HostName
'splunkprod.myorg.com/'.Karakter khusus yang tidak diinginkan ini adalah penyebab error deployment.
Resolusi
- Ubah kebijakan MessageLogging untuk menghapus karakter khusus yang tidak diinginkan guna menyelesaikan masalah.
- Dalam contoh di atas, karakter khusus "/" dihapus dari Kebijakan MessageLogging. Tindakan ini menyelesaikan masalah.
Contoh 2: Nama Host yang Tidak Dapat Di-resolve
Log Message Processor memiliki beberapa baris yang menunjukkan bahwa peristiwa deployment untuk Proxy API dipicu, yang diikuti oleh pengecualian yang terjadi selama deployment Proxy 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>Pengecualian di atas menunjukkan bahwa deployment gagal karena "Invalid HostName '<hostname>' for Syslog handler".
Jika Anda membaca baris di atas pengecualian, Anda dapat melihat bahwa Message Processor tidak dapat me-resolve nama host
'input-prd.cloud.splunk.com'yang diberikan dalam kebijakan MessageLogging.Untuk mengonfirmasi hal ini, Anda dapat mencoba telnet ke nama host dan port # yang digunakan dalam kebijakan Message Logging.
Periksa kebijakan MessageLogging dalam revisi tertentu dari Proxy API dan verifikasi nama host dan port # yang digunakan. Dalam contoh di atas, nama Proxy API: myapi, revisi: 42.
Kebijakan 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>Telnet ke host dengan port tertentu. Untuk contoh ini, kami mencoba telnet dan mendapatkan error yang sama seperti yang terlihat di log Message Processor:
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
Hal ini membuktikan dengan jelas bahwa nama host tidak dapat di-resolve.
Resolusi
- Ubah kebijakan MessageLogging untuk menggunakan nama host yang valid.
Jika masalah masih berlanjut, buka Mengumpulkan Informasi Diagnostik yang Diperlukan.
Penyebab: Nama KeyValueMap tidak valid
Diagnosis
Dalam log Message Processor, jika Anda melihat pengecualian dengan pesan "KeyValueMap name is invalid" selama deployment Proxy API atau Shared Flow seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Mengumpulkan Informasi Diagnostik yang Diperlukan.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerMari kita lihat contoh untuk memahami cara memecahkan masalah dan menyelesaikan masalah ini.
Contoh log Message Processor yang menampilkan pengecualian dengan pesan "KeyValueMap name is invalid" yang menyebabkan error selama deployment Proxy 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]Pengecualian kedua di atas menunjukkan bahwa error deployment terjadi untuk Proxy API: CustomerAPI, revisi: 1.
Dengan memeriksa stacktrace, Anda dapat melihat bahwa error ditampilkan saat menjalankan kebijakan KeyValuMapOperations.
Dengan melihat paket Proxy API, Anda akan menemukan bahwa ada satu kebijakan KeyValuMapOperations yang memiliki kode seperti yang ditunjukkan di bawah:
<?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>Seperti yang terlihat di atas, mapIdentifier, yang menunjukkan nama KeyValueMap, memiliki string kosong. Nama KeyValueMap tidak boleh berupa string kosong. Hal ini adalah penyebab error Deployment.
Resolusi
- Ubah kebijakan KeyValueMapOperations agar memiliki nama yang valid untuk KeyValueMap.
Dalam contoh di atas, kami menyelesaikan masalah dengan mengubah KeyValueMapOperations agar memiliki nama KeyValueMap sebagai "MyKeyValueMap" seperti yang ditunjukkan di bawah:
<?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>
Mengumpulkan Informasi Diagnostik yang Diperlukan
Jika masalah berlanjut meskipun setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut. Hubungi Dukungan Apigee Edge dan berikan informasi yang telah dikumpulkan.
Output perintah
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Log Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.logDetail tentang bagian mana dalam Playbook ini yang telah dicoba dan insight lainnya yang akan membantu kami mempercepat penyelesaian masalah ini.