このページでは、Docker または Kubernetes コンテナ化環境に .NET Agent for Linux をインストールする方法について説明します。コンテナを使用して .NET Agent for Linux をインストールするには、次の 3 つの方法があります。

自動インストゥルメンテーションを使用する

このシナリオは、クラスタエージェントがインストールされている Kubernetes で実行されているコンテナに適用されます。

このオプションでは、クラスタエージェントの自動インストゥルメンテーション機能を使用します。これは、最高の自動化レベルと最もシンプルな操作エクスペリエンスを提供することから、Kubernetes クラスタで .NET アプリケーションをインストゥルメント化する場合に推奨されるオプションです。

開始するには、「クラスタエージェントを使用したアプリケーションの自動インストゥルメンテーション」を参照してください。

Init コンテナの使用

Init コンテナのインストールには、Kubernetes 環境が必要です。

Kubernetes の init コンテナを使用して、.NET エージェントをインストゥルメントできます。この方法では、実行時に init コンテナがエージェントバイナリをアプリケーションコンテナにコピーします。アプリケーションで使用される導入仕様では、次の 2 つのコンテナを参照します。

  • .NET エージェントバイナリを含まないイメージに基づくアプリケーションコンテナ
  • .NET エージェントバイナリのみを含むイメージに基づく 2 番目の init コンテナ

導入仕様は、これらの 2 つのコンテナを参照し、展開時に init コンテナからアプリケーションコンテナにエージェントバイナリをコピーするように更新されます。コピーが実行されると、init コンテナは終了します。

init コンテナを使用して .NET Agent for Linux バイナリをコピーするには、次の手順を実行します。

  1. .NET Core アプリケーションイメージの構築
  2. Linux Init コンテナイメージ用の .NET エージェントの構築
  3. 導入仕様への Init コンテナの追加
  4. .NET Agent for Linux の環境変数の設定
  5. APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数の設定
  6. コンテナへの AppDynamicsConfig.json ファイルのコピー

  7. (オンプレミスコントローラのみ)コンテナへのコントローラ証明書のコピー
  8. Init コンテナを使用するための設定例

.NET Core アプリケーションイメージの構築

.NET Core アプリケーションイメージを構築します。.NET Agent for Linux のバイナリは含めないでください。

Linux Init コンテナイメージ用の .NET エージェントの構築

.NET Agent for Linux イメージをアプリケーションイメージとは別にビルドします。このイメージは、複数の .NET Core アプリケーション展開環境で再利用できます。

または、init コンテナで Docker Hub の AppDynamics から事前に作成されたイメージを参照できます。

導入仕様への Init コンテナの追加

導入仕様を編集して必要なセクションを追加し、エージェントバイナリを init コンテナからアプリケーションイメージにコピーできるようにします。

導入仕様の次のスニペットは、必須の volumesvolumeMounts、および initContainer の定義を示しています。このコード例では、.NET Core アプリケーションイメージが dotnet-samples:aspnetapp にパブリッシュされ、init コンテナイメージが事前に構築されたイメージ(docker.io/appdynamics/dotnet-core-agent:<version>)を使用することを前提としています。ここで、<version> は .NET エージェントのバージョンです(例:21.5.0)。

kind: Deployment
spec:
  containers:
  - name: dotnet-app
    image: microsoft/dotnet-samples:aspnetapp
    volumeMounts:
    - mountPath: /opt/appdynamics
      name: appd-agent-repo
  initContainers:
  - name: appd-agent
	image: docker.io/appdynamics/dotnet-core-agent:<version>
    volumeMounts:
    - mountPath: /appdynamics
      name: appd-agent-repo
  volumes:
    - name: appd-agent-repo
      emptyDir: {}
CODE

.NET Agent for Linux の環境変数の設定

必要な .NET エージェント環境変数をすべて設定するには、「Kubernetes でエージェントを設定するためのベストプラクティス」に示す次の手順を実行する必要があります。

  1. ConfigMap を使用したアプリケーション サーバ エージェントの設定
  2. コントローラのアクセスキーへの秘密の使用
  3. 導入仕様でのアプリケーション固有の設定

ConfigMap を使用したアプリケーション サーバ エージェントの設定

  1. ConfigMap を使用して、名前空間内のアプリケーション間で共有する .NET Agent for Linux 環境変数を設定します。

    apiVersion: v1
    data:
      CORECLR_PROFILER: "{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
      CORECLR_ENABLE_PROFILING: "1"
      CORECLR_PROFILER_PATH: "/opt/appdynamics/libappdprofiler.so"
      APPDYNAMICS_AGENT_APPLICATION_NAME: "<value>"
      APPDYNAMICS_AGENT_ACCOUNT_NAME: "<value>"
      APPDYNAMICS_CONTROLLER_HOST_NAME: "<value>"
      APPDYNAMICS_CONTROLLER_PORT: "<value>"
      APPDYNAMICS_CONTROLLER_SSL_ENABLED: "<value>"
      APPDYNAMICS_AGENT_REUSE_NODE_NAME: "true"
      APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX: "<value>"
      # variables required to send transaction analytics data
      APPDYNAMICS_ANALYTICS_HOST_NAME: "<value>"
      APPDYNAMICS_ANALYTICS_PORT: "<value>"
      APPDYNAMICS_ANALYTICS_SSL_ENABLED: "<value>"
    kind: ConfigMap
    metadata:
      name: appd-dotnet-config 
    CODE

    分析ホスト、ポート、および ssl の設定は、分析エージェントの展開方法によって異なることに注意してください。オプションについては、「Kubernetes での分析の展開」を参照してください。

  2. (オプション)Alpine Linux コンテナで .NET Core アプリケーションを実行している場合は、ConfigMap で LD_LIBRARY_PATH を設定します。

    apiVersion: v1
    data:
      CORECLR_PROFILER: "{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
      CORECLR_ENABLE_PROFILING: "1"
      CORECLR_PROFILER_PATH: "/opt/appdynamics/libappdprofiler.so"
      LD_LIBRARY_PATH: "/opt/appdynamics"
      ...
    kind: ConfigMap
    metadata:
      name: appd-dotnet-config 
    CODE
  3. 名前空間に ConfigMap を適用します。

    kubectl -n dotnetapp apply -f appd-dotnet-config.yaml
    BASH
  4. 導入仕様を更新して、ConfigMap を参照します。

    spec:
      containers:
      - name: dotnet-app
        envFrom:
        - configMapRef:
            name: appd-dotnet-config
     ...
    YML

コントローラのアクセスキーへの秘密の使用

  1. kubectl を使用して秘密を作成します。

    kubectl -n dotnetapp create secret generic appd-agent-secret --from-literal=access-key=<access-key>
    BASH
  2. 導入仕様を更新して、秘密を参照します。

    spec:
      containers:
      - name: dotnet-app
        env:
        - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: appd-agent-secret
              key: access-key
     ...
    YML

導入仕様でのアプリケーション固有の設定

  1. 導入仕様でアプリケーション固有の階層名環境変数 APPDYNAMICS_AGENT_TIER_NAME を設定します。

    spec:
      containers:
      - name: dotnet-app
        env:
        - name: APPDYNAMICS_AGENT_TIER_NAME
          value: dotnet-service
    CODE

APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数のセットアップ

APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数は、.NET Agent for Linux のバージョン 20.7.0 以降でサポートされています。以前のバージョンでは、ランタイム値に基づいて AppDynamicsConfig.json でプロパティを設定する必要があります。この導入仕様の例を参照してください。


APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数を設定して、クラスタエージェントとの APM 相関を有効にします。値はランタイム値に依存するため、コンテナ起動コマンドで、このドキュメントに記載されている値を使用してこの環境変数を設定します。アプリケーション エージェントを手動で設定してクラスタエージェントと関連付けるたとえば、Docker ランタイムを使用する Kubernetes 環境では、次のように環境変数を設定します(export は必須です)。

kind: Deployment
spec:
  containers:
    image: microsoft/dotnet-samples:aspnetapp
    command: ["/bin/sh"]
    args: ["-c", "export APPDYNAMICS_AGENT_UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\\1/p' /proc/self/cgroup) && dotnet aspnetapp.dll"]
...
CODE

コンテナへの AppDynamicsConfig.json ファイルのコピー

一部の .NET Agent for Linux オプションは、AppDynamicsConfig.json ファイルで設定する必要があります。これには、outputtypeconsole に設定することが含まれます。これにより、エージェントログをログ集約ツールに送信しやすくなり、kubectl logs. を使用してログを表示しやすくなります。

  1. AppDynamicsConfig.json の内容に基づいて ConfigMap を作成します。

    $ kubectl -n dotnetapp create configmap appd-config --from-file=AppDynamicsConfig.json
    CODE
  2. 導入仕様を更新して、コンテナファイルシステムに AppDynamicsConfig.json ファイルを追加します。ConfigMap の内容を参照する volumesvolumeMounts を使用します。

    kind: Deployment
    spec:
      containers:
        image: microsoft/dotnet-samples:aspnetapp
        command: ["/bin/sh"]
        args: ["-c", "export APPDYNAMICS_AGENT_UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\\1/p' /proc/self/cgroup) && dotnet aspnetapp.dll"]
        volumeMounts:
        - name: appd-config
          subPath: AppDynamicsConfig.json  
          mountPath: /opt/appdynamics/AppDynamicsConfig.json
      volumes:
        - name: appd-config
          configMap:
            name: appd-config
    CODE

(オンプレミスコントローラのみ)コンテナへのコントローラ証明書のコピー

.NET Agent for Linux がオンプレミスコントローラと通信する場合は、コントローラ証明書をコンテナにコピーする必要があります。詳細については、.NETエージェント用SSLの有効化を参照してください。

  1. 証明書ファイルを参照する ConfigMap を定義します。導入仕様でボリュームマウントを使用して、ConfigMap の内容をコンテナにマウントします。

    $ kubectl create configmap appd-cert --from-file=cacerts
    CODE
  2. 導入仕様のスニペットに示すように、volumesvolumeMounts を使用して、コンテナファイルシステムに証明書ファイルを追加します。

    kind: Deployment
    spec:
      containers:
        image: microsoft/dotnet-samples:aspnetapp
        volumeMounts:
        - name: appd-cert
          subPath: cacerts  
          mountPath: /opt/appdynamics/cacerts
      volumes:
        - name: appd-cert
          configMap:
            name: appd-cert
    CODE
  3. ConfigMap で APPDYNAMICS_CONTROLLER_SSL_ENABLED および APPDYNAMICS_CONTROLLER_SSL_CERTFILE 環境変数を設定します。詳細については、.NET Agent for Linux の環境変数を参照してください。

    apiVersion: v1
    data:
      CORECLR_PROFILER: "{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
      CORECLR_ENABLE_PROFILING: "1"
      CORECLR_PROFILER_PATH: "/opt/appdynamics/libappdprofiler.so"
      APPDYNAMICS_CONTROLLER_SSL_ENABLED: true
      APPDYNAMICS_CONTROLLER_SSL_CERTFILE: /opt/appdynamics/cacerts
      ...
    kind: ConfigMap
    metadata:
      name: appd-dotnet-config 
    CODE

Init コンテナを使用するための設定例

この Dockerfile は、マルチステージビルドを使用して .NET Agent for Linux の init コンテナイメージを作成している例です。init コンテナを使用してエージェントバイナリをコピーする導入仕様の完全な例は、Github(dotnet-app.yaml)にあります。

Dockerfile の使用

このシナリオは、Docker および Kubernetes で実行されているコンテナに適用されます。

Dockerfile を使用して、作成時に .NET Agent for Linux を Docker イメージにコピーします。オプションを使用するには、アプリケーションと .NET Agent for Linux の両方のバイナリが含まれた単一のイメージを作成します。

Docker イメージの作成時にエージェントをアプリケーションイメージにコピーするには、次の手順を実行します。

  1. .NET Agent for Linux のダウンロードと解凍
  2. イメージへのエージェントバイナリのコピー
  3. .NET Agent for Linux の環境変数の設定
  4. APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数の設定
  5. イメージへの AppDynamicsConfig.json ファイルのコピー
  6. (オンプレミスコントローラのみ)コントローラ証明書のイメージへのコピー
  7. Dockerfile を使用するための設定例

.NET Agent for Linux のダウンロードと解凍

プログラムによって、またはダウンロードポータルから .NET Agent for Linux をダウンロードします。エージェントは zip ファイルとしてパッケージ化されます。シェルで、AppDynamics-DotNetCore-linux-x64 フォルダに解凍します。

$ unzip AppDynamics-DotNetCore-linux-x64-<version>.zip -d AppDynamics-DotNetCore-linux-x64
CODE

イメージへのエージェントバイナリのコピー

Dockerfile を編集して、パッケージ化されていないエージェントバイナリをターゲットフォルダにコピーします。

COPY AppDynamics-DotNetCore-linux-x64/ /opt/appdynamics/
CODE

.NET Agent for Linux の環境変数の設定

非 Kubernetes 環境でアプリケーションを実行している場合(たとえば dockerrun を使用)、Dockerfile でエージェント環境変数を設定します。次に例を示します。

ENV CORECLR_PROFILER="{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
ENV CORECLR_ENABLE_PROFILING=1
ENV CORECLR_PROFILER_PATH="/opt/appdynamics/libappdprofiler.so"
ENV APPDYNAMICS_AGENT_APPLICATION_NAME=<value>
ENV APPDYNAMICS_AGENT_TIER_NAME=<value>
ENV APPDYNAMICS_AGENT_ACCOUNT_NAME=<value>
ENV APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY=<value>
ENV APPDYNAMICS_CONTROLLER_HOST_NAME=<value>
ENV APPDYNAMICS_CONTROLLER_PORT=<value>
ENV APPDYNAMICS_CONTROLLER_SSL_ENABLED=<value>
ENV APPDYNAMICS_AGENT_REUSE_NODE_NAME=true
ENV APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX=<value>
# variables required to send transaction analytics data
ENV APPDYNAMICS_ANALYTICS_HOST_NAME=<value>
ENV APPDYNAMICS_ANALYTICS_PORT=<value>
ENV APPDYNAMICS_ANALYTICS_SSL_ENABLED=<value>
CODE

Kubernetes アプリケーションの場合は、これらの環境変数を Dockerfile から除外し、ConfigMaps と秘密を使用して設定します。 

再利用ノード名とプレフィックス環境変数は、同じアプリケーションイメージの複数のコンテナインスタンスに一意のノード名を付けるようサポートするために必要です。「.NET Agent for Linux の環境変数」を参照してください。分析ホスト、ポート、および ssl の設定は、分析エージェントの展開方法によって異なります。オプションについては、「Kubernetes での分析の展開」を参照してください。

Alpine Linux コンテナで .NET Core アプリケーションを実行している場合は、LD_LIBRARY_PATH をエージェントバイナリの場所に設定します。Docker アプリケーションの場合は、Dockerfile で LD_LIBRARY_PATH を設定します。

ENV CORECLR_PROFILER="{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
ENV CORECLR_ENABLE_PROFILING=1
ENV CORECLR_PROFILER_PATH="/opt/appdynamics/libappdprofiler.so"
ENV LD_LIBRARY_PATH="/opt/appdynamics"
...
CODE

Kubernetes アプリケーションの場合は、ConfigMap で LD_LIBRARY_PATH を設定します。

APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数のセットアップ

APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数は、.NET Agent for Linux のバージョン 20.7.0 以降でサポートされています。以前のバージョンでは、ランタイム値に基づいて AppDynamicsConfig.json でプロパティを設定する必要があります。これは、コンテナの起動スクリプトで実行する必要があります。


Kubernetes アプリケーションの場合は、APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数を設定して、クラスタエージェントとの APM 相関を有効にします。この値はランタイム値に依存するため、アプリケーション エージェントを手動で設定してクラスタエージェントと関連付ける」 に記載されている値を使用してコンテナのスタートアップコマンドでこの環境変数を設定します。たとえば、Docker ランタイムを使用する Kubernetes 環境では、次のように環境変数を設定します(export は必須です)。

kind: Deployment
spec:
  containers:
    image: microsoft/dotnet-samples:aspnetapp
    command: ["/bin/sh"]
    args: ["-c", "export APPDYNAMICS_AGENT_UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\\1/p' /proc/self/cgroup) && dotnet aspnetapp.dll"]
...
BASH

イメージへの AppDynamicsConfig.json ファイルのコピー

一部の .NET Agent for Linux オプションは、AppDynamicsConfig.json ファイルで設定する必要があります。これには、outputtypeconsole に設定することが含まれます。これにより、エージェントログをログ集約ツールに送信しやすくなります。AppDynamicsConfig.json ファイルを作成し、必要な構成を設定します。 

  1. AppDynamicsConfig.json をイメージにコピーするように Dockerfile を編集します。

    COPY ./AppDynamicsConfig.json /opt/appdynamics/AppDynamicsConfig.json
    CODE

(オンプレミスコントローラのみ)コントローラ証明書のイメージへのコピー

オンプレミスコントローラと通信する .NET Agent for Linux エージェントの場合は、コントローラ証明書をイメージにコピーする必要があります。詳細については、.NETエージェント用SSLの有効化を参照してください。

  1. オンプレミス証明書を含むファイルをイメージにコピーするように Dockerfile を編集します。次に例を示します。

    COPY ./onprem-cacerts /opt/appdynamics/conf/cacerts
    CODE
  2. APPDYNAMICS_CONTROLLER_SSL_ENABLED および APPDYNAMICS_CONTROLLER_SSL_CERTFILE 環境変数を設定します。詳細については、.NET Agent for Linux の環境変数を参照してください。Docker アプリケーションの場合は、Dockerfile でこれらの環境変数を設定します。

    ENV APPDYNAMICS_CONTROLLER_SSL_ENABLED="true"
    ENV APPDYNAMICS_CONTROLLER_SSL_CERTFILE="/opt/appdynamics/cacerts"
    CODE

    Kubernetes アプリケーションの場合は、ConfigMap でこれらの環境変数を設定します。 

Dockerfile を使用するための設定例

この Dockerfile は、アプリケーションとエージェントの両方のバイナリが含まれる単一のイメージを作成し、この Kubernetes 導入仕様はその Docker イメージを参照します。