トレース セッションを作成できない

症状

ユーザーが 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 に表示されるエラー メッセージのサンプルです。

考えられる原因

このエラーの原因としては、次のような原因が考えられます。

原因 説明 トラブルシューティング手順の適用対象
ネットワーク接続の問題 ネットワーク接続の問題またはファイアウォール ルールが原因で、Management Server と Message Processor の間で通信障害が発生しています。 Edge Private Cloud ユーザー
環境が Message Processor に読み込まれていない エラーのため、特定の環境(トレースを有効にしようとしている環境)が Message Processor に読み込まれていません。
Message Processor のエントリが最新でない Management Server が、存在しない(古い)Message Processor を参照しています。
Message Processor に接続できない Message Processor が停止しているか、接続できません。
リソースの使用率が高い Message Processor のリソース(CPU、メモリまたはロード)の使用率が高くなっています。
API プロキシが Message Processor にデプロイされていない デプロイ時にイベント通知がないため、API プロキシが Message Processor にデプロイされていません。
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. 成功のレスポンスが返された場合、管理 API を使用してトレース セッションを作成できます。ただし、Edge UI では問題が発生し、UI でトレース セッションが作成できないことがあります。Edge UI の問題に進みます。

原因: ネットワーク接続の問題

診断

  1. Management Server ログ /opt/apigee/var/log/edge-management-server/logs/system.log で、トレース / デバッグ セッションでエラーが発生していないかどうか確認します。

    Management Server ログのサンプルエラー

    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. 上の例では、Management Server がポート 8082 で Message Processor に接続を試みたときに "Connection refused" エラーが発生しています。このため、Management Server はトレース セッションを作成できません。

  3. ネットワーク接続に関連したエラーまたは上の例に類似したエラーが発生していない場合は、環境が Message Processor に読み込まれていないに進みます。

  4. ネットワーク接続に関連するエラーまたは上の例に類似したエラーが確認された場合は、次の操作を行います。

  5. 以下の手順に沿って、Management Server から Message Processor のポート 8082 への接続テストを行います。

    1. telnet を使用します。

      telnet <MessageProcessor_IP> 8082
          
    2. telnet を使用できない場合は、次のように netcat で接続を確認します。

      nc -vz <MessageProcessor_IP> 8082
          
    3. "Connection Refused" または "Connection timed out" というレスポンスが返された場合は、次の手順に進みます。

  6. エラー メッセージにある IP アドレスの Message Processor にログインして、次の操作を行います。

    1. Message Processor がポート 8082 で待機しているかどうか確認します。

      netstat -an | grep LISTEN | grep 8082
          
    2. Message Processor がポート 8082 で待機している場合は、手順 7 に進みます。

    3. Message Processor がポート 8082 で待機していない場合は、次のコマンドで Message Processor を再起動します。

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
          
    4. 次のコマンドを使用して、Message Processor が完全に起動するまで待機します。

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready
          
    5. Message Processor が起動したら、Message Processor がポート 8082 で待機しているかどうか再度確認します。

    6. Message Processor がポート 8082 で待機している場合は、手順 7 に進みます。

  7. UI でトレース セッションを開始できるかどうか確認します。問題が解決された場合は、以降の手順をスキップします。

  8. Message Processor が起動し、ポート 8082 で待機していても、Management Server などの他のサーバーから接続できない場合は、ファイアウォールで外部接続がブロックされている可能性があります。

  9. 適切なコマンドを使用して、ファイアウォール ルールを確認します。たとえば、iptables コマンドを実行して、システムに定義されているファイアウォール ルールの一覧を取得します。

    iptables -L -n
        
  10. ポート 8082 にファイアウォール ルールが設定されていない場合は、リソースの使用率が高いに進みます。

  11. ポート 8082 にファイアウォール ルールが設定されている場合は、次の「解決策」に進みます。

解決策

  1. ポート 8082 で外部サーバーとの送受信を許可するように、ネットワーク管理者に依頼します。

問題が解決しない場合は、診断情報の収集に進みます。

原因: 環境が Message Processor に読み込まれていない

診断

  1. Management Server ログ /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}
        

    このエラーは、なんらかの理由で Message Processor が Management Server に応答していないことを意味します。

  3. 上の例のようなエラーが発生していない場合は、Message Processor のエントリが最新でないに進みます。

  4. 上の例のようなエラーが確認された場合は、次の操作を行います。

  5. このエラーの原因の 1 つとして、トレース セッションを作成する環境が Message Processor に読み込まれていないことが考えられます。

  6. Message Processor にログインして次のコマンドを実行し、トレース セッションを作成する環境が Message Processor に読み込まれているかどうか確認します。

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

    出力例:

    上のコマンドを実行すると、Message Processor に読み込まれた組織に属する環境のリストが出力されます。たとえば、preprod 環境と test 環境が Message Processor に読み込まれている場合、出力は次のようになります。

    [ "preprod", "test" ]

  7. トレース セッションを作成する環境(たとえば、"dev")が上記のコマンドの出力に含まれている場合は、Message Processor のエントリが最新でないに進みます。

  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. Message Processor に環境が読み込まれていない原因は 1 つだけではありません。発生したエラーによって解決策も異なります。

解決策

環境が Message Processor に読み込まれない原因は 1 つとは限りません。このセクションでは、この問題で考えられる原因とその解決方法を説明します。

  1. Message Processor ログに次のいずれかのエラーが記録されている場合、環境のキーストア / トラストストアに追加された証明書 / 鍵に問題があります。

    エラー 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. 次の 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 に 2 つの証明書と 1 つの鍵が格納されていることがわかります。通常、トラストストアに鍵はありません。鍵がある場合は、1 つの証明書と 1 の鍵にする必要があります。

  4. 次の API を使用して、2 つの証明書の詳細を確認します。

    curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>
        
  5. 証明書の有効期限を調べて、期限切れの証明書や古い証明書がないか確認します。

  6. 期限切れの証明書または不要な証明書をトラストストア "myTruststore" から削除します。

問題が解決しない場合、または上の手順 1 以外のエラーが発生している場合は、診断情報の収集に進みます。

原因: Message Processor のエントリが最新でないか、Message Processor に接続できない

診断

  1. Edge UI でトレース セッションの作成に時間がかかり、作成に失敗する場合は、次のような原因が考えられます。
    1. Management Server が、存在しない(古い)Message Processor を参照している。
    2. Message Processor が停止しているか、接続できない。
    3. Message Processor のメモリ / CPU 使用率が高くなっている。
  2. Management Server ログ /opt/apigee/var/log/edge-management-server/logs/system.log で、トレース / デバッグ セッションの作成時にエラーが発生しているかどうか確認します。
  3. トレース / デバッグ セッションの作成時に "server <UUID> is either not up or reachable" のようなエラー メッセージが表示される場合があります。たとえば、次のようなメッセージが表示されます。

    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
        

    この後、しばらくして "Connection timed out" エラーが発生することがあります。

    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. この 2 つのエラーは、Message Processor の次の問題が原因で発生している可能性があります。

    1. 最新の状態でない(あるいは存在していない)
    2. 停止している / なんらかの理由で接続できない
  5. 見つかった問題に応じて適切な解決策を行ってください。

解決策

シナリオ 1 : Message Processor が古い(存在しない)

  1. 次の管理 API を使用して、Message Processor のリストを取得します。

    curl -u <sysadmin> "http://<management-server-host>:8080/v1/servers?pod=<podName>&regions=<regionName>"
        
  2. Management Server ログでエラー メッセージ(上の「診断」の手順 3)を探し、そのメッセージにある Message Processor の UUID に対応する IP アドレスまたはホスト名をメモします。次のいずれかの方法で、これらが有効な Message Processor かどうか確認します。

    1. 最新の Private Cloud トポロジの設定図
    2. Edge Server の IP アドレスとホスト名の最新のマッピング テーブル

    有効な Message Processor であることが確認できた場合は、シナリオ 2: Message Processor に接続できないに進みます。

  3. 次の管理 API を使用して、古い(存在しない)Message Processor を削除します。

    1. 組織の環境から Message Processor の登録を解除します。

      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: Message Processor に接続できない

  1. Management Server ログのエラー メッセージにある UUID から IP アドレス / ホスト名を特定し、Message Processor にログインします。
  2. Message Processor を再起動します。

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

トレース セッションが作成できるかどうか再度確認します。問題が解決しない場合は、診断情報の収集に進みます

原因: リソースの使用率が高い

診断

  1. Message Processor にログインして、リソース(CPU、メモリ、ロード)の使用率が高いかどうか確認します。Unix ベースのオペレーティング システムでは、top コマンドを使用すると、Message Processor プロセスによるリソースの使用状況を確認できます。

    top
        
  2. Message Processor でリソースの使用率が高くなっていない場合は、診断情報の収集に進みます。

  3. Message Processor で CPU またはメモリの使用率が高い場合、Message Processor から Management Server へのレスポンスが遅くなる可能性があります。最終的にはトレース セッションが作成できなくなります。

    1. Message Processor の CPU 使用率が高い場合、次のコマンドを 30 秒ごとに実行し、3 つのスレッドダンプを生成します。

      sudo <JAVA_HOME>/bin/jstack -l <pid> > <filename>
          
    2. Message Processor のメモリ使用率が高い場合は、次のコマンドを使用してヒープダンプを生成します。

      sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>
      
          
    3. 解決策に進みます。

解決策

  1. 次のコマンドを使用して Message Processor を再起動します。これにより、CPU とメモリの使用率が下がります。

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
        
  2. API 呼び出しをモニタリングし、まだ問題が存在するかどうか確認します。

  3. CPU / メモリの使用率が高い原因を調査できるように、Apigee サポートにスレッドダンプ、ヒープダンプ、Message Processor のログ(/opt/apigee/var/log/edge-message-processor/logs/system.log) を提供します。

原因: API プロキシが Message Processor にデプロイされていない

まれですが、API プロキシが 1 つ以上の Message Processor にデプロイされていない場合があります。この問題は、API プロキシのデプロイで管理サーバーから Message Processor にイベント通知が送信されていないことが原因で発生します。この問題が発生した場合、Edge UI でトレース セッションを作成できません。

診断

  1. Message Processor にログインして次のコマンドを実行し、API プロキシの特定のリビジョンがデプロイされているかどうかを確認します。

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

    出力例:

    上のコマンドを実行すると、リビジョンのリストが出力されます。たとえば、リビジョン 12 がデプロイされている場合、出力は次のようになります。

    [ "12" ]

  2. 上の手順 1 で実行したコマンドの出力に API プロキシの特定のリビジョンが表示されていない場合、以下の解決策で説明するように Message Processor を再起動します。

  3. すべての Message Processor に手順 1 と 2 を繰り返します。

  4. API プロキシの特定のリビジョンがすべての Message Processor にデプロイされている場合、これは問題の原因ではありません。診断情報の収集に進みます。

解決策

  1. API プロキシの特定のリビジョンがデプロイされていない Message Processor を再起動します。

    /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 サポートに連絡して、これらのファイルを提供し、詳しい調査を依頼してください。

診断情報の収集

上記の手順でも問題が解決されない場合は、次の診断情報を収集する必要があります。Apigee サポートに連絡して、収集した情報を提供してください。

  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. Management Server ログ

    /opt/apigee/var/log/edge-management-server/logs/system.log.
        
  3. Message Processor ログ

    /opt/apigee/var/log/edge-message-processor/logs/system.log.
        
  4. Management Server から Message Processor への telnet / nc コマンドの出力:

    telnet <MessageProcessor_IP> 8082
        nc -vz <MessageProcessor_IP> 8082
        
  5. Message Processor での次の 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. このプレイブックで試したセクションや詳しい分析情報を提供していただけると、迅速な問題解決に役立ちます。