無法建立追蹤工作階段

您目前查看的是 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 發生錯誤,因此無法建立追蹤工作階段。

常見診斷步驟

  1. 執行這項管理 API:

    curl -v <management-server-host>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/<revision-number>/debugsessions -u <user>
    
  2. 如果發生任何錯誤,請記下錯誤訊息。前往「網路連線問題」。

  3. 如果收到成功回應,表示可以透過 Management API 建立追蹤工作階段。不過,Edge UI 可能有問題,導致無法在 UI 中建立追蹤工作階段。移至「Issue with Edge UI」。

原因:網路連線問題

診斷

  1. 檢查管理伺服器記錄 /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>
    
  2. 上述範例錯誤顯示,當管理伺服器嘗試連線至通訊埠 8082 上的訊息處理器時,會收到「拒絕連線」錯誤。因此管理伺服器無法建立追蹤工作階段。

  3. 如果沒有看到任何與網路連線相關的錯誤,或類似於上述範例的錯誤,請前往「訊息處理器未載入環境」。

  4. 如果發現網路連線相關錯誤,或類似上述範例的錯誤,請按照下列步驟操作。

  5. 按照下列步驟,測試管理伺服器與訊息處理器在通訊埠 8082 的連線:

    1. 如果可以使用 Telnet,請按照下列步驟操作:

      telnet <MessageProcessor_IP> 8082
      
    2. 如果無法使用 Telnet,請使用 netcat 檢查連線,方法如下:

      nc -vz <MessageProcessor_IP> 8082
      
    3. 如果收到「連線遭拒」或「連線逾時」的回應,請繼續下一個步驟。

  6. 使用顯示錯誤的對應 IP 位址登入每個訊息處理器,然後執行下列步驟:

    1. 確認訊息處理器是否正在監聽通訊埠 8082:

      netstat -an | grep LISTEN | grep 8082
      
    2. 如果訊息處理器正在監聽通訊埠 8082,請前往步驟 7。

    3. 如果訊息處理器未監聽通訊埠 8082,請使用下列指令重新啟動訊息處理器:

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. 等待訊息處理器完全啟動,請使用下列指令:

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready
      
    5. 訊息處理器啟動後,請再次檢查訊息處理器是否正在監聽通訊埠 8082。

    6. 如果訊息處理器正在監聽通訊埠 8082,請前往步驟 7。

  7. 確認您現在是否能在使用者介面中啟動追蹤工作階段。如果問題不再發生,請略過下列步驟。

  8. 如果訊息處理器正在執行並監聽通訊埠 8082,但您仍無法從管理伺服器等其他伺服器連線,可能是防火牆封鎖了外部連線。

  9. 使用適當的指令檢查防火牆規則。舉例來說,您可以執行 iptables 指令,列出系統上定義的所有防火牆規則:

    iptables -L -n
    
  10. 如果通訊埠 8082 沒有設定防火牆規則,請前往「資源用量過高問題」。

  11. 如果通訊埠 8082 上有任何防火牆規則設定,請前往下方的「解決方案」一節。

解決方法

  1. 請與網路管理員合作,允許外部伺服器在通訊埠 8082 上傳入/傳出流量。

如果問題仍未解決,請參閱「必須收集的診斷資訊」。

原因:訊息處理器未載入環境

診斷

  1. 檢查管理伺服器記錄 /opt/apigee/var/log/edge-management-server/logs/system.log,看看建立追蹤/偵錯工作階段時是否有任何錯誤。
  2. 建立追蹤/偵錯工作階段時,您可能會看到「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}
    

    這個錯誤表示訊息處理器因不明原因未回應管理伺服器。

  3. 如果沒有看到與上例類似的錯誤,請前往「過時的訊息處理工具項目」。

  4. 如果發現類似上述範例的錯誤,請按照下列步驟操作。

  5. 造成這項錯誤最可能的原因是,您嘗試建立追蹤工作階段的環境未載入訊息處理器。

  6. 登入每個訊息處理器,然後使用下列指令,檢查您要建立追蹤工作階段的特定環境是否已載入訊息處理器:

    curl -s http://localhost:8082/v1/runtime/organizations/<org-name>/environments
    

    輸出內容範例:

    您會在上述指令的輸出內容中,看到載入至訊息處理器的特定機構環境清單。舉例來說,如果 preprod 和 test 環境載入訊息處理器,輸出內容會如下所示:

    [ "preprod", "test" ]

  7. 如果上述指令列出您要建立追蹤工作階段的特定環境 (例如「dev」),請前往「過時的訊息處理器項目」。

  8. 如果特定環境 (例如「dev」) 未列為上述指令的一部分,請檢查 Message Processor 上的 /opt/apigee/var/log/edge-message-processor/logs/system.log 和 /opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.log,確認載入環境時是否有任何錯誤。

  9. 導致訊息處理器無法載入環境的錯誤有很多種。解決方式取決於發生的錯誤。

解析度

訊息處理器可能因多種原因而無法載入環境。本節將說明可能導致這個問題的幾個原因,以及如何解決問題。

  1. 如果在 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 
    
  2. 使用下列管理 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" 
    }
    
  3. 範例輸出內容顯示信任儲存區 myTruststore 中有兩個憑證和一個金鑰。信任儲存庫通常不含金鑰。如果確實如此,建議您使用單一憑證和單一金鑰。

  4. 使用下列 API 取得這兩項憑證的詳細資料:

    curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>
    
  5. 檢查每個憑證的到期日,找出過期/較舊的憑證。

  6. 從信任儲存區「myTruststore」中刪除過期或不需要的憑證。

如果問題仍未解決,或您看到步驟 1 中未提及的任何錯誤,請參閱「必須收集診斷資訊」。

原因:過時的訊息處理器項目或無法連線的訊息處理器

診斷

  1. 如果 Edge UI 耗費很長時間,且無法建立追蹤工作階段,可能原因如下:
    1. 管理伺服器可能參照不存在 (過時) 的訊息處理器
    2. 訊息處理器已停止運作或無法連線
    3. 訊息處理器記憶體/CPU 使用率偏高
  2. 檢查管理伺服器記錄 /opt/apigee/var/log/edge-management-server/logs/system.log,看看建立追蹤/偵錯工作階段時是否有任何錯誤。
  3. 建立追蹤/偵錯工作階段時,您可能會看到類似 「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>
    
  4. 這兩個錯誤可能是由特定訊息處理器造成:

    1. 過時 (已不存在)
    2. 因故無法運作/無法連線
  5. 請視遇到的情況採取適當的解決方式。

解析度

情境 1:訊息處理器過時 (不存在)

  1. 使用下列管理 API 取得 Message Processor 清單:

    curl -u <sysadmin> "http://<management-server-host>:8080/v1/servers?pod=<podName>&regions=<regionName>"
    
  2. 記下與管理伺服器記錄檔中錯誤訊息提及的訊息處理器 UUID 相對應的 IP 位址或主機名稱 (上述診斷步驟 #3)。請使用下列任一方式,確認這些是否為有效的訊息處理者:

    1. 最新的私有雲拓撲設定圖
    2. 最新 Edge 伺服器 IP 位址 - 主機名稱對應表

    如果確認這些是有效的訊息處理者,請前往情境 2:無法連線至訊息處理者。

  3. 使用下列管理 API 刪除過時 (不存在) 的訊息處理器:

    1. 從機構的環境取消註冊訊息處理器:

      curl -X POST http://<management-server-host>:8080/v1/o/<orgName>/e/<envName>/servers -d "uuid={uuid}&region=<regionName>&pod=<podName}&action=remove" 
      
    2. 取消註冊伺服器類型:

      curl http://<management-server-host>:8080/v1/servers -X POST -d "type={message-processor}&region=<regionName>&pod=<podName>&uuid=<uuid>&action=remove"
      
    3. 刪除伺服器:

      curl http://<management-ip>:8080/v1/servers/<uuid> -X DELETE
      
  4. 如果貴機構的其他環境也發生相同問題,請重複步驟 3。

情境 2:無法連線至訊息處理器

  1. 根據管理伺服器記錄檔中錯誤訊息的 UUID,判斷 IP 位址/主機名稱,然後登入每個訊息處理器。
  2. 重新啟動訊息處理器:

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
    

再次檢查是否可以建立追蹤工作階段。如果問題仍未解決,請參閱「必須收集的診斷資訊」。

原因:資源使用率偏高

診斷

  1. 登入每個訊息處理器,檢查是否有任何資源(CPU、記憶體或負載) 的用量偏高。您可以在以 Unix 為基礎的作業系統上使用 top 指令,取得訊息處理器程序的資源使用率資訊:

    top
    
  2. 如果訊息處理器沒有資源使用率過高的問題,請前往「必須收集診斷資訊」。

  3. 如果訊息處理器 CPU 或記憶體用量偏高,訊息處理器可能無法及時回應管理伺服器。最終將無法建立追蹤工作階段。

    1. 如果任何訊息處理器的 CPU 使用率偏高,請使用下列指令,每 30 秒產生三份執行緒傾印:

      sudo <JAVA_HOME>/bin/jstack -l <pid> > <filename>
      
    2. 如果任何訊息處理器的記憶體用量偏高,請使用下列指令產生記憶體快照資料:

      sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>
      
      
    3. 移至「解決方案」。

解析度

  1. 使用下列指令重新啟動訊息處理器。這應該會降低 CPU 和記憶體用量:

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  2. 監控 API 呼叫,確認問題是否仍存在。

  3. 請與 Apigee Edge 支援團隊聯絡,並提供執行緒傾印、記憶體快照資料和訊息處理器記錄 (/opt/apigee/var/log/edge-message-processor/logs/system.log)),協助他們調查 CPU/記憶體用量偏高的原因。

原因:API Proxy 未部署在一或多個訊息處理器上

在極少數情況下,API Proxy 可能不會部署在一或多個訊息處理器上。這主要是因為在部署特定 API Proxy 時,管理伺服器缺少傳送給訊息處理器的事件通知。在這種情況下,您也無法在 Edge UI 中建立追蹤工作階段。

診斷

  1. 登入每個訊息處理器,並使用下列指令檢查是否已部署 API Proxy 的特定修訂版本:

    curl -v localhost:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
    

    輸出內容範例:

    上述指令的輸出內容會顯示修訂版本清單。舉例來說,如果部署的是修訂版本 12,您會看到下列輸出內容:

    [ "12" ]

  2. 如果 API Proxy 的特定修訂版本未顯示為上述步驟 1 中提及的指令輸出內容,請按照下方的「解決方案」說明,重新啟動特定訊息處理器。

  3. 針對所有訊息處理器重複執行步驟 1 到 2。

  4. 如果 API Proxy 的特定修訂版本已部署在所有訊息處理器上,則這不是造成問題的原因。請前往「必須收集診斷資訊」。

解析度

  1. 重新啟動未部署特定 API Proxy 修訂版本的特定訊息處理器:

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
    

原因:Edge UI 發生問題

診斷

  1. 檢查 Edge UI 記錄 /opt/apigee/var/log/edge-ui/application.log和 /opt/apigee/var/log/edge-ui/edge-ui.log,看看是否有任何錯誤。
  2. 請與 Apigee Edge 支援團隊聯絡,並提供這些檔案,以利進一步調查。

必須收集診斷資訊

如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊。請聯絡 Apigee Edge 支援團隊並提供下列資訊:

  1. 指令輸出內容:

    curl -v <management-server-host>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/<revision-number>/debugsessions -u <user>
    
  2. 管理伺服器記錄

    /opt/apigee/var/log/edge-management-server/logs/system.log.
    
  3. 訊息處理器記錄

    /opt/apigee/var/log/edge-message-processor/logs/system.log.
    
  4. 從管理伺服器到訊息處理器的 telnet/nc 指令輸出內容:

    telnet <MessageProcessor_IP> 8082
    nc -vz <MessageProcessor_IP> 8082
    
  5. 訊息處理器上以下 netstat 指令的輸出內容:

    netstat -an > netstat.txt
    
  6. 如果發現問題與 Edge UI 有關,請提供 Edge UI 記錄 /opt/apigee/var/log/edge-ui/application.log 和 /opt/apigee/var/log/edge-ui/edge-ui.log.

  7. 詳細說明您已嘗試過 Playbook 中的哪些章節,以及任何有助於我們加快解決問題的其他深入分析資訊。