このページでは、Kubernetes アプリケーションを手動でインストゥルメント化するときに、APM コンテナとクラスタエージェントの相関関係を設定する方法について説明します。「Kubernetes」を参照してください。

APM 相関を確立すると、クラスタエージェントによってモニターされるアプリケーションコンテナが、[Application/Container] ビューの下のコントローラに表示されます。[Cluster Agent Pod] ダッシュボードでは、[APM Node] ダッシュボードへのリンクも [Pod Details] ページで提供されます。

Kubernetes 1.25 以降の場合

次の設定は、Kubernetes 1.25 以降の場合にのみ必要です。

エージェントをクラスタエージェントと関連付ける必要がある場合は、自動インストゥルメンテーションを有効にして、containerAppCorrelationMethodproxy に設定する必要があります。これは、エージェントがアプリケーションコンテナのコンテナ ID を取得するために必要です。 

前述の手順を使用して自動インストゥルメンテーションを有効にすると、自動インストゥルメンテーションはアプリケーションをインストゥルメント化しませんが、コンテナメタデータサーバーを起動してコンテナ ID を取得します。
nsToExcludeRegex パラメータを使用して、特定の名前空間を無視することを選択できます。

アプリケーション エージェントを Kubernetes 1.25 以降のクラスタエージェントと関連付けるには、次の手順を実行する必要があります。

  1. クラスタエージェントをバージョン 23.9 以降にアップグレードします
  2. アプリケーションが実行されているポッドに次の環境変数(env)を追加します。
    • APPDYNAMICS_CONTAINER_NAME:<インストゥルメント化されたコンテナの名前>
    • APPDYNAMICS_CONTAINERINFO_FETCH_SERVICEcluster-metadata-service.appdynamics:9090
    • APPDYNAMICS_POD_NAMESPACE:<アプリケーションポッドの名前空間>
  3. 構成ファイルspec セクションで、containerAppCorrelationMethod パラメータの値を proxy として設定します。 
  4. 構成ファイルを編集して、インストゥルメンテーション方式を Env として含めます。これにより、アプリケーションコンテナとクラスタエージェントの関連付けが有効になります。
    • (cluster-agent.yaml 内)instrumentationMethod: Env

      Sample cluster-agent.yaml

      apiVersion: cluster.appdynamics.com/v1alpha1
      kind: Clusteragent
      metadata:
        name: k8s-cluster-agent
        namespace: appdynamics
      spec:
        instrumentationMethod: Env 
      YML
    • (values.yaml 内)instrumentationConfigenabled: true

      Sample values.yaml

      deploymentMode: MASTER
      clusterAgent:
        nsToMonitorRegex: .*
      instrumentationConfig:
        enabled: true
        instrumentationMethod: Env 
      YML

      自動インストゥルメンテーションの有効化の詳細については、「自動インストゥルメンテーションの設定」を参照してください。


Kubernetes 1.25 未満の場合

次の設定は、Kubernetes 1.25 未満の場合にのみ適用されます。

この構成は、クラスタエージェントが実行されているクラスタ内のアプリケーションを手動でインストゥルメント化するために init コンテナまたは Dockerfile を使用する場合にのみ必要です。クラスタエージェントの自動インストゥルメンテーションを使用すると、APM コンテナの関連付けが自動的に処理されます。「クラスタエージェントを使用したアプリケーションの自動インストゥルメンテーション」を参照してください。

APM コンテナの関連付けでは、特定の言語エージェントの UNIQUE_HOST_ID (またはAPPDYNAMICS_AGENT_UNIQUE_HOST_ID) プロパティを使用します。このプロパティの設定方法の例については、次の言語固有のコンテナインストールページを参照してください。

次の表に、ランタイム、プラットフォーム、およびアプリケーション エージェントのタイプに基づいて UNIQUE_HOST_ID 値の割り当てに必要なコマンドを示します。

プラットフォーム(Platform)コンテナ ランタイムコンテナ ID のコマンド
KubernetesDocker
UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\1/p' /proc/self/cgroup)

OpenShift 3.11

Docker
UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/docker-(.{12}).*/\1/p' /proc/self/cgroup)

OpenShift 4.x

CRI-O
UNIQUE_HOST_ID=$(cat /proc/self/cgroup | head -1 | awk -F '/' ' {print $NF}' | awk -F '-' '{print $2}' | cut -c 1-12) ; if [ -z $UNIQUE_HOST_ID]; then UNIQUE_HOST_ID=$(cat /proc/self/cgroup | head -1 | awk -F '/' '{print $NF} ' | cut -c 1-12) ; fi ;

Docker を使用した Kubernetes

エージェントが自動的に UNIQUE_HOST_ID 値を取得するため、Java APM 相関はすぐに機能します。UNIQUE_HOST_ID プロパティを持つ他のエージェントについては、UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/-(.{12}).*/\1/p' /proc/self/cgroup) コマンドを使用してプロパティを設定する必要があります。

uniqueHostId プロパティを持つすべての言語エージェントに対して、アプリケーションイメージの作成時にこのメソッドを使用してプロパティを設定します。

UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\1/p' /proc/self/cgroup)
JAVA_OPTS="$JAVA_OPTS -Dappdynamics.agent.uniqueHostId=$UNIQUE_HOST_ID"
YML

アプリケーションイメージを変更できない場合は、command 属性を変更して、Kubernetes の導入仕様に UNIQUE_HOST_ID を割り当てることができます。

command: ["/bin/sh"]
args: ["-c", "UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\1/p' /proc/self/cgroup) && java -Dappdynamics.agent.uniqueHostId=$UNIQUE_HOST_ID $JAVA_OPTS -jar /java-services.jar"]
YML

このアプローチは、アプリケーションのエントリポイントが既知であることを意味します。この例では、元のエントリポイントは次のとおりです。

java $JAVA_OPTS -jar /java-services.jar
YML

Docker ランタイムを使用した OpenShift 3.11

Docker ランタイムを使用した OpenShift v3.10 および v3.11 で UNIQUE_HOST_ID プロパティを持つすべての言語エージェントに対して、アプリケーションイメージの作成時にこのメソッドを使用してプロパティを設定します。

UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/docker-(.{12}).*/\1/p' /proc/self/cgroup)
YML

アプリケーションイメージを変更できない場合は、command 属性を変更して、OpenShift v3.10 または v3.11 の導入仕様に UNIQUE_HOST_ID を割り当てることができます。

command: ["/bin/sh"]
args: ["-c", "UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/docker-(.{12}).*/\1/p' /proc/self/cgroup) && java -Dappdynamics.agent.uniqueHostId=$UNIQUE_HOST_ID $JAVA_OPTS -jar /java-services.jar"]
YML

このアプローチは、アプリケーションのエントリポイントが既知であることを意味します。この例では、元のエントリポイントは次のとおりです。

java $JAVA_OPTS -jar /java-services.jar
YML

CRI-O ランタイムを使用した OpenShift 4.x

CRI-O ランタイムを使用した OpenShift v4.x で UNIQUE_HOST_ID プロパティを持つすべての言語エージェントに対して、アプリケーションイメージの作成時にこのメソッドを使用してプロパティを設定します。

UNIQUE_HOST_ID=$(cat /proc/self/cgroup | head -1 | awk -F '/' '
{print $NF}' | awk -F '-' '{print $2}' | cut -c 1-12) ; if [ -z $UNIQUE_HOST_ID ]; then UNIQUE_HOST_ID=$(cat /proc/self/cgroup | head -1 | awk -F '/' '{print $NF}' | cut -c 1-12) ; fi ;
YML

アプリケーションイメージを変更できない場合は、command 属性を変更して、OpenShift v4.x の導入仕様に UNIQUE_HOST_ID を割り当てることができます。

command: ["/bin/sh"]
args: ["-c", "UNIQUE_HOST_ID=$(cat /proc/self/cgroup | head -1 | awk -F '/' '{print $NF}' | awk -F '-' '{print $2}' | cut -c 1-12) ; if [ -z $UNIQUE_HOST_ID ]; then UNIQUE_HOST_ID=$(cat /proc/self/cgroup | head -1 | awk -F '/' '{print $NF}' | cut -c 1-12) ; fi ;  java -Dappdynamics.agent.uniqueHostId=$UNIQUE_HOST_ID $JAVA_OPTS -jar /java-services.jar"]
YML

このアプローチは、アプリケーションのエントリポイントが既知であることを意味します。この例では、元のエントリポイントは次のとおりです。

java $JAVA_OPTS -jar /java-services.jar
YML