無法建立追蹤工作階段

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

問題

使用者無法在 Edge UI 中建立追蹤工作階段。

錯誤訊息

您會在 Edge UI 中收到錯誤訊息,如下所示:

Error creating trace session for API proxy <api proxy name>, revision <revision number>, environment <environment name>.
Failed to create DebugSession <session number> 

以下是在 Edge UI 中觀察到的範例錯誤訊息的螢幕截圖:

可能原因

以下列舉幾個可能造成這個錯誤的原因:

原因 說明 疑難排解操作說明
網路連線問題 網路連線問題或防火牆規則導致管理伺服器與訊息處理器之間的通訊失敗。 邊緣私有雲使用者
訊息處理器未載入環境 由於發生錯誤,系統尚未在訊息處理器 () 上載入您要啟用追蹤記錄的特定環境。
訊息處理器項目過時 管理伺服器參照不存在 (過時) 訊息處理器。
無法連線至訊息處理器 訊息處理器已停止或無法連線。
高資源使用率問題 訊息處理器的資源 (CPU、記憶體或負載) 使用率偏高。
一或多個訊息處理器未部署 API Proxy 部署期間缺少事件通知,因此無法將 API Proxy 部署至一或多個訊息處理器。
Edge UI 問題 發生錯誤,Edge UI 無法建立追蹤記錄工作階段。

常見診斷步驟

  1. 執行這個 Management 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 無法建立追蹤工作階段。請前往「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:

      telnet <MessageProcessor_IP> 8082
      
    2. 如果無法使用 telnet,請依照下列步驟使用 netcat 檢查連線:

      nc -vz <MessageProcessor_IP> 8082
      
    3. 如果收到「Connection Refused」回應或「連線逾時」,然後繼續進行下一個步驟。

  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. 檢查現在是否能在 UI 中啟動追蹤工作階段。如果已沒有發現問題,請略過下列步驟。

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

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

    iptables -L -n
    
  10. 如果未針對通訊埠 8082 設定防火牆規則,請移至「High Resource Utilization Issue」(高資源使用率問題)

  11. 如果通訊埠 8082 設有防火牆規則,請前往下方的「解析度」部分。

解析度

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

如果問題仍未解決,請參閱「Must Gather 診斷資訊」。

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

診斷

  1. 檢查管理伺服器記錄 /opt/apigee/var/log/edge-management-server/logs/system.log,確認追蹤/偵錯工作階段建立期間是否有任何錯誤。
  2. 您可能會看到以下錯誤訊息:「MP 缺少有效的回應」之類的錯誤訊息,如下所示:

    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
    

    輸出範例:

    在上述指令的輸出內容中,您會看見屬於特定機構且已載入訊息處理器的環境清單。舉例來說,如果訊息處理器載入了 preprodtest 環境,您會看到如下輸出內容:

    [ "preprod"、"test"]

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

  8. 如果特定環境未列於上述指令中,請當做上述指令的一部分,然後檢查訊息處理器的 /opt/apigee/var/log/edge-message-processor/logs/system.log/opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.log,在載入環境期間是否有任何錯誤。

  9. 可能會有許多不同的錯誤,可能導致「訊息處理器」無法載入環境。解決方法會因發生錯誤的情況而異。

解析度

有許多原因導致訊息處理器無法載入環境。本節說明可能導致這項問題的幾個可能原因,並說明如何解決問題。

  1. 如果訊息處理者記錄顯示下列其中一種錯誤訊息,就表示您在指定環境中新增至指定 KeyStore/truststore 的憑證/金鑰有問題。

    錯誤 #1:java.security.KeyStoreException:無法覆寫自己的憑證

    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. 如要取得上一個步驟錯誤訊息中指定的 KeyStore/truststore 詳細資料,請使用下列 Management 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. 您可能會看到類似「伺服器 <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. 使用下列 Management API 取得訊息處理器清單:

    curl -u <sysadmin> "http://<management-server-host>:8080/v1/servers?pod=<podName>&regions=<regionName>"
    
  2. 根據「管理伺服器」記錄中的錯誤訊息 (上方「診斷工具」中的步驟 3) 的錯誤訊息,記下與訊息處理器 UUID (秒) 對應的 IP 位址或主機名稱。請使用下列其中一種方式驗證這些是有效的訊息處理器:

    1. 最新 Private Cloud 拓撲設定圖表
    2. 最新 Edge Server IP 位址 - 主機名稱對應表

    如果找到有效的訊息處理器,請移至「情況 2:無法連上訊息處理器 (s)」。

  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
    
    

請重新檢查是否能建立追蹤工作階段。如果問題仍未解決,請前往「Must Gather Diagnostic Information

原因:高度資源使用率問題

診斷

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

    top
    
  2. 如果訊息處理器的資源使用率未達高,請前往「Must Gather Diagnostic Information」

  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 修訂版本,就不是這個問題的原因。前往「Must Gather Diagnostic Information」

解析度

  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 支援團隊聯絡,並提供這些檔案來進一步調查。

Must Gather 診斷資訊

按照上述說明操作後,如果問題仍未解決,請收集下列診斷資訊。請與 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. Management Server 對訊息處理器的 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. 詳細說明已嘗試在本教戰手冊中的哪些部分,以及任何有助於我們快速解決問題的深入分析。