Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Gejala
Deployment proxy API atau revisi Alur Bersama melalui UI Edge atau API pengelolaan gagal dengan error Konfigurasi gagal.
Pesan Error
Anda akan mendapatkan pesan error di UI Edge seperti yang ditunjukkan di bawah ini:
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 tangkapan layar contoh pesan kesalahan yang diamati di UI Edge:
Kemungkinan Penyebab
Deployment Proxy API dapat gagal dengan pesan "Konfigurasi gagal" {i>error <i}karena berbagai alasan. Tabel di bawah mencantumkan beberapa penyebab yang sering diamati yang menyebabkan kesalahan ini :
Cause | Deskripsi | Petunjuk Pemecahan Masalah yang Berlaku |
Kelas Java Tidak Ada di Kebijakan Javacallout | Class Java tidak ada di file JAR yang direferensikan oleh kebijakan JavaInfo. | Pengguna Edge Private Cloud |
Operand yang salah yang digunakan dalam kondisi di Alur Kondisi | Operand/ekspresi yang digunakan di satu atau kedua sisi operator dalam kondisi tidak valid. | |
Nama Host tidak valid dalam kebijakan Logging Pesan | Nama host yang digunakan dalam kebijakan MessageLogging tidak dapat diselesaikan 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 tempat Anda melihat 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 Pemroses Pesan di output status deployment.
Login ke salah satu Pemroses Pesan dan periksa log
/opt/apigee/var/log/edge-message-processor/logs/system.log
. Melihat apakah terjadi error selama deployment Proxy API.Bergantung pada error/pengecualian yang diamati di log Pemroses Pesan, Anda harus mengikuti langkah pemecahan masalah dan resolusi yang sesuai untuk masalah tersebut.
Bagian di bawah ini memberikan beberapa pengecualian yang paling sering diamati yang menyebabkan error deployment "Konfigurasi gagal" serta memberikan langkah-langkah untuk memecahkan masalah dan menyelesaikannya.
Penyebab: Tidak Ada Kelas Java di Kebijakan JavaInfo
Diagnosis
- Di log Pemroses Pesan, jika Anda melihat pengecualian dengan pesan "Failed to instance the Javacallout Class" selama deployment Proxy API (DeployEvent) seperti yang ditampilkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Operand yang salah yang digunakan dalam kondisi di Alur Kondisi.
Pemroses Pesan 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 JavaInfo
com.something.apigee.callout.crypto.main.SecretCallout
tidak dapat dibuat instance-nya. Error ini umumnya terjadi jika class tertentu tidak tersedia di file JAR yang ditentukan dalam kebijakan Javacallout atau file JAR dependennya.Periksa file JAR yang berisi semua class yang terkait dengan paket
com.something.apigee.callout.crypto.main
dan pastikan classcom.something.apigee.callout.crypto.main.SecretCallout
tertentu tidak ada.
Resolusi
- Tambahkan class yang tidak ada ke file JAR tertentu dan upload file JAR.
- Deploy ulang Proxy API.
- Dalam contoh di atas, kita menyelesaikan masalah dengan:
- Menambahkan class
com.something.apigee.callout.crypto.main.SecretCallout
yang tidak ada ke file JAR. - Mengupload file JAR yang telah diupdate dan men-deploy ulang Proxy API.
- Menambahkan class
Penyebab: Operand salah yang digunakan dengan operator di Alur Kondisi
Diagnosis
Di log Pemroses Pesan, jika Anda melihat
com.apigee.expressions.parser.ParseException
selama deployment Proxy API atau Alur Bersama seperti yang ditunjukkan dalam contoh pesan di bawah, lanjutkan ke Langkah #2. Jika tidak, lihat penyebab berikutnya Nama Host Tidak Valid dalam kebijakan Logging Pesan.Contoh Pesan Error
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Mari lihat contoh untuk memahami cara mendiagnosis masalah ini.
Contoh : Operand untuk <Operator> seharusnya berupa ekspresi data
Pemroses Pesan menunjukkan pengecualian berikut selama deployment Alur Bersama:
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 dalam ParseException - "
Both the operands for EQUALS expression should be data expressions
" menunjukkan bahwa kondisi yang melibatkan operator sama dengan (=), tidak sama dengan (!=) atau Statistik dengan operator (=|) memiliki masalah.Lihat kondisi di semua Alur Kondisi yang melibatkan operator tertentu yang disebutkan dalam pesan error dan lihat apakah ada salah satu masalah berikut:
- Ekspresi di kedua sisi operator berjenis 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 di 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
".Perhatikan contoh untuk memahami masalah ini. Berikut ini contoh kondisi error yang
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>
Dalam contoh ini, Anda dapat mengamati bahwa tidak ada spasi di antara “atau” operator dan kemudian kondisi berikutnya. Jadi, jika kondisi kedua diuraikan, ekspresi pertama akan 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 salah satu sisi operator.
Pada contoh yang dibahas di atas, resolusinya adalah untuk memastikan bahwa ada ruang setelah huruf "atau" operator 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
Di log Pemroses Pesan, jika Anda melihat pengecualian dengan pesan "Invalid HostName" selama deployment Proxy API atau Alur Bersama seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, lihat penyebab berikutnya Nama KeyValueMap Tidak Valid.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
Mari kita lihat dua contoh di bawah untuk memahami cara memecahkan dan menyelesaikan masalah ini.
Contoh 1: HostName memiliki karakter khusus yang tidak diinginkan
Pemroses Pesan 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 penerapan gagal karena "Nama Host Tidak Valid '<nama host>' untuk pengendali Syslog". Hal ini menunjukkan bahwa HostName yang digunakan dalam Kebijakan MessageLogging adalah nama host yang tidak valid.
Memeriksa pengecualian di log Pemroses Pesan menunjukkan dengan cermat ada karakter khusus "/" yang tidak diinginkan di akhir HostName
'splunkprod.myorg.com/'.
Karakter khusus yang tidak diinginkan ini merupakan penyebab error deployment.
Resolusi
- Ubah kebijakan MessageLogging untuk menghapus karakter khusus yang tidak diinginkan guna menyelesaikan masalah.
- Pada contoh di atas, karakter khusus "/" dihapus dari Kebijakan MessageLogging. Hal ini mengatasi masalah tersebut.
Contoh 2: Nama Host yang Tidak Dapat Diselesaikan
Log Pemroses Pesan memiliki beberapa baris yang menunjukkan peristiwa deployment untuk Proxy API dipicu, yang diikuti dengan 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 penerapan gagal karena "Nama Host Tidak Valid '<nama host>' untuk pengendali Syslog".
Jika Anda membaca baris di atas pengecualian, Anda dapat melihat bahwa Pemroses Pesan tidak dapat me-resolve nama host
'input-prd.cloud.splunk.com'
yang disediakan dalam kebijakan MessageLogging.Untuk mengonfirmasi hal ini, Anda dapat mencoba melakukan telnet ke nama host dan port # yang digunakan dalam kebijakan Logging Pesan.
Periksa kebijakan MessageLogging di revisi Proxy API tertentu dan verifikasi nama host dan port # yang digunakan. Pada 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 {i>host<i} dengan porta tertentu. Untuk contoh ini, kami mencoba telnet dan mendapatkan error yang sama seperti yang terlihat di log Pemroses Pesan:
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 dengan jelas membuktikan bahwa nama {i>host<i} tidak dapat diselesaikan.
Resolusi
- Ubah kebijakan MessageLogging agar menggunakan nama host yang valid.
Jika masalah masih berlanjut, buka Harus Mengumpulkan Informasi Diagnostik.
Penyebab: Nama KeyValueMap Tidak Valid
Diagnosis
Di log Pemroses Pesan, jika Anda melihat pengecualian dengan pesan "KeyValueMap name is invalid" selama deployment Proxy API atau Alur Bersama seperti yang ditampilkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Harus Mengumpulkan Informasi Diagnostik.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
Mari kita lihat contoh untuk memahami cara memecahkan dan menyelesaikan masalah ini.
Contoh log Pemroses Pesan 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 terjadi error deployment untuk API Proxy: CustomerAPI, revisi: 1.
Dengan memeriksa stacktrace, Anda dapat melihat bahwa error ditampilkan saat menjalankan kebijakan KeyValuMapOperations.
Saat melihat paket Proxy API, Anda akan menemukan satu kebijakan KeyValuMapOperations yang memiliki kode seperti yang ditampilkan di bawah ini:
<?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 merupakan penyebab error Deployment.
Resolusi
- Ubah kebijakan KeyValueMapOperations agar memiliki nama yang valid dan tepat untuk KeyValueMap.
Pada contoh di atas, kita menyelesaikan masalah dengan mengubah KeyValueMapOperations agar nama KeyValueMap menjadi "MyKeyValueMap" sebagaimana ditunjukkan di bawah ini:
<?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>
Harus Mengumpulkan Informasi Diagnostik
Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut. Hubungi Dukungan Apigee Edge dan berikan informasi yang dikumpulkan kepada mereka.
Output perintah
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
Log Pemroses Pesan
/opt/apigee/var/log/edge-message-processor/logs/system.log
Detail tentang bagian mana saja dalam Playbook ini yang telah dicoba dan insight lain yang akan membantu kami menyelesaikan masalah ini dengan cepat.