デフォルトでは、PHP エージェントと Java プロキシはプロセス間通信(IPC)を使用して相互に通信します。ただし、Transmission Control Protocol(TCP)通信を使用すると、次のような状況で役立ちます。

  • Java プロキシと PHP エージェントを異なるホスト オペレーティング システムで実行する場合。 
  • コンテナ内(Docker や Kubernetes など)。すべてのコンテナに同じ容量を搭載できますが、推奨されません。

TCP 通信を有効にするには、-tcp-comm-port を有効なポートに設定します。また、-tcp-port-range を有効なポート範囲(3000 ~ 3005)に設定します。PHP エージェントと Java プロキシは、TCP を使用して通信できるようになりました。

Java プロキシは、-tcp-comm-port を介してエージェントからの着信接続要求をリッスンします。各エージェントの通信は、次の 2 つの一意のポートを介して行われます。

  • レポートポート
  • リクエストポート

これらのポートは、エージェントのインストール時またはプロキシの設定時に設定できます。

TCP モードの環境変数

次の表に、TCP モード設定の環境変数を示します。

変数名説明構成に関する備考

-tcp-comm-host

  • Java プロキシの場合:プロキシが着信接続をリッスンするホストを定義します。
  • PHP エージェントの場合:エージェントがプロキシとの通信を試行するホストを定義します。

これはオプションの変数です。デフォルトでは、127.0.0.1 (localhost) に設定されています。

-tcp-comm-port

  • Java プロキシの場合:プロキシが稼働しているホスト内で、プロキシが着信接続をリッスンするポートを定義します。
  • PHP エージェントの場合:指定されたホストで、エージェントがプロキシとの通信を試行するポートを定義します。

この変数は定義する必要があります。


-tcp-port-range

プロキシがエージェントと通信するためにポート(リクエスト/レポート)を割り当てるポート範囲を定義します

この変数は定義する必要があります。

-tcp-request-port

エージェントとプロキシ間の転送をレポートするためのポートを定義します。

これはオプションの変数です。定義されていない場合、プロキシは定義された範囲内のポートを割り当てます。

-tcp-reporting-port

エージェントとプロキシ間の要求および設定転送用のポートを定義します。

これはオプションの変数です。定義されていない場合、プロキシは定義された範囲内のポートを割り当てます。

インストールコマンドの例

次に、TCP モードを有効にしてエージェントをインストールするサンプルコマンドを示します。

install.sh -a PHPCust@XC6v2n8m2$543 --tcp-comm-port=3000 --tcp-port-range=3000-3010 controller1.appdynamics.com 8818 myApp myTier myNode
PHP

エージェントとプロキシ間の通信を暗号化するための CurveZMQ のセットアップ

デフォルトでは、Java プロキシと PHP エージェント間の通信は暗号化されません。このセクションでは、CurveZMQ を使用してプロキシとエージェント間の通信を暗号化する方法について説明します。CurveZMQ は、ZeroMQ の認証および暗号化プロトコルです。曲線暗号化を有効にするには、エージェントのインストール時に -curve-enabled フラグを使用します。次に、CurveZMQ を有効にしてエージェントをインストールするサンプルコマンドを示します。

install.sh -a PHPCust@XC6v2n8m2$543 --tcp-comm-port=3000 —tcp-port-
range=3000-3010 —curve-enabled controller1.appdynamics.com 8818 myApp
PHP

個別のコンテナでのプロキシとエージェントの設定

  1. コンテナにエージェントを展開するには、次のサンプルコマンドを使用します。
    ./install.sh -a e2e-customer@59b661ac-720f-43ce-9b07-9d3bdf1cdb17
    --auto-launch-proxy=0 —tcp-comm-host=PROXY_HOST --tcp-comm-
    port=3000 --tcp-port-range=3000-3010 --curve-enabled
    CONTROLLER_HOST_NAME CONTROLLER_PORT APP_NAME TIER_NAME NODE_NAME 8090
    CODE
  2. エージェントコンテナ以外のコンテナにプロキシを展開するには、次の手順を実行します。
    1. プロキシアーティファクトをダウンロードして解凍します。
    2. runProxy.template ファイルのコピーを作成して、runProxy に名前を変更します。
    3. 次のコマンドを実行します。
      bash /proxy/runProxy /tmp/proxy.communication /tmp/agentLogs
      -Dappdynamics.proxy.curveenabled=yes
      -Dappdynamics.proxy.curvesecretfile=/home/appdynamics-php-agent-
      linux_x64/certs/secret/proxy.key_secret
      -Dappdynamics.proxy.curvepublicfile=/home/appdynamics-php-agent-
      linux_x64/certs/public/proxy.key -Dcommtcp=3000
      -Dappdynamics.proxy.commtcphost=$(hostname -I)
      -Dappdynamics.proxy.commportrange=3000-3005
      -Dappdynamics.agent.ssl.protocol=TLSv1.2
      CODE
  1. エージェントとプロキシが同じネットワークの一部であることを確認して、エージェントとプロキシの通信を許可します。これを実現するには、Docker Compose を使用します。

  2. Docker Compose を使用している場合は、プロキシホスト値をプロキシコンテナ名として設定できます。

Kubernetes クラスタでの共有プロキシを使用した PHP エージェントの展開

このセクションでは、Kubernetes で共有 Java プロキシを使用して PHP エージェントを展開する方法について説明します。

プロキシポッドの設定

プロキシ用にポッドを設定する際は、次の点に注意してください。

  • プロキシとエージェント間の通信のために、プロキシサービスで連続したポート範囲を公開します。
  • プロキシサービスの仕様タイプを ClusterIP に設定してプロキシポッドを実行します。
  • TCP モードでプロキシを実行するには、次の環境変数を設定してください。
変数必須

APPDYNAMICS_TCP_COMM_PORT

プロキシの TCP ポート(3000 など)。

APPDYNAMICS_TCP_COMM_HOST

エージェントが要求を行う TCP ホスト。

ポッドが実行されている IP アドレスに設定することをお勧めします。proxy-deployment.yaml ファイルの次の場所に IP アドレスがあります。

valueFrom:

    fieldRef:

       fieldPath: status.podIP
CODE


APPDYNAMICS_TCP_PORT_RANGE

プロキシがリクエスト/レポートポートを割り当てるポート範囲を指定します。たとえば、3000-3010 のようになります。

ポート範囲内に十分な数のポートを指定してください。ポートの総数は、少なくともエージェント数の 2 倍にする必要があります。

APPDYNAMICS_CURVE_ENABLED

CurveZMQ 暗号化を有効にするには、true に設定します。true に設定すると、/tmp/appd/certs/public/proxy.key にあるプロキシ公開キーをコピーし、すべてのエージェントのエージェントディレクトリにある certs/public フォルダに貼り付けます。

オプション

  • PHP エージェントを使用して実行するアプリケーションは、ポッドで実行する必要があります。PHP エージェントポッドをスケールアップまたはスケールダウンできます。
  • プロキシは、単一の独立したポッドとして実行されます。サービスを介して PHP エージェントに公開されます。プロキシポッドをスケーリングまたは複製しないでください。

Kubernetes のプロキシ展開仕様の例

##Proxy Deployment
apiVersion: apps/v1 
kind: Deployment
metadata: 
  name: proxy-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: proxy
  template:
    metadata:
      labels:
        app: proxy
    spec:
      containers:
        - name: proxy
          image: appdynamics/php-proxy-x64:latest
          env:
            - name: APPDYNAMICS_CURVE_ENABLED
              value: "true"
            - name: APPDYNAMICS_TCP_COMM_PORT
              value: "3000"
            - name: APPDYNAMICS_TCP_COMM_HOST
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: APPDYNAMICS_TCP_PORT_RANGE
              value: "3000-3010"

##Proxy Service

apiVersion: v1
kind: Service
metadata:
  name:  proxy-service
spec:
  selector:
    app: proxy
  type: ClusterIP
  ports:
  - protocol: TCP
    name: port-1
    port:  3000
    targetPort:  3000
  - protocol: TCP
    name: port-2
    port:  3001
    targetPort:  3001
  - protocol: TCP
    name: port-3
    port:  3002
    targetPort:  3002
  - protocol: TCP
    name: port-4
    port:  3003
    targetPort:  3003

CODE

ポッドにエージェントをインストールするためのサンプルコマンド

./install.sh -a e2e-customer@59b661ac-720f-43ce-9b07-9d3bdf1cdb17 --auto-launch-proxy=0 --tcp-comm-host=proxy-service.default --tcp-comm-port=3000 --tcp-port-range=3000-3010 --curve-enabled CONTROLLER_HOST_NAME CONTROLLER_PORT APP_NAME TIER_NAME NODE_NAME 8090
CODE
  1. Kubernetes を使用している場合は、エージェント インストール コマンドで tcp comm host = proxy-service.default パラメータを設定します。 このパラメータで、proxy-service はプロキシサービスの名前、.default はデフォルトの名前空間です。
  2. 単一のプロキシは、レポートするエージェントのアプリケーション名が同じ場合にのみ、コントローラにデータを送信できます。