複数の axgroup が構成されているとカスタム ディメンションが表示されない

症状

Edge UI で、Statistics Collector ポリシーで作成したカスタム変数が、[Analytics Custom Reports] の [Custom Dimensions] に表示されません。

エラー メッセージ

edge-postgres-server システムログに、パスのない組織 / 環境の組み合わせごとに、再起動後に次のエラーが記録されます。

    KeeperErrorCode = NoNode for
    /organizations/<ORG>/environments/<ENV>/properties
    2018-03-29 16:14:48,980 pool-10-thread-2 ERROR ZOOKEEPER -
    ZooKeeperServiceImpl.getData() : Could not get data for path:
    /organizations//environments//properties, reason:
    KeeperErrorCode = NoNode for
    /organizations//environments//properties
    

考えられる原因

原因 説明 トラブルシューティング手順の適用対象
Zookeeper の properties のパスが、組織と環境の組に対して存在しない ZooKeeper のパス /organizations//environments//properties が存在せず、カスタム ディメンションが作成できない Edge Private Cloud のお客様

原因: ZooKeeper の properties のパスが、組織と環境の組に対して存在しない

診断

API の呼び出しによって、組織と環境の組に対する Analytics が有効になり、/organizations//environments//properties が ZooKeeper のツリーに設定されます。この API が失敗すると、edge-postgres-server コンポーネントはカスタム ディメンションを作成できず、次のエラーが system.log に記録されます。

    KeeperErrorCode = NoNode for
    /organizations/example/environments/prod/properties
    2018-03-29 16:14:48,980 pool-10-thread-2 ERROR ZOOKEEPER -
    ZooKeeperServiceImpl.getData() : Could not get data for path:
    /organizations/example/environments/prod/properties, reason:
    KeeperErrorCode = NoNode for
    /organizations/digi/environments/sandbox/properties
    

通常、同じ postgres-server UUID を使う Analytics グループが複数あるところに、組織がオンボーディングされるとき発生します。Analytics グループの数を確認するには、次の API を呼び出します。

    curl -u username:password "http://management-server-host:8080/v1/analytics/groups/ax"
    

この API が複数のグループを返す場合、ほとんどの場合、これが問題の原因だと考えられます。次の例では、ハイフンの有無に違いがあるだけの 2 つのグループ axgroup-001axgroup001 があります。

[ {
      "name" : "axgroup-001",
      "properties" : {
      },
      "scopes" : [ "VALIDATE~test" ],
      "uuids" : {
        "qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
        "postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ]
      },
      "consumer-groups" : [ {
        "name" : "consumer-group-001",
        "consumers" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
        "datastores" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ],
        "properties" : {
        }
      } ],
      "data-processors" : {
      }
    }, {
      "name" : "axgroup001",
      "properties" : {
      },
      "scopes" : [ "example~prod" ],
      "uuids" : {
        "qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
        "postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ]
      },
      "consumer-groups" : [ {
        "name" : "consumer-group-001",
        "consumers" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
        "datastores" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ],
        "properties" : {
        }
      } ],
      "data-processors" : {
      }
    

具体的には、それぞれの axgroup に同じ postgres-server UUID を構成している場合にこの問題が発生します。次のコマンドで簡単に確認できます。

    curl -u username:password "http://management-server-host:8080/v1/analytics/groups/ax"|grep -B7 "postgres-server"
    

次の出力サンプルでは、同じ postgres-server UUID を使っていないか、簡単に比較できます。

    {  "name" : "axgroup-001",  "properties" : {  },  "scopes" : [ "VALIDATE~test" ],
    "uuids" : {    "qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
    "postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ]--
    "name" : "axgroup001",  "properties" : {  },  "scopes" : [ "myorg~prod" ],
    "uuids" : {    "qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
    "aries-datastore" : [ ],    "postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ],
    

解決策

同じ PostgreSQL サーバー群を 2 つの axgroups に割り当てることはできません。最も簡単な解決方法は、一方の axgroup から postgres サーバーの情報を削除し、もう一方のグループにすべてのスコープ(組織と環境の組)を割り当てることです。そのための手順は次のとおりです。

  1. Analytics グループ内の Analytics コンポーネントの追加と削除の手順に従って、2 つの axgroup のうちの 1 つから postgres サーバーのコンポーネントを削除します。本番環境用以外のスコープにだけ問題がある場合、この手順では、本番環境用のスコープを持たない axgroup を選択します。それ以外の場合には、スコープ数が最も少ない axgroup を選択します。
  2. postgres サーバーがなくなった axgroup からすべてのスコープを削除し、その axgroup からカスタム ディメンションの問題があるスコープを削除します。上の例の axgroup-001 が使いたいグループだとすると、次のコマンドで、myorg 組織と prod 環境のスコープを削除する必要があります。
        curl -u username:password -X DELETE 'http://management-server-host:8080/v1/analytics/groups/ax/axgroup001/scopes?org=myorg&env=prod'
        
  3. 手順に従って、環境の Analytics を有効にします
  4. 次のコマンドで、postgres マスターノードの edge-postgres-server コンポーネントと、インストール済みの edge-qpid-server コンポーネントを再起動します。
         /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
        
         /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
        
  5. 上のエラー メッセージのセクションで記録されていたエラーが、Postgres サーバーのログファイル /opt/apigee/var/log/edge-postgres-server/logs/system.log に記録されていないことを確認します。
  6. Edge UI にカスタム ディメンションが表示されていることを確認します。

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

診断情報の収集が必要な場合

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

  1. edge-postgres-server の最後の再起動以降に関する /opt/apigee/var/log/edge-postgres-server/logs/system.log
  2. 次のコマンドで管理 API を呼び出したときの出力
        curl -u username:password "http://management-server-host:8080/v1/analytics/groups/ax"
        
  3. 次のコマンドで取得した ZooKeeper ツリーの出力
        /opt/apigee/apigee-zookeeper/contrib/zk-tree.sh > zktree-output.txt