您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
問題
使用者無法在 Edge UI 中建立追蹤工作階段。
錯誤訊息
Edge 使用者介面會顯示錯誤訊息,如下所示:
Error creating trace session for API proxy <api proxy name>, revision <revision number>, environment <environment name>.
Failed to create DebugSession <session number>
以下是在 Edge UI 中觀察到的錯誤訊息範例螢幕截圖:

可能原因
以下是造成這項錯誤的可能原因:
| 原因 | 說明 | 適用於以下裝置的疑難排解說明 |
| 網路連線問題 | 管理伺服器與訊息處理器之間的通訊失敗,原因可能是網路連線問題或防火牆規則。 | Edge Private Cloud 使用者 |
| 訊息處理器未載入環境 | 由於發生錯誤,訊息處理器尚未載入您嘗試啟用追蹤的特定環境。 | |
| 過時的訊息處理器項目 | 管理伺服器參照不存在 (過時) 的訊息處理器。 | |
| 訊息處理器無法連線 | 訊息處理器已停止運作或無法連線。 | |
| 資源使用率過高問題 | 訊息處理器資源 (CPU、記憶體或負載) 使用率偏高。 | |
| API Proxy 未部署在一或多個訊息處理器上 | 由於部署期間缺少事件通知,API Proxy 可能無法部署在一或多個訊息處理器上。 | |
| Edge UI 發生問題 | Edge UI 發生錯誤,因此無法建立追蹤工作階段。 |
常見診斷步驟
執行這項管理 API:
curl -v <management-server-host>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/<revision-number>/debugsessions -u <user>如果發生任何錯誤,請記下錯誤訊息。前往「網路連線問題」。
如果收到成功回應,表示可以透過 Management API 建立追蹤工作階段。不過,Edge UI 可能有問題,導致無法在 UI 中建立追蹤工作階段。移至「Issue with Edge UI」。
原因:網路連線問題
診斷
檢查管理伺服器記錄
/opt/apigee/var/log/edge-management-server/logs/system.log,看看建立追蹤/偵錯工作階段時是否有任何錯誤。管理伺服器記錄中的錯誤範例
2018-02-08 09:08:21,310 org:myorg env:uat qtp1073741635-1074 ERROR DISTRIBUTION - DebugSessionAPI.createDebugSession() : createDebugSession : Unable to connect to the server with UUID cedeabd2-e4d1-40bb-8f18-d6afc8835e5b org.apache.http.conn.HttpHostConnectException: Connect to 10.84.75.92:8082 [/10.84.75.92] failed: Connection refused at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:140) ~[httpclient-4.3.5.jar:4.3.5] at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318) ~[httpclient-4.3.5.jar:4.3.5] at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) ~[httpclient-4.3.5.jar:4.3.5] ...<snipped> Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_65] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_65] ...<snipped>上述範例錯誤顯示,當管理伺服器嘗試連線至通訊埠 8082 上的訊息處理器時,會收到「拒絕連線」錯誤。因此管理伺服器無法建立追蹤工作階段。
如果沒有看到任何與網路連線相關的錯誤,或類似於上述範例的錯誤,請前往「訊息處理器未載入環境」。
如果發現網路連線相關錯誤,或類似上述範例的錯誤,請按照下列步驟操作。
按照下列步驟,測試管理伺服器與訊息處理器在通訊埠 8082 的連線:
如果可以使用 Telnet,請按照下列步驟操作:
telnet <MessageProcessor_IP> 8082如果無法使用 Telnet,請使用 netcat 檢查連線,方法如下:
nc -vz <MessageProcessor_IP> 8082如果收到「連線遭拒」或「連線逾時」的回應,請繼續下一個步驟。
使用顯示錯誤的對應 IP 位址登入每個訊息處理器,然後執行下列步驟:
確認訊息處理器是否正在監聽通訊埠 8082:
netstat -an | grep LISTEN | grep 8082如果訊息處理器正在監聽通訊埠 8082,請前往步驟 7。
如果訊息處理器未監聽通訊埠 8082,請使用下列指令重新啟動訊息處理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart等待訊息處理器完全啟動,請使用下列指令:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready訊息處理器啟動後,請再次檢查訊息處理器是否正在監聽通訊埠 8082。
如果訊息處理器正在監聽通訊埠 8082,請前往步驟 7。
確認您現在是否能在使用者介面中啟動追蹤工作階段。如果問題不再發生,請略過下列步驟。
如果訊息處理器正在執行並監聽通訊埠 8082,但您仍無法從管理伺服器等其他伺服器連線,可能是防火牆封鎖了外部連線。
使用適當的指令檢查防火牆規則。舉例來說,您可以執行 iptables 指令,列出系統上定義的所有防火牆規則:
iptables -L -n如果通訊埠 8082 沒有設定防火牆規則,請前往「資源用量過高問題」。
如果通訊埠 8082 上有任何防火牆規則設定,請前往下方的「解決方案」一節。
解決方法
- 請與網路管理員合作,允許外部伺服器在通訊埠 8082 上傳入/傳出流量。
如果問題仍未解決,請參閱「必須收集的診斷資訊」。
原因:訊息處理器未載入環境
診斷
- 檢查管理伺服器記錄
/opt/apigee/var/log/edge-management-server/logs/system.log,看看建立追蹤/偵錯工作階段時是否有任何錯誤。 建立追蹤/偵錯工作階段時,您可能會看到「no valid responses from MP(s)」等錯誤訊息,如下所示:
2018-01-30 08:28:09,721 org:mynonprod env:uat qtp2007599722-712162 ERROR DISTRIBUTION - DebugSessionAPI.createDebugSession() : no valid responses from MP(s), throwing error 2018-01-30 08:28:09,723 org:mynonprod env:uat qtp2007599722-712162 ERROR REST - CustomJAXRSInvoker.performInvocation() : CustomJAXRSInvoker.performInvocation : Method com.apigee.distribution.DebugSessionAPI.createDebugSession threw an exception. 2018-01-30 08:28:09,724 org:mynonprod env:uat qtp2007599722-712162 ERROR REST - ExceptionMapper.toResponse() : Error occurred : Failed to create DebugSession 1517297564678 2018-01-30 08:28:09,724 org:mynonprod env:uat qtp2007599722-712162 ERROR REST - ExceptionMapper.toResponse() : Returning error response : ErrorResponse{errorCode = distribution.CreateDebugSessionFailed, errorMessage = Failed to create DebugSession 1517297564678}這個錯誤表示訊息處理器因不明原因未回應管理伺服器。
如果沒有看到與上例類似的錯誤,請前往「過時的訊息處理工具項目」。
如果發現類似上述範例的錯誤,請按照下列步驟操作。
造成這項錯誤最可能的原因是,您嘗試建立追蹤工作階段的環境未載入訊息處理器。
登入每個訊息處理器,然後使用下列指令,檢查您要建立追蹤工作階段的特定環境是否已載入訊息處理器:
curl -s http://localhost:8082/v1/runtime/organizations/<org-name>/environments輸出內容範例:
您會在上述指令的輸出內容中,看到載入至訊息處理器的特定機構環境清單。舉例來說,如果 preprod 和 test 環境載入訊息處理器,輸出內容會如下所示:
[ "preprod", "test" ]
如果上述指令列出您要建立追蹤工作階段的特定環境 (例如「dev」),請前往「過時的訊息處理器項目」。
如果特定環境 (例如「dev」) 未列為上述指令的一部分,請檢查 Message Processor 上的
/opt/apigee/var/log/edge-message-processor/logs/system.log和/opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.log,確認載入環境時是否有任何錯誤。導致訊息處理器無法載入環境的錯誤有很多種。解決方式取決於發生的錯誤。
解析度
訊息處理器可能因多種原因而無法載入環境。本節將說明可能導致這個問題的幾個原因,以及如何解決問題。
如果在 Message Processor 記錄中看到下列任一錯誤,表示指定環境中指定金鑰儲存區/信任儲存區新增的憑證/金鑰有問題。
錯誤 #1:java.security.KeyStoreException:Cannot overwrite own certificate
2018-01-30 12:04:38,248 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mycert in key store : mytruststore in environment : test at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.AbstractConfigurator.propagateEvent(AbstractConfigurator.java:85) ~[config-entities-1.0.0.jar:na] at com.apigee.messaging.runtime.Environment.handleUpdate(Environment.java:238) [message-processor-1.0.0.jar:na] … Caused by: java.security.KeyStoreException: Cannot overwrite own certificate at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:355) ~[sunjce_provider.jar:1.8.0_151] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_151] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na] ... 20 common frames omitted 2018-01-30 12:04:38,250 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert錯誤 #2:java.security.KeyStoreException:無法覆寫密鑰
2017-11-01 03:28:47,560 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mstore in key store : myTruststore in environment : dev at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] ... Caused by: java.security.KeyStoreException: Cannot overwrite secret key at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:354) ~[sunjce_provider.jar:1.8.0_144] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_144] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na] ... 20 common frames omitted 2017-11-01 03:28:47,562 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert使用下列管理 API 呼叫,取得上一個步驟中顯示的錯誤訊息所指定金鑰儲存區/信任儲存區的詳細資料:
curl -v "http://<management-IPaddress>:8080/v1/organizations/<org-name>/environments/<env-name>/keystores/myTruststore" -u <user>輸出內容範例:
{ "certs": [ "mycert", "mycert-new" ], "keys": [ "mycert" ], "name": "myTruststore" }範例輸出內容顯示信任儲存區 myTruststore 中有兩個憑證和一個金鑰。信任儲存庫通常不含金鑰。如果確實如此,建議您使用單一憑證和單一金鑰。
使用下列 API 取得這兩項憑證的詳細資料:
curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>檢查每個憑證的到期日,找出過期/較舊的憑證。
從信任儲存區「myTruststore」中刪除過期或不需要的憑證。
如果問題仍未解決,或您看到步驟 1 中未提及的任何錯誤,請參閱「必須收集診斷資訊」。
原因:過時的訊息處理器項目或無法連線的訊息處理器
診斷
- 如果 Edge UI 耗費很長時間,且無法建立追蹤工作階段,可能原因如下:
- 管理伺服器可能參照不存在 (過時) 的訊息處理器
- 訊息處理器已停止運作或無法連線
- 訊息處理器記憶體/CPU 使用率偏高
- 檢查管理伺服器記錄
/opt/apigee/var/log/edge-management-server/logs/system.log,看看建立追蹤/偵錯工作階段時是否有任何錯誤。 建立追蹤/偵錯工作階段時,您可能會看到類似 「server<UUID > is either not up or reachable」(伺服器<UUID> 未啟動或無法連線) 的錯誤訊息,如下所示:
2017-12-27 07:42:38,975 org:cocacola env:prod qtp2007599722-222063 INFO DISTRIBUTION - DebugSessionAPI.createDebugSession() : server 458b5910-2646-441c-a6e2-428b6d84e021 is either not up or reachable, skipping the server過一會兒後,可能還會出現「連線逾時」錯誤,如下所示:
2017-12-27 07:44:46.000 UTC org:cocacola env:prod qtp2007599722-222063 ERROR DISTRIBUTION - DebugSessionAPI.createDebugSession() : createDebugSession : Unable to connect to the server with UUID {}, skipping it458b5910-2646-441c-a6e2-428b6d84e021 org.apache.http.conn.HttpHostConnectException: Connect to 192.168.101.7:8080 [/192.168.101.7] failed: Connection timed out (Connection timed out) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:140) ~[httpclient-4.3.5.jar:4.3.5] at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318) ~[httpclient-4.3.5.jar:4.3.5] at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) ~[httpclient-4.3.5.jar:4.3.5] at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) ~[httpclient-4.3.5.jar:4.3.5] …<snipped> Caused by: java.net.ConnectException: Connection timed out (Connection timed out) at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_144] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_144] …<snipped>這兩個錯誤可能是由特定訊息處理器造成:
- 過時 (已不存在)
- 因故無法運作/無法連線
請視遇到的情況採取適當的解決方式。
解析度
情境 1:訊息處理器過時 (不存在)
使用下列管理 API 取得 Message Processor 清單:
curl -u <sysadmin> "http://<management-server-host>:8080/v1/servers?pod=<podName>®ions=<regionName>"記下與管理伺服器記錄檔中錯誤訊息提及的訊息處理器 UUID 相對應的 IP 位址或主機名稱 (上述診斷步驟 #3)。請使用下列任一方式,確認這些是否為有效的訊息處理者:
- 最新的私有雲拓撲設定圖
- 最新 Edge 伺服器 IP 位址 - 主機名稱對應表
如果確認這些是有效的訊息處理者,請前往情境 2:無法連線至訊息處理者。
使用下列管理 API 刪除過時 (不存在) 的訊息處理器:
從機構的環境取消註冊訊息處理器:
curl -X POST http://<management-server-host>:8080/v1/o/<orgName>/e/<envName>/servers -d "uuid={uuid}®ion=<regionName>&pod=<podName}&action=remove"取消註冊伺服器類型:
curl http://<management-server-host>:8080/v1/servers -X POST -d "type={message-processor}®ion=<regionName>&pod=<podName>&uuid=<uuid>&action=remove"刪除伺服器:
curl http://<management-ip>:8080/v1/servers/<uuid> -X DELETE
如果貴機構的其他環境也發生相同問題,請重複步驟 3。
情境 2:無法連線至訊息處理器
- 根據管理伺服器記錄檔中錯誤訊息的 UUID,判斷 IP 位址/主機名稱,然後登入每個訊息處理器。
重新啟動訊息處理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
再次檢查是否可以建立追蹤工作階段。如果問題仍未解決,請參閱「必須收集的診斷資訊」。
原因:資源使用率偏高
診斷
登入每個訊息處理器,檢查是否有任何資源(CPU、記憶體或負載) 的用量偏高。您可以在以 Unix 為基礎的作業系統上使用
top指令,取得訊息處理器程序的資源使用率資訊:top如果訊息處理器沒有資源使用率過高的問題,請前往「必須收集診斷資訊」。
如果訊息處理器 CPU 或記憶體用量偏高,訊息處理器可能無法及時回應管理伺服器。最終將無法建立追蹤工作階段。
解析度
使用下列指令重新啟動訊息處理器。這應該會降低 CPU 和記憶體用量:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart監控 API 呼叫,確認問題是否仍存在。
請與 Apigee Edge 支援團隊聯絡,並提供執行緒傾印、記憶體快照資料和訊息處理器記錄 (
/opt/apigee/var/log/edge-message-processor/logs/system.log)),協助他們調查 CPU/記憶體用量偏高的原因。
原因:API Proxy 未部署在一或多個訊息處理器上
在極少數情況下,API Proxy 可能不會部署在一或多個訊息處理器上。這主要是因為在部署特定 API Proxy 時,管理伺服器缺少傳送給訊息處理器的事件通知。在這種情況下,您也無法在 Edge UI 中建立追蹤工作階段。
診斷
登入每個訊息處理器,並使用下列指令檢查是否已部署 API Proxy 的特定修訂版本:
curl -v localhost:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions輸出內容範例:
上述指令的輸出內容會顯示修訂版本清單。舉例來說,如果部署的是修訂版本 12,您會看到下列輸出內容:
[ "12" ]
如果 API Proxy 的特定修訂版本未顯示為上述步驟 1 中提及的指令輸出內容,請按照下方的「解決方案」說明,重新啟動特定訊息處理器。
針對所有訊息處理器重複執行步驟 1 到 2。
解析度
重新啟動未部署特定 API Proxy 修訂版本的特定訊息處理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
原因:Edge UI 發生問題
診斷
- 檢查 Edge UI 記錄
/opt/apigee/var/log/edge-ui/application.log和/opt/apigee/var/log/edge-ui/edge-ui.log,看看是否有任何錯誤。 - 請與 Apigee Edge 支援團隊聯絡,並提供這些檔案,以利進一步調查。
必須收集診斷資訊
如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊。請聯絡 Apigee Edge 支援團隊並提供下列資訊:
指令輸出內容:
curl -v <management-server-host>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/<revision-number>/debugsessions -u <user>管理伺服器記錄
/opt/apigee/var/log/edge-management-server/logs/system.log.訊息處理器記錄
/opt/apigee/var/log/edge-message-processor/logs/system.log.從管理伺服器到訊息處理器的 telnet/nc 指令輸出內容:
telnet <MessageProcessor_IP> 8082 nc -vz <MessageProcessor_IP> 8082訊息處理器上以下 netstat 指令的輸出內容:
netstat -an > netstat.txt如果發現問題與 Edge UI 有關,請提供 Edge UI 記錄
/opt/apigee/var/log/edge-ui/application.log和/opt/apigee/var/log/edge-ui/edge-ui.log.詳細說明您已嘗試過 Playbook 中的哪些章節,以及任何有助於我們加快解決問題的其他深入分析資訊。