モニタリング方法

このドキュメントでは、Apigee Edge for Private Cloud のオンプレミス デプロイでサポートされているコンポーネントのモニタリング方法について説明します。

概要

Edge では、サービスの詳細を取得したり、そのステータスを確認したりするために、いくつかの方法がサポートされています。次の表に、対象サービスで実行できるチェックの種類を示します。

Mgmt API
コンポーネント メモリ使用量 [JMX*] Service Check(サービスの確認) ユーザー/組織/ デプロイ ステータス axstatus データベース チェック apigee-service のステータス apigee-monit**
Management Server
Message Processor
ルーター
Qpid
Postgres
詳細 詳細 詳細 詳細 詳細 詳細 詳細

* JMX を使用する前に、JMX を有効にするの説明に従って JMX を有効にする必要があります。

** apigee-monit サービスは、コンポーネントが起動しているかどうかを確認し、起動していない場合は再起動を試みます。詳細については、apigee-monit による自己修復をご覧ください。

ポートと構成ファイルのモニタリング

各コンポーネントは、さまざまなポートでの Java Management Extensions(JMX)と Management API のモニタリング呼び出しをサポートしています。次の表に、サーバーの種類ごとの JMX ポートと Management API ポート、構成ファイルの場所を示します。

コンポーネント JMX ポート Management API ポート 構成ファイルの場所
管理サーバー 1099 8080 $APIGEE_ROOT/customer/application/management-server.properties
Message Processor 1101 8082 $APIGEE_ROOT/customer/application/message-processor.properties
ルーター 1100 8081 $APIGEE_ROOT/customer/application/router.properties
Qpid 1102 8083 $APIGEE_ROOT/customer/application/qpid-server.properties
Postgres 1103 8084 $APIGEE_ROOT/customer/application/postgres-server.properties

JMX を使用してコンポーネントをモニタリングする

以降のセクションでは、JMX を使用して Edge コンポーネントをモニタリングする方法について説明します。

JMX を有効にする

認証または SSL ベースの通信なしで JMX を有効にするには、次の手順を行います。注: 本番環境システムでは、セキュリティを確保するために、暗号化された認証と SSL の両方を有効にする必要があります。

  1. 適切な構成ファイルを編集します( 構成ファイルのリファレンスをご覧ください)。構成ファイルが存在しない場合は作成します。
    conf_system_jmxremote_enable=true
  2. 構成ファイルを保存して、apigee:apigee が所有していることを確認します。
  3. 適切な Edge コンポーネントを再起動します。
    apigee-service edge-management-server restart

JMX を無効にするには、conf_system_jmxremote_enable プロパティを削除するか、値を false に変更します。適切な Edge コンポーネントを再起動します。

JMX での認証

Edge for Private Cloud は、ファイルに保存されている詳細情報を使用したパスワード ベースの認証をサポートしています。セキュリティを強化するために、パスワードをハッシュとして保存できます。

  1. Edge-* コンポーネントで JMX 認証を有効にするには、適切な構成ファイルを編集します( 構成ファイルのリファレンスをご覧ください)。構成ファイルが存在しない場合は作成します。
    conf_system_jmxremote_enable=true
    conf_system_jmxremote_authenticate=true
    conf_system_jmxremote_encrypted_auth=true
    conf_system_jmxremote_access_file=/opt/apigee/customer/application/management-server/jmxremote.access
    conf_system_jmxremote_password_file=/opt/apigee/customer/application/management-server/jmxremote.password
    構成ファイルを保存して、apigee:apigee が所有していることを確認します。
  2. パスワードの SHA256 ハッシュを作成します。
    echo -n '' | openssl dgst -sha256
  3. JMX ユーザー認証情報を含む jmxremote.password ファイルを作成します。
    1. 次のファイルを $JAVA_HOME ディレクトリから /opt/apigee/customer/application/<component>/ ディレクトリにコピーします。
      cp ${JAVA_HOME}/lib/management/jmxremote.password.template $APIGEE_ROOT/customer/application/management-server/jmxremote.password
    2. ファイルを編集し、次の構文を使用して JMX のユーザー名とパスワードを追加します。
      USERNAME <HASH-PASSWORD>
    3. ファイルの所有者が apigee であることと、ファイルモードが 400 であることを確認します。
      chown apigee:apigee $APIGEE_ROOT/customer/application/management-server/jmxremote.password
      chmod 400 $APIGEE_ROOT/customer/application/management-server/jmxremote.password
  4. JMX ユーザー権限を持つ jmxremote.access ファイルを作成します。
    1. 次のファイルを $JAVA_HOME ディレクトリからディレクトリ /opt/apigee/customer/application/<component>/ にコピーします。
      
      cp ${JAVA_HOME}/lib/management/jmxremote.access$APIGEE_ROOT/customer/application/management-server/jmxremote.password/jmxremote.access
    2. ファイルを編集し、JMX ユーザー名に続けて権限(読み取り/書き込み)を追加します。
      USERNAME READONLY
    3. ファイルの所有者が apigee であることと、ファイルモードが 400 であることを確認します。
      chown apigee:apigee $APIGEE_ROOT/customer/application/management-server/jmxremote.password
      
      chmod 400 $APIGEE_ROOT/customer/application/management-server/jmxremote.access
  5. 適切な Edge コンポーネントを再起動します。
    apigee-service edge-management-server restart

JMX 認証を無効にするには、conf_system_jmxremote_authenticate プロパティを削除するか、値を false に変更して、適切な Edge コンポーネントを再起動します。

JMX での SSL

Edge-* コンポーネントで SSL ベースの JMX を有効にするには:

  1. 適切な構成ファイルを編集します( 構成ファイルのリファレンスをご覧ください)。構成ファイルが存在しない場合は作成します。
    conf_system_jmxremote_enable=true
    conf_system_jmxremote_ssl=true
    conf_system_javax_net_ssl_keystore=/opt/apigee/customer/application/management-server/jmxremote.keystore
    conf_system_javax_net_ssl_keystorepassword=<keystore-password>
    構成ファイルを保存して、apigee:apigee が所有していることを確認します。
  2. サーバーキーを格納するキーストアを準備し、上記の構成 conf_system_javax_net_ssl_keystore で指定されたパスに配置します。キーストア ファイルが apigee:apigee で読み取り可能であることを確認します。
  3. 適切な Edge コンポーネントを再起動します。
    apigee-service edge-management-server restart

SSL ベースの JMX を無効にするには、conf_system_jmxremote_ssl プロパティを削除するか、値を false に変更します。適切な Edge コンポーネントを再起動します。

Jconsole 経由のモニタリング

jconsole を使用してモニタリングする手順は、https://docs.apigee.com/private-cloud/v4.52.01/how-monitor#jconsole で説明されているものと同じです。

「JMX で SSL が有効になっている場合は、トラストストアとトラストストアのパスワードを使用して jconsole を起動する必要がある」という 1 行を追加できます。参照: https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html

JConsole によるモニタリング

JConsole(JMX 準拠のツール)を使用して、ヘルスチェックとプロセスの統計情報を管理およびモニタリングします。JConsole を使用すると、サーバーによって公開された JMX 統計情報をグラフィカル インターフェースに表示できます。詳細については、JConsole の使用をご覧ください。

JMX で SSL が有効になっている場合は、トラストストアとトラストストアのパスワードを使用して JConsole を起動する必要があります。 JConsole の使用をご覧ください。

JConsole では、次のサービス URL を使用して、JMX 経由で提供される JMX 属性(MBeans)をモニタリングします。

service:jmx:rmi:///jndi/rmi://IP_address:port_number/jmxrmi

ここで

  • IP_address は、モニタリングするサーバーの IP アドレスです。
  • port_number は、モニタリングするサーバーの JMX ポート番号です。

たとえば、Management Server をモニタリングするには、次のようなコマンドを実行します(サーバーの IP アドレスが 216.3.128.12 の場合)。

service:jmx:rmi:///jndi/rmi://216.3.128.12:1099/jmxrmi

この例では、管理サーバーの JMX ポートであるポート 1099 を指定していることに注意してください。他のポートについては、JMX と Management API のモニタリング ポートをご覧ください。

次の表に、JMX の一般的な統計情報を示します。

JMX MBeans JMX 属性

メモリ

HeapMemoryUsage

NonHeapMemoryUsage

使用量

構成ファイルのリファレンス

以降のセクションでは、JMX 関連の構成で Edge コンポーネント構成ファイルに対して行う必要がある変更について説明します。詳細については、ポートと構成ファイルのモニタリングをご覧ください。

適切なコンポーネントの構成ファイルに追加する JMX 構成

  • エッジ コンポーネントで JMX エージェントを有効にします。デフォルトは false です。
    conf_system_jmxremote_enable=true

パスワード ベースの認証の構成

  • パスワード ベースの認証を有効にする。デフォルトは false です。
    conf_system_jmxremote_authenticate=true
  • アクセス ファイルのパス。Apigee ユーザーのみが所有し、読み取ることができる必要があります。
    conf_system_jmxremote_access_file=/opt/apigee/customer/application/management-server/jmxremote.access
  • パスワード ファイルのパス。Apigee ユーザーのみが所有し、読み取ることができる必要があります。
    conf_system_jmxremote_password_file=/opt/apigee/customer/application/management-server/jmxremote.password
  • 暗号化された形式でのパスワードの保存を有効にします。デフォルトは false です。
    conf_system_jmxremote_encrypted_auth=true

SSL ベースの JMX の構成

  • JMX 通信の SSL を有効にします。デフォルトは false です。
    conf_system_jmxremote_ssl=true
  • キーストアへのパス。Apigee ユーザーのみが所有し、読み取ることができる必要があります。
    conf_system_javax_net_ssl_keystore=/opt/apigee/customer/application/management-server/jmxremote.keystore
  • キーストアのパスワード:
    conf_system_javax_net_ssl_keystorepassword=changeme

オプションの JMX 構成

記載されている値はデフォルト値であり、変更できます。

  • JMX ポート。次の表にデフォルト値を示します。
    conf_system_jmxremote_port=
  • JMX RMI ポート。デフォルトでは、Java プロセスはランダムなポートを選択します。
    conf_system_jmxremote_rmi_port=
  • リモートスタブのホスト名。localhost のデフォルトの IP アドレス。
    conf_system_java_rmi_server_hostname=
  • JMX レジストリを SSL で保護します。デフォルトは false です。SSL が有効になっている場合にのみ適用されます。
    conf_system_jmxremote_registry_ssl=false

Management API を使用してモニタリングする

Edge には、サーバーのサービス チェックや、ユーザー、組織、デプロイのチェックに使用できる API がいくつか用意されています。このセクションでは、これらの API について説明します。

サービスのチェックを行う

Management API には、サービスのモニタリングと問題を診断するためのエンドポイントがいくつか用意されています。エンドポイントには次のものがあります。

エンドポイント 説明
/servers/self/up

サービスが実行されているかどうかを確認します。この API 呼び出しでは認証は必要ありません。

サービスが実行されている場合、このエンドポイントから次のレスポンスが返されます。

<ServerField>
  <Up>true</Up>
</ServerField>

サービスが実行されていない場合は、次のようなレスポンスが返されます(サービスとチェック方法によって異なります)。

curl: Failed connect to localhost:port_number; Connection refused
/servers/self

サービスに関する次のような情報を返します。

  • 構成プロパティ
  • 開始時間と稼働時間
  • ビルド、RPM、UUID の情報
  • 内部および外部のホスト名と IP アドレス
  • リージョンと Pod
  • <isUp> プロパティ。サービスが実行されているかどうかを示します。

この API 呼び出しでは、Apigee 管理者の認証情報で認証する必要があります。

これらのエンドポイントを使用するには、次の構文を使用するコマンドで curl などのユーティリティを呼び出します。

curl http://host:port_number/v1/servers/self/up -H "Accept: [application/json|application/xml]"
curl http://host:port_number/v1/servers/self -u username:password -H "Accept: [application/json|application/xml]"

ここで

  • host は、確認するサーバーの IP アドレスです。サーバーにログインしている場合は、「localhost」を使用できます。ログインしない場合は、サーバーの IP アドレスとユーザー名とパスワードを指定します。
  • port_number は、確認するサーバーの Management API ポートです。コンポーネントのタイプごとに異なるポートです。たとえば、Management Server の Management API ポートは 8080 です。使用する Management API のポート番号の一覧については、JMX と Management API のモニタリング ポートをご覧ください。

レスポンスの形式を変更するには、Accept ヘッダーを「application/json」または「application/xml」として指定します。

次の例では、localhost(ポート 8081)上の Router のステータスを取得します。

curl http://localhost:8081/v1/servers/self/up -H "Accept: application/xml"

次の例では、216.3.128.12(ポート 8082)にある Message Processor に関する情報を取得します。

curl http://216.3.128.12:8082/v1/servers/self -u sysAdminEmail:password
  -H "Accept: application/xml"

ユーザー、組織、デプロイのステータスをモニタリングする

Management API を使用して次のコマンドを実行すると、Management Server と Message Processor 上のプロキシのユーザー、組織、デプロイ ステータスをモニタリングできます。

curl http://host:port_number/v1/users -u sysAdminEmail:password
curl http://host:port_number/v1/organizations -u sysAdminEmail:password
curl http://host:port_number/v1/organizations/orgname/deployments -u sysAdminEmail:password

ここで、port_number は、Management Server の場合は 8080、Message Processor の場合は 8082 です。

この呼び出しでは、システム管理のユーザー名とパスワードで認証を行う必要があります。

すべての呼び出しに対して、サーバーは「デプロイ済み」ステータスを返します。失敗した場合は、次の操作を行います。

  1. エラーがないかサーバーログを確認してください。ログは次の場所にあります。
    • 管理サーバー: opt/apigee/var/log/edge-management-server
    • Message Processor: opt/apigee/var/log/edge-message-processor
  2. サーバーに対して呼び出しを行い、正常に機能しているかどうかを確認します。
  3. サーバーを ELB から削除して再起動します。
    /opt/apigee/apigee-service/bin/apigee-service service_name restart

    ここで、service_name は次のようになります。

    • edge-management-server
    • edge-message-processor

apigee-service コマンドを使用してステータスを確認する

Edge サービスのトラブルシューティングを行うには、サービスを実行しているサーバーにログインして apigee-service コマンドを使用します。

apigee-service でサービスのステータスを確認するには:

  1. サーバーにログインして、次のコマンドを実行します。
    /opt/apigee/apigee-service/bin/apigee-service service_name status

    ここで、service_name は次のいずれかです。

    • 管理サーバー: edge-management-server
    • Message Processor: edge-message-processor
    • Postgres: edge-postgres-server
    • Qpid: edge-qpid-server
    • ルーター: edge-router

    次に例を示します。

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor status
  2. サービスが実行されていない場合は、サービスを開始します。
    /opt/apigee/apigee-service/bin/apigee-service service_name start
  3. サービスを再起動したら、以前に使用した apigee-service status コマンドを使用するか、Management API でモニタリングするで説明されている Management API を使用して、サービスが機能していることを確認します。

    次に例を示します。

    curl -v http://localhost:port_number/v1/servers/self/up

    ここで、port_number はサービスの Management API ポートです。

    この例では、ユーザーがサーバーにログイン済みで、ホスト名として「localhost」を使用できることを前提としています。Management API を使用してリモートでステータスを確認するには、API 呼び出しにサーバーの IP アドレスを指定し、システム管理者のユーザー名とパスワードを含める必要があります。

Postgres のモニタリング

Postgres は、ステータスの確認に使用できるいくつかのユーティリティをサポートしています。以降のセクションでは、これらのユーティリティについて説明します。

Postgres 上の組織と環境を確認する

Postgres サーバーにオンボーディングされている組織名と環境名を確認するには、次の curl コマンドを実行します。

curl -v http://postgres_IP:8084/v1/servers/self/organizations

組織名と環境名が表示されます。

アナリティクスのステータスを確認する

Postgres と Qpid の分析サーバーのステータスを確認するには、次の curl コマンドを実行します。

curl -u userEmail:password http://host:port_number/v1/organizations/orgname/environments/envname/provisioning/axstatus

次の例のように、すべての分析サーバーの成功ステータスが表示されます。

{
  "environments" : [ {
    "components" : [ {
      "message" : "success at Thu Feb 28 10:27:38 CET 2013",
      "name" : "pg",
      "status" : "SUCCESS",
      "uuid" : "[c678d16c-7990-4a5a-ae19-a99f925fcb93]"
     }, {
      "message" : "success at Thu Feb 28 10:29:03 CET 2013",
      "name" : "qs",
      "status" : "SUCCESS",
      "uuid" : "[ee9f0db7-a9d3-4d21-96c5-1a15b0bf0adf]"
     } ],
    "message" : "",
    "name" : "prod"
   } ],
  "organization" : "acme",
  "status" : "SUCCESS"
}

PostgreSQL データベース

このセクションでは、Postgres データベースのモニタリングに使用できる方法について説明します。

check_postgres.pl スクリプトを使用する

PostgreSQL データベースをモニタリングするには、標準のモニタリング スクリプト check_postgres.pl を使用します。詳細については、http://bucardo.org/wiki/Check_postgres をご覧ください。

スクリプトを実行する前に:

  1. 各 Postgres ノードに check_postgres.pl スクリプトをインストールする必要があります。
  2. perl-Time-HiRes.x86_64 がインストールされていることを確認します。これは、高解像度アラーム、スリープ、gettimeofday、インターバル タイマーを実装する Perl モジュールです。たとえば、次のコマンドを使用してインストールできます。
    yum install perl-Time-HiRes.x86_64
  3. CentOS 7: CentOS v7 で check_postgres.pl を使用する前に、perl-Data-Dumper.x86_64 RPM をインストールします。

check_postgres.pl の出力

check_postgres.pl を使用した API 呼び出しのデフォルトの出力は、Nagios と互換性があります。スクリプトをインストールしたら、次のことを確認します。

  1. データベースのサイズを確認します。
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -include=apigee -action database_size --warning='800 GB' --critical='900 GB'
  2. データベースへの受信接続数を確認し、最大許容接続数と比較します。
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action backends
  3. データベースが実行中で使用可能かどうかを確認します。
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action connection
  4. ディスク容量を確認します。
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action disk_space --warning='80%' --critical='90%'
  5. Postgres ノードにオンボーディングされている組織と環境の数を確認します。
    check_postgres.pl -H 10.176.218.202 -db apigee -u apigee -dbpass postgres -action=custom_query --query="select count(*) as result from pg_tables where schemaname='analytics' and tablename like '%fact'" --warning='80' --critical='90' --valtype=integer

データベース チェックを実行する

PostgreSQL データベースに適切なテーブルが作成されていることを確認できます。次のコマンドを使用して PostgreSQL データベースにログインします。

psql -h /opt/apigee/var/run/apigee-postgresql/ -U apigee -d apigee

次のコマンドを実行します。

\d analytics."org.env.fact"

postgres プロセスのヘルス ステータスを確認する

Postgres マシンで API チェックを実行するには、次の curl コマンドを呼び出します。

curl -v http://postgres_IP:8084/v1/servers/self/health

postgres プロセスがアクティブの場合、このコマンドは ACTIVE ステータスを返します。Postgres プロセスが稼働していない場合は、INACTIVE ステータスが返されます。

Postgres リソース

Postgres サービスのモニタリングの詳細については、以下をご覧ください。

Apache Cassandra

Cassandra では JMX がデフォルトで有効になっており、Cassandra へのリモート JMX アクセスにパスワードは必要ありません。

Cassandra に対して JMX 認証を有効にする

Cassandra に対して JMX 認証を有効にできます。その後、nodetool ユーティリティを呼び出すたびにユーザー名とパスワードを渡す必要があります。

Cassandra の JMX 認証を有効にするには:

  1. cassandra.properties ファイルを作成して編集します。
    1. /opt/apigee/customer/application/cassandra.properties ファイルを編集します。ファイルが存在しない場合は作成します。
    2. このファイルに次の内容を追加します。
      conf_cassandra_env_com.sun.management.jmxremote.authenticate=true
      conf_cassandra_env_com.sun.management.jmxremote.password.file=${APIGEE_ROOT}/customer/application/apigee-cassandra/jmxremote.password
      conf_cassandra_env_com.sun.management.jmxremote.access.file=${APIGEE_ROOT}/customer/application/apigee-cassandra/jmxremote.access
    3. cassandra.properties ファイルを保存します。
    4. 次の例のように、ファイルのオーナーを apigee:apigee に変更します。
      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties

    プロパティ ファイルを使用してトークンを設定する方法の詳細については、Edge の構成方法をご覧ください。

  2. jmx_auth.sh を作成して編集します。
    1. 次の場所にファイルを作成します(存在しない場合)。
      /opt/apigee/customer/application/jmx_auth.sh
    2. 次のプロパティをファイルに追加します。
      export CASS_JMX_USERNAME=JMX_USERNAME
      export CASS_JMX_PASSWORD=JMX_PASSWORD
    3. jmx_auth.sh ファイルを保存します。
    4. ファイルのソース化:
      source /opt/apigee/customer/application/jmx_auth.sh
  3. jmxremote.password ファイルをコピーして編集します。
    1. 次のファイルを $JAVA_HOME ディレクトリから /opt/apigee/customer/application/apigee-cassandra/ にコピーします。
      cp ${JAVA_HOME}/lib/management/jmxremote.password.template $APIGEE_ROOT/customer/application/apigee-cassandra/jmxremote.password
    2. jmxremote.password ファイルを編集し、次の構文を使用して JMX のユーザー名とパスワードを追加します。
      JMX_USERNAME JMX_PASSWORD

      ここで、JMX_USERNAMEJMX_PASSWORD は、以前に設定した JMX のユーザー名とパスワードです。

    3. ファイルの所有者が「apigee」で、ファイルモードが 400 であることを確認します。
      chown apigee:apigee /opt/apigee/customer/application/apigee-cassandra/jmxremote.password
      chmod 400 /opt/apigee/customer/application/apigee-cassandra/jmxremote.password
  4. jmxremote.access ファイルをコピーして編集します。
    1. 次のファイルを $JAVA_HOME ディレクトリから /opt/apigee/customer/application/apigee-cassandra/ にコピーします。
      cp ${JAVA_HOME}/lib/management/jmxremote.access
      $APIGEE_ROOT/customer/application/apigee-cassandra/jmxremote.access
    2. jmxremote.access ファイルを編集して、次のロールを追加します。
      JMX_USERNAME readwrite
    3. ファイルの所有者が「apigee」で、ファイルモードが 400 であることを確認します。
      chown apigee:apigee /opt/apigee/customer/application/apigee-cassandra/jmxremote.access
      chmod 400 /opt/apigee/customer/application/apigee-cassandra/jmxremote.access
  5. Cassandra で configure を実行します。
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
  6. Cassandra を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  7. 他のすべての Cassandra ノードで、この手順を繰り返します。

JMX パスワード暗号化を有効にする

JMX パスワード暗号化を有効にするには、次の操作を行います。

  1. source/conf/casssandra-env.sh ファイルを開きます。
  2. cassandra.properties ファイルを作成して編集します。
    1. /opt/apigee/customer/application/cassandra.properties ファイルを編集します。ファイルが存在しない場合は作成します。
    2. このファイルに次の内容を追加します。
      conf_cassandra_env_com.sun.management.jmxremote.encrypted.authenticate=true
    3. cassandra.properties ファイルを保存します。
    4. 次の例のように、ファイルのオーナーを apigee:apigee に変更します。
      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
  3. コマンドラインで「echo -n 'Secret' | openssl dgst -sha1」と入力して、目的のパスワードの SHA1 ハッシュを生成します。
  4. $APIGEE_ROOT/customer/application/apigee-cassandra/jmxremote.password(前のセクションで作成)のユーザー名に対してパスワードを設定します。
  5. Cassandra で構成を実行します。
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
  6. Cassandra を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  7. 他のすべての Cassandra ノードで、この手順を繰り返します。

Cassandra で SSL を使用した JMX を有効にする

SSL で JMX を有効にすると、Cassandra との JMX ベースの通信でセキュリティと暗号化が強化されます。SSL で JMX を有効にするには、SSL ベースの JMX 接続を受け入れるための鍵と証明書を Cassandra に提供する必要があります。また、nodetool(および JMX を介して Cassandra と通信するその他のツール)を SSL 用に構成する必要があります。

SSL 対応の JMX では、平文と暗号化された JMX パスワードの両方がサポートされます。

Cassandra で SSL を使用した JMX を有効にするには、次の操作を行います。

  1. JMX を有効にします。必要に応じてパスワードの暗号化を有効にします。
  2. Cassandra の JMX 認証を有効にします。必要があります。nodetool が構成済みのユーザー名とパスワードで動作することを確認します。
    /opt/apigee/apigee-cassandra/bin/nodetool -u <JMX_USER> -pw <JMX_PASS> ring
  3. キーストアとトラストストアを準備します。

    • キーストアには鍵と証明書を含める必要があります。キーストアは Cassandra サーバーの構成に使用されます。キーストアに複数の鍵ペアが含まれている場合、Cassandra は最初の鍵ペアを使用して SSL を有効にします。

      キーストアと鍵のパスワードは同じにする必要があります(keytool を使用して鍵を生成する際のデフォルト)。

    • トラストストアには証明書のみが含まれている必要があります。トラストストアは、クライアント(apigee-service ベースのコマンドまたは nodetool)が JMX 経由で接続するために使用します。

    上記の要件を確認した後:

    1. キーストア ファイルを /opt/apigee/customer/application/apigee-cassandra/ に配置します。
    2. chown apigee:apigee /opt/apigee/customer/application/apigee-cassandra/keystore.node1
      chmod 400 /opt/apigee/customer/application/apigee-cassandra/keystore.node1
      」と入力して、キーストア ファイルを Apigee ユーザーのみが読み取れるようにします。
  4. 次の手順で、SSL を使用する JMX 用に Cassandra を構成します。
    1. apigee-service apigee-cassandra stop
      」と入力して Cassandra ノードを停止します。
    2. Cassandra で SSL を有効にするには、/opt/apigee/customer/application/cassandra.properties ファイルを開いて次の行を追加します。
      conf_cassandra_env_com.sun.management.jmxremote.ssl=true
      conf_cassandra_env_javax.net.ssl.keyStore=/opt/apigee/customer/application/apigee-cassandra/keystore.node1
      conf_cassandra_env_javax.net.ssl.keyStorePassword=keystore-password
    3. 次の例のように、ファイルのオーナーを apigee:apigee に変更します。
      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    4. Cassandra で構成を実行します。
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
    5. Cassandra を再起動します。
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
    6. 他のすべての Cassandra ノードで、この手順を繰り返します。
    7. apigee-service apigee-cassandra start
      」と入力して Cassandra ノードを起動します。
  5. Cassandra コマンド apigee-service を構成します。apigee-service コマンドの実行時に、次のような特定の環境変数を設定する必要があります。
    apigee-service apigee-cassandra stop
    apigee-service apigee-cassandra wait_for_ready
    apigee-service apigee-cassandra ring
    apigee-service apigee-cassandra backup

    JMX 認証と SSL 用に apigee-service を構成する方法はいくつかあります。ユーザビリティとセキュリティ対策に基づいてオプションを選択してください。

    オプション 1(SSL 引数をファイルに保存する)

    次の環境変数を設定します。

    export CASS_JMX_USERNAME=ADMIN
    # Provide encrypted password here if you have setup JMX password encryption
    export CASS_JMX_PASSWORD=PASSWORD
    export CASS_JMX_SSL=Y

    Apigee ユーザーのホーム ディレクトリ(/opt/apigee)にファイルを作成します。

    $HOME/.cassandra/nodetool-ssl.properties

    ファイルを編集して次の行を追加します。

    -Djavax.net.ssl.trustStore=<path-to-truststore.node1>
    -Djavax.net.ssl.trustStorePassword=<truststore-password>
    -Dcom.sun.management.jmxremote.registry.ssl=true

    Apigee ユーザーがトラストストア ファイルを読み取れることを確認します。

    次の apigee-service コマンドを実行します。エラーなしで実行される場合、構成は適切です。

    apigee-service apigee-cassandra ring

    オプション 2(SSL 引数を環境変数に格納する)

    次の環境変数を設定します。

    export CASS_JMX_USERNAME=ADMIN
    # Provide encrypted password here if you have setup JMX password encryption
    export CASS_JMX_PASSWORD=PASSWORD
    export CASS_JMX_SSL=Y
    # Ensure the truststore file is accessible by Apigee user.
    export CASS_JMX_TRUSTSTORE=<path-to-trustore.node1>
    export CASS_JMX_TRUSTSTORE_PASSWORD=<truststore-password>

    次の apigee-service コマンドを実行します。エラーなしで実行されている場合、構成は適切です。

    apigee-service apigee-cassandra ring

    オプション 3(SSL 引数を apigee-service に直接渡す)

    次のような apigee-service コマンドを実行します。環境変数を構成する必要はありません。

    CASS_JMX_USERNAME=ADMIN CASS_JMX_PASSWORD=PASSWORD CASS_JMX_SSL=Y CASS_JMX_TRUSTSTORE=<path-to-trustore.node1> CASS_JMX_TRUSTSTORE_PASSWORD=<trustore-password> /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra ring
  6. nodetool を設定します。Nodetool では、JMX パラメータを渡す必要があります。SSL 対応の JMX で実行するように nodetool を構成するには、次の構成オプションで説明するように 2 つの方法があります。

    これらのオプションは、SSL 関連の構成が nodetool に渡される方法が異なります。いずれの場合も、nodetool を実行するユーザーには、トラストストア ファイルに対する読み取り権限が必要です。ユーザビリティとセキュリティ対策に基づいて適切なオプションを選択してください。

    nodetool パラメータの詳細については、 DataStax のドキュメントをご覧ください。

    構成オプション 1

    nodetool を実行するユーザーのホーム ディレクトリにファイルを作成します。

    $HOME/.cassandra/nodetool-ssl.properties

    このファイルに次の行を追加します。

    -Djavax.net.ssl.trustStore=<path-to-truststore.node1>
    -Djavax.net.ssl.trustStorePassword=<truststore-password>
    -Dcom.sun.management.jmxremote.registry.ssl=true

    nodetool を実行するすべてのユーザーが、上で指定したトラストストア パスにアクセスできる必要があります。

    --ssl オプションを指定して nodetool を実行します。

    /opt/apigee/apigee-cassandra/bin/nodetool --ssl -u <jmx-user-name> -pw <jmx-user-password> -h localhost ring

    構成オプション 2

    下記の追加パラメータを使用して、nodetool を 1 つのコマンドとして実行します。

    /opt/apigee/apigee-cassandra/bin/nodetool -Djavax.net.ssl.trustStore=<path-to-truststore.node1> -Djavax.net.ssl.trustStorePassword=<truststore-password> -Dcom.sun.management.jmxremote.registry.ssl=true -Dssl.enable=true -u <jmx-user-name> -pw <jmx-user-password> -h localhost ring

SSL 構成を元に戻す

上記の手順で説明した SSL 構成を元に戻す必要がある場合は、次の操作を行います。

  1. apigee-cassandra を停止するには、「
    apigee-service apigee-cassandra stop
    」と入力します
  2. /opt/apigee/customer/application/cassandra.properties ファイルから conf_cassandra-env_com.sun.management.jmxremote.ssl=true 行を削除します。
  3. /opt/apigee/apigee-cassandra/source/conf/cassandra-env.sh
    # JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/opt/apigee/data/apigee-cassandra/keystore.node0"
    # JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=keypass"
    # JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=true”
    の次の行をコメントアウトします。
  4. 次のコマンドを入力して apigee-cassandra を開始します。
  5. apigee-service apigee-cassandra start
  6. 環境変数 CASS_JMX_SSL が設定されている場合は、削除します。

    unset CASS_JMX_SSL
  7. ringstopbackup などの apigee-service ベースのコマンドが機能していることを確認します。
  8. nodetool による --ssl スイッチの使用を停止する

Cassandra の JMX 認証を無効にする

Cassandra の JMX 認証を無効にするには:

  1. /opt/apigee/customer/application/cassandra.properties を編集します。
  2. ファイルから次の行を削除します。
    conf_cassandra-env_com.sun.management.jmxremote.authenticate=true
  3. Cassandra で構成を実行します。
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
  4. Cassandra を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  5. 他のすべての Cassandra ノードで、この手順を繰り返します。

JConsole の使用: タスク統計情報をモニタリングする

JConsole と次のサービス URL を使用して、JMX 経由で提供される JMX 属性(MBeans)をモニタリングします。

service:jmx:rmi:///jndi/rmi://IP_address:7199/jmxrmi

ここで、IP_address は Cassandra サーバーの IP です。

Cassandra JMX の統計情報

JMX MBeans JMX 属性

列ファミリー/アプリケーション/環境

列ファミリー/アプリケーション/組織

ColumnFamilies/apprepo/apiproxy_revisions

ColumnFamilies/apprepo/apiproxies

列ファミリー/監査/監査

列 Families/audit/audits_ref

PendingTasks

MemtableColumnsCount

MemtableDataSize

ReadCount

RecentReadLatencyMicros

TotalReadLatencyMicros

WriteCount

RecentWriteLatencyMicros

TotalWriteLatencyMicros

TotalDiskSpaceUsed

LiveDiskSpaceUsed

LiveSSTableCount

BloomFilterFalsePositives

RecentBloomFilterFalseRatio

BloomFilterFalseRatio

nodetool を使用してクラスタノードを管理する

nodetool ユーティリティは、クラスタノードを管理する Cassandra のコマンドライン インターフェースです。このユーティリティは /opt/apigee/apigee-cassandra/bin にあります。

すべての Cassandra クラスタノードで、次の呼び出しを行うことができます。

  1. 一般的なリング情報(単一の Cassandra ノードでも可能): すべてのノードで「Up」と「Normal」を探します。
    nodetool [-u username -pw password] -h localhost ring

    ユーザー名とパスワードを渡す必要があるのは、Cassandra に対して JMX 認証を有効にした場合のみです。

    上記のコマンドの出力は次のようになります。

    Datacenter: dc-1
    ==========
    Address            Rack     Status State   Load    Owns    Token
    192.168.124.201    ra1      Up     Normal  1.67 MB 33,33%  0
    192.168.124.202    ra1      Up     Normal  1.68 MB 33,33%  5671...5242
    192.168.124.203    ra1      Up     Normal  1.67 MB 33,33%  1134...0484

  2. ノードに関する一般情報(ノードあたりの呼び出し)
    nodetool [-u username -pw password]  -h localhost info

    上記のコマンドの出力は次のようになります。

    ID                     : e2e42793-4242-4e82-bcf0-oicu812
    Gossip active          : true
    Thrift active          : true
    Native Transport active: true
    Load                   : 273.71 KB
    Generation No          : 1234567890
    Uptime (seconds)       : 687194
    Heap Memory (MB)       : 314.62 / 3680.00
    Off Heap Memory (MB)   : 0.14
    Data Center            : dc-1
    Rack                   : ra-1
    Exceptions             : 0
    Key Cache              : entries 150, size 13.52 KB, capacity 100 MB, 1520781 hits, 1520923 requests, 1.000 recent hit rate, 14400 save period in seconds
    Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
    Counter Cache          : entries 0, size 0 bytes, capacity 50 MB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
    Token                  : 0
  3. Thrift サーバーのステータス(クライアント API の提供)
    nodetool [-u username -pw password] -h localhost statusthrift

    上記のコマンドの出力は次のようになります。

    running

  4. データ ストリーミング オペレーションのステータス: Cassandra ノードのトラフィックを監視します。
    nodetool [-u username -pw password] -h localhost netstats

    上記のコマンドの出力は次のようになります。

    Mode: NORMAL
    Not sending any streams.
    Read Repair Statistics:
    Attempted: 151612
    Mismatch (Blocking): 0
    Mismatch (Background): 0
    Pool Name                    Active   Pending      Completed   Dropped
    Commands                        n/a         0              0         0
    Responses                       n/a         0              0       n/a

nodetool の詳細については、nodetool ユーティリティについてをご覧ください。

Cassandra リソース

http://www.datastax.com/docs/1.0/operations/monitoring をご覧ください。

Apache Qpid Broker-J のモニタリング

Qpid 管理コンソールから Qpid Broker-J をモニタリングできます。このセクションでは、コンソールにアクセスし、コンソールを使用して基本的なモニタリング機能を実行する方法について説明します。管理コンソールの使用方法について詳しくは、Apache Qpid ドキュメントの ウェブ管理コンソールをご覧ください。

管理コンソールにアクセスする

デフォルトの管理コンソールのポートは 8090 です。このデフォルト ポートでコンソールにアクセスするには、ウェブブラウザで以下を指定します。

http://QPID_NODE_IP:8090

コンソールにログインするには、Apigee によって設定されたデフォルトの認証情報、または Edge 構成ファイルに設定された認証情報を使用します。詳細については、Edge 構成ファイルのリファレンスをご覧ください。

キューとメッセージをモニタリングする

左側のナビゲーション パネルで、[Java-Broker] > [virtualhosts] > [queues] に移動します。キューを選択すると、UI のメイン部分にその詳細が表示されます。詳細ビューでは、配信済みメッセージ、キューに追加されたメッセージ、メッセージ レートなどの情報を含むキューの属性と統計情報を確認できます。

ログファイルの表示とダウンロード

左側のナビゲーション パネルで、[Java-Broker] > [ Brokerloggers ] > [logfile] に移動します。メインの UI の詳細ビューで、ログファイルの詳細を表示したり、ログファイルをダウンロードしたりできます。

Qpid 管理 API の使用

Apache Qpid Broker-J REST API を使用して、管理タスクを自動化し、ブローカーをモニタリングできます。詳細については、 Apache Qpid Broker REST API のドキュメントをご覧ください。

コマンドライン ツールを使用してブローカーをモニタリングすることもできます。次に例を示します。

curl "QPID_NODE_IP":"8090"/api/latest/broker -u "USERNAME":"PASSWORD"

Qpid で SSL によるモニタリングを有効にする

モニタリングと管理のセキュリティをさらに強化するには、Qpid の管理ポータルと Qpid の管理 API で SSL を有効にします。鍵と証明書を指定するには、以下のガイドラインに従ってください。

Qpid には、Apigee で有効なファイル キーストアのオプションが用意されています。この型は、keytool などの Java ツールと Java ツールで認識される標準の JKS キーストア形式を受け入れます。

キーストアの準備

keytool を使用するだけでなく、Qpidd のクライアントも使用できるように証明書ファイルを直接提供する必要があります。

キーストアの生成については、Java Keytool のドキュメントをご覧ください。

要件を確認した後

  1. キーストアと証明書のファイルを /opt/apigee/customer/application/apigee-qpidd に配置します。
  2. キーストア ファイルが Apigee ユーザーだけが読み取り可能であることを確認します。
    chown apigee:apigee /opt/apigee/customer/application/apigee-qpidd/qpidd.keystore
      chmod 400 /opt/apigee/customer/application/apigee-qpidd/qpidd.keystore
        
      chown apigee:apigee /opt/apigee/customer/application/apigee-qpidd/qpidd-cert.pem
      chmod 400 /opt/apigee/customer/application/apigee-qpidd/qpidd-cert.pem

Qpid で SSL を有効にする

一度に 1 つの Qpid ノードで次の手順を実行します。

/opt/apigee/customer/application/qpidd.properties ファイルを開き、次の行を追加します。

conf_qpidd_qpid_management.https.enabled=true
  conf_qpidd_qpid.keystore.storeUrl=/opt/apigee/customer/application/apigee-qpidd/qpidd.keystore
  conf_qpidd_qpid.keystore.password=keystore-password
  conf_qpidd_qpid.keystore.certificateAlias=certificate-alias
  conf_qpidd_qpid.keystore.certificate=/opt/apigee/customer/application/apigee-qpidd/qpidd-cert.pem
  1. ファイルのオーナーを apigee:apigee に変更します。
    chown apigee:apigee /opt/apigee/customer/application/qpidd.properties
  2. Qpidd を設定します。
    apigee-service apigee-qpidd configure
  3. Qpidd を再起動します。
    apigee-service apigee-qpidd restart
  4. wait_for_ready でステータスを確認します。
    apigee-service apigee-qpidd wait_for_ready

SSL 構成を元に戻す

ファイル /opt/apigee/customer/application/qpidd.properties からプロパティを削除するか、コメントアウトします。

conf_qpidd_qpid_management.https.enabled=true
  conf_qpidd_qpid.keystore.storeUrl=/opt/apigee/customer/application/apigee-qpidd/keystore
  1. Qpidd を設定します。
    apigee-service apigee-qpidd configure
  2. Qpidd を再起動します。
    apigee-service apigee-qpidd restart
  3. wait_for_ready でステータスを確認します。
    apigee-service apigee-qpidd wait_for_ready

Apache ZooKeeper

ZooKeeper のステータスを確認する

  1. ZooKeeper プロセスが実行されていることを確認します。ZooKeeper は PID ファイルを opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid に書き込みます。
  2. ZooKeeper ポートをテストして、すべての ZooKeeper サーバー上のポート 2181 および 3888 への TCP 接続を確立できることを確認します。
  3. ZooKeeper データベースから値を読み取れることを確認します。ZooKeeper クライアント ライブラリ(または /opt/apigee/apigee-zookeeper/bin/zkCli.sh)を使用して接続し、データベースから値を読み取ります。
  4. ステータスを確認します。
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper status

ZooKeeper の 4 文字の単語を使用する

ZooKeeper は、netcat(nc)または telnet を使用してポート 2181 に送信される小さなコマンドセット(4 文字の単語)によってモニタリングできます。

ZooKeeper コマンドの詳細については、Apache ZooKeeper コマンド リファレンスをご覧ください。

次に例を示します。

  • srvr: サーバーの完全な詳細を一覧表示します。
  • stat: サーバーと接続されたクライアントの簡単な詳細を一覧表示します。

ZooKeeper ポートに次のコマンドを発行できます。

  1. 4 文字のコマンド ruok を実行して、サーバーがエラー以外の状態で動作しているかどうかをテストします。成功すると、「imok」が返されます。
    echo ruok | nc host 2181

    戻り値:

    imok
  2. 4 文字コマンド stat を実行して、サーバーのパフォーマンスと接続されたクライアントの統計情報を一覧表示します。
    echo stat | nc host 2181

    戻り値:

    Zookeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
    Clients:
    /0:0:0:0:0:0:0:1:33467[0](queued=0,recved=1,sent=0)
    /192.168.124.201:42388[1](queued=0,recved=8433,sent=8433)
    /192.168.124.202:42185[1](queued=0,recved=1339,sent=1347)
    /192.168.124.204:39296[1](queued=0,recved=7688,sent=7692)
    Latency min/avg/max: 0/0/128
    Received: 26144
    Sent: 26160
    Connections: 4
    Outstanding: 0
    Zxid: 0x2000002c2
    Mode: follower
    Node count: 283
  3. netcat(nc)が使用できない場合は、代わりに Python を使用できます。次の内容を含む zookeeper.py という名前のファイルを作成します。
    import time, socket,
    sys c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    c.connect((sys.argv[1], 2181))
    c.send(sys.argv[2])
    time.sleep(0.1)
    print c.recv(512)

    以下の Python 行を実行します。

    python zookeeper.py 192.168.124.201 ruok
    python zookeeper.py 192.168.124.201 stat

LDAP レベルのテスト

OpenLDAP をモニタリングして、特定のリクエストが適切に処理されているかどうかを確認できます。つまり、正しい結果を返す特定の検索があるかどうかを確認します。

  1. ldapsearchyum install openldap-clients)を使用して、システム管理者のエントリをクエリします。このエントリは、すべての API 呼び出しの認証に使用されます。
    ldapsearch -b "uid=admin,ou=users,ou=global,dc=apigee,dc=com" -x -W -D "cn=manager,dc=apigee,dc=com" -H ldap://localhost:10389 -LLL

    LDAP 管理者パスワードの入力を求められます。

    Enter LDAP Password:

    パスワードを入力すると、次のようなレスポンスが表示されます。

    dn:
    uid=admin,ou=users,ou=global,dc=apigee,dc=com
    objectClass: organizationalPerson
    objectClass: person
    objectClass: inetOrgPerson
    objectClass: top
    uid: admin
    cn: admin
    sn: admin
    userPassword:: e1NTSEF9bS9xbS9RbVNXSFFtUWVsU1F0c3BGL3BQMkhObFp2eDFKUytmZVE9PQ=
     =
    mail: opdk@google.com
  2. 次のコマンドを使用して、Management Server がまだ LDAP に接続しているかどうかを確認します。
    curl -u userEMail:password http://localhost:8080/v1/users/ADMIN

    戻り値:

    {
      "emailId" : ADMIN,
      "firstName" : "admin",
      "lastName" : "admin"
    }

また、OpenLDAP キャッシュをモニタリングすることもできます。これにより、ディスク アクセス回数が減少し、システムのパフォーマンスが向上します。OpenLDAP サーバーでキャッシュをモニタリングしてサイズを調整すると、ディレクトリ サーバーのパフォーマンスに大きな影響を与える可能性があります。キャッシュに関する情報は、ログファイル(opt/apigee/var/log)で確認できます。