Kubernetes クラスタに展開されている Java アプリケーション、.NET コア(Linux)アプリケーション、または Node.js アプリケーションに必須のエージェントを動的に追加するには、自動インストゥルメンテーション オプションを使用します。このオプションを使用するには、Java アプリケーションが実行されているクラスタにクラスタエージェントを展開する必要があります。「クラスタエージェントを使用した Kubernetes のモニターリング」を参照してください。

cluster-agent.yaml ファイルを編集することにより、名前空間内の特定の名前空間や特定の展開に対して自動インストゥルメンテーションを有効にすることができます。 

クラスタエージェントがサポートされているアプリケーションの展開を検出し、その展開が名前空間および展開が設定された自動インストゥルメンテーション ルールと一致すると、クラスタエージェントはアプリケーションの導入仕様を変更します。クラスタエージェントは、AppDynamics .NET、Node.js、または Java エージェントイメージを含む init コンテナを展開にアタッチします。アプリケーションが再起動すると、必須エージェントがアプリケーションコンテナにコピーされます。これで、アプリケーションコンテナが AppDynamics エージェント(Node.js エージェント、.NET Agent for Linux、または Java エージェント)を参照するようになり、自動インストゥルメント化されたアプリケーションとなります。「サポートされるアプリケーションの自動インストゥルメンテーションの有効化」を参照してください。

(Java の場合)自動インストゥルメンテーション機能は、次の Java フレームワークで動作することがテストおよび認定されています。

  • Tomcat
  • Spring 
  • GlassFish
  • JBoss Wildfly

自動インストゥルメンテーションは、-javaagent 引数をサポートする環境変数を提供するすべての Java アプリケーションで機能します。Java の展開要件」を参照してください。

自動インストゥルメンテーションのサポート対象アプリケーション

次の自動インストゥルメンテーションを実行できます。

  • Node.js エージェントと Node.js アプリケーション
  • Linux での .NET Core アプリケーションと .NET Agent for Linux
  • Java アプリケーションと Java エージェント
  • .NET Core および Node.js アプリケーションでは、自己署名証明書ではなく、CA によって署名された証明書のみがサポートされます。 コントローラが自己署名証明書を使用している場合は、Java アプリケーションの自動インストゥルメンテーションのみがサポートされます。
  • カスタム SSL 証明書を使用するには、クラスタエージェントの構成を確実に行ってオンプレミスのコントローラに SSL を使用します。この証明書は、インストゥルメンテーション エージェントによって使用されます。「オンプレミスのコントローラに SSL を使用するためのクラスタエージェントの構成」を参照してください。
  • Node.js アプリケーションの場合は、shim.js ファイル内の証明書の次のパスを更新し、customAgentConfigSource パラメータ内でこの ConfigMap を使用する必要があります。このパラメータの詳細については、「インストゥルメンテーション ルールのためのクラスタエージェントの構成」を参照してください。
    certificateFile: “/opt/appdynamics-nodejs/custom-ssl.pem”

要件

Java の展開要件

  • 環境変数を使用して Java コマンドに -javaagent 引数を含めることをサポートする Java アプリケーション。
  • 単一の JVM プロセスを実行する単一のコンテナを持つポッドを使用した Java 展開。複数のコンテナを使用している場合、クラスタエージェントは導入仕様で指定された最初のコンテナをインストゥルメント化します。

Node.js の展開要件

  • アプリケーションで、Node.js 8.6 以降のバージョンを使用する必要があります。
  • 使用しているアプリケーションのバージョンとオペレーティングシステムのディストリビューションに基づいて、Docker リポジトリから正しい Node.js エージェントのイメージを使用していることを確認します。
    たとえば、20.5.0 Node.js エージェントが必要で、アプリケーションで Node.js バージョン 10 の Alpine Linux ディストリビューションを使用している場合は、20.5.0-alpinev10  イメージを使用できます。必要なオペレーティングシステムのディストリビューションと必要なバージョンを取得するには、dockerhub を参照してください。 
  • 自動インストゥルメンテーションの設定時に、デフォルトのトランザクションデータを分析エージェントに送信するように Node.js エージェントを設定する必要がある場合は、分析ホストとポートを設定します。

.NET Core の要件(Linux)

  • 自動インストゥルメンテーションの設定時に、デフォルトのトランザクションデータを分析エージェントに送信するように .NET エージェントを設定する必要がある場合は、分析ホストとポートを設定します。
  • 使用しているアプリケーションのバージョンとオペレーティングシステムのディストリビューションに基づいて、Docker リポジトリから正しい .NET エージェントイメージを使用していることを確認します。
    たとえば、20.5.0 .NET Agent for Linux が必要で、アプリケーションで Alpine Linux ディストリビューションを使用している場合は、20.5.0-alpine イメージを使用できます。必要なオペレーティングシステムのディストリビューションと必要なバージョンを取得するには、dockerhub を参照してください。 

前提条件

  • 最新の cluster-agent-operator.yaml がクラスタに展開され、クラスタエージェントに必要な権限が付与されている。「Kubernetes での AppDynamics オペレータの展開」または「Red Hat OpenShift での AppDynamics オペレータの展開」を参照してください
  • クラスタエージェントがクラスタに展開されている(「クラスタエージェントのインストール」を参照)
  • 以前に必須エージェントでインストゥルメント化されていない少なくとも 1 つの Java アプリケーションがクラスタに展開されている
  • 自動インストゥルメント化されるアプリケーションの数に基づいて、コントローラが十分なエージェントライセンスを持つ
  • (Java の場合)Java エージェントのリソース要件に基づいて、ポッドに設定されるメモリの要求または制限を調整する(「Java エージェントのインストール」を参照)
  • ポッドの再起動を処理するのに十分なクラスタ容量があることを確認する。特に自動インストゥルメント化するポッドが多数ある場合に、ポッドの削除と再作成をサポートするには、初期フェーズで追加の CPU とメモリ容量が必要になります。自動インストゥルメンテーション中に、影響を受ける展開がローリング更新されます。その結果、新しいポッドが作成され、古いポッドが終了している間、クラスタ内のポッドの数が一時的に増加します。必要な追加キャパシティは、展開する数とローリング更新戦略の設定(最大サージ% など)によって異なります。自動インストゥルメンテーションをオンにする前に、十分な CPU およびメモリ容量があることを確認します。展開のサブセットを対象とするインストゥルメンテーション ルールを段階的に追加することで、インストゥルメンテーションのロールアウトを制御できます。

権限(Permissions)

自動インストゥルメンテーションを実装するために、クラスタエージェントに次の権限が必要になります。

  • 導入仕様の変更
  • ポッドでのコマンドの実行
  • 名前空間のアクセスキーを管理するためのシークレットの作成または更新

デフォルトでは、cluster-agent-operator.yaml ファイルを展開するときにこれらの権限が追加されます。

サポートされるアプリケーションの自動インストゥルメンテーションの有効化

クラスタに展開された Java アプリケーションの自動インストゥルメンテーションを有効にするには、インストゥルメンテーション ルールを作成し、必要なパラメータを定義する必要があります。

自動インストゥルメンテーションを有効にするには、次の手順を実行します。

  1. コントローラのアクセスキーと API クライアントのログイン情報を使用して、クラスタエージェントのシークレットを作成します。

    kubectl -n appdynamics create secret generic cluster-agent-secret --from-literal=controller-key=<access-key> --from-literal=api-user="<username>@<customer>:<password>"

    ここで、api-user は、Administrator として割り当てられたロールでコントローラにアクセスできる任意のユーザーです。api-user は、ポッドの削除時にノードの履歴をマークするために必要です。

    api-user リテラルを使用せずにアクセスキーがすでに作成されている場合は、そのアクセスキーを削除してから再作成します。api-user は、ポッドの削除時にノードの履歴をマークするために必要です。

  2. 自動インストゥルメンテーション用の cluster-agent.yaml ファイルを構成します。次の構成プロパティは必須です。
    1. instrumentationMethod:インストゥルメンテーションを有効にするには、値を Env に設定します。
    2. nsToInstrumentRegex:モニターする名前空間を構成します。
    3. instrumentationRules:自動インストゥルメンテーション ルールと子プロパティを指定します。 
    • 展開が instrumentationRules 内のプロパティと一致しない場合、自動インストゥルメンテーションは有効になりません。 
    • instrumentationRules 内のルールの選択に使用されるパラメータに値が指定されていない場合、クラスタエージェントは、「自動インストゥルメンテーションのためのクラスタエージェントの構成」で指定される対応するデフォルト値を使用します。対応するデフォルト値がない場合、自動インストゥルメンテーションは有効になりません。

    自動インストゥルメンテーションのためのクラスタエージェントの構成」を参照してください

  3. kubectl を使用して、更新された cluster-agent.yaml を適用します。

    kubectl apply -f cluster-agent.yaml

    更新された cluster-agent.yaml ファイルを適用すると、アプリケーションに関連付けられた展開ロールアウト戦略に基づいて、関連するポッドとコンテナが再起動されます。

インストゥルメンテーションが正常に完了した場合でも、ポッドアノテーションで Node.js および .NET(Linux)アプリケーションの APPD_POD_INSTRUMENTATION_STATEfailed と表示されることがあります。インストゥルメンテーションが正常に完了したかどうかを確認するには、導入仕様を参照してください。

AppDynamics アプリケーションの命名オプション

コントローラのアプリケーション ダッシュボードでアプリケーションに名前を付けるには、3 つのアプリケーション命名戦略を使用できます。次のいずれかの値に appNameStrategy  プロパティを割り当てて、戦略を選択します。

手動

デフォルトでは appNameStrategymanual となり、 defaultAppName または  appName パラメータを使用してアプリケーション名を設定します。

  • defaultAppName が指定されている場合は、インストゥルメンテーション ルールで上書きされない限り、これを使用します。
  • appName がインストゥルメンテーション ルールで指定されている場合は、それを使用します。

たとえば、次の仕様で、ECommerceecom および groceries 名前空間に適用されるデフォルトのアプリケーション名であり、BookStorebooks 名前空間に適用されるアプリケーション名です。

apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<cluster-name>"
  # ...
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom|books|groceries
  appNameStrategy: manual
  defaultAppName: ECommerce
  instrumentationRules:
    - namespaceRegex: books
      appName: BookStore
YML

ラベル

このオプションでは、アプリケーション名の戦略として label パラメータを使用します。ラベルオプションを使用するには、appNameLabel パラメータに値を指定します。appNameLabel 値は、アプリケーションの導入仕様で指定されたラベルを参照します。  

  • spec.appNameLabel が指定されている場合は、インストゥルメンテーション ルールで上書きされない限り、これを使用します。
  • appNameLabel がインストゥルメンテーション ルールで指定されている場合は、それを使用します。

たとえば、次の仕様では、導入仕様のラベル appname を使用して ecomgroceries 名前空間のアプリケーション名を設定し、ラベル appbooks 名前空間で使用します。

apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<cluster-name>"
  # ...
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom|books|groceries
  appNameStrategy: label
  appNameLabel: appname
  instrumentationRules:
    - namespaceRegex: books
      appNameLabel: app
YML

次の導入仕様のスニペットに示すようにラベル appname を設定する ecom  または groceries 名前空間に導入されたアプリケーションの場合、コントローラのアプリケーション ダッシュボードで eCommerce アプリケーションにレポートされます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecom-app
  labels:
    appname: eCommerce
spec:
...
YML


名前空間

このオプションでは、アプリケーション名の戦略として namespace パラメータを使用します。このオプションを使用すると、コントローラのアプリケーション ダッシュボードでアプリケーションが展開されている名前空間名をアプリケーション名として使用できます。

次の仕様では、ecombooks、および groceries 名前空間の各アプリケーションで、展開先の名前空間に基づいてアプリケーション名を使用します。

apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<cluster-name>"
  # ...
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom|books|groceries
  appNameStrategy: namespace
YML


自動インストゥルメンテーションの無効化

デフォルトでは、アプリケーションの自動インストゥルメンテーションは無効になっています。すでに自動インストゥルメンテーションを有効にしていて、特定の名前空間に対して無効にする場合は、nsToInstrumentRegex からその名前空間を削除します。自動インストゥルメンテーションを完全に無効にするには、instrumentationMethodNone に設定します。

ポッドの再起動の影響を最小化

enable」の手順を使用して自動インストゥルメンテーションを有効にすると、展開に関連付けられた展開ロールアウト戦略に基づいて、関連するポッドが再起動されます。この再起動により、ポッドが削除および再作成されるため、クラスタに大きな影響を与える可能性があります。多数のポッドの再起動による影響を軽減するため、クラスタエージェントではデフォルトで 2 つの同時自動インストゥルメンテーション タスクのみを許可しています。後続の展開(resourcesToInstrument)は、インストゥルメント化された展開のロールアウト後に自動インストゥルメント化されます。ただし、パラメータ numberOfTaskWorkers を設定し、設定に基づいて同時自動インストゥルメンテーション タスクの数を指定できます。

自動インストゥルメンテーションのためのクラスタエージェントの構成

自動インストゥルメンテーション用に、cluster-agent.yaml ファイルで次の構成パラメータがサポートされています。クラスタエージェントでサポートされているその他の構成パラメータについては、「クラスタエージェントの設定」を参照してください。

パラメータ名

デフォルト値

説明

appNameStrategy手動

AppDynamics アプリケーションの名前を指定するオプション。このパラメータには、次のいずれかの値を指定できます。

  • 手動
  • 名前空間
  • ラベル

このパラメータの使用方法の詳細については、「AppDynamics アプリケーションの命名オプション」を参照してください。

appNameLabel
このラベルの値は、AppDynamics アプリケーション名になります。 
defaultAnalyticsHost

分析エージェントのホスト名。

このパラメータは、Node.js エージェントまたは .NET エージェントでデフォルトのトランザクションデータを分析エージェントに送信する必要がある場合に必要となります。

デフォルト値は、instrumentationRules 設定によって上書きされない限り、すべてのインストゥルメント化されたリソースに適用されます。

defaultAnalyticsPort

分析エージェントのリスニングポート。

たとえば、分析エージェントがポート 9090 でリッスンしている場合、このパラメータの値は 9090 です。

デフォルト値は、instrumentationRules 設定によって上書きされない限り、すべてのインストゥルメント化されたリソースに適用されます。

このパラメータは、デフォルトのトランザクションデータを分析エージェントに送信するために Node.js または .NET エージェントを必要とする場合に、defaultAnalyticsHost とともに必要となります。

defaultAnalyticsSslEnabled

この値は、分析エージェントポートが SSL 対応かどうかに基づいています。ポートが SSL 対応の場合は値を true として指定し、非対応の場合は false として指定します。

Node.js または .NET エージェントでデフォルトのトランザクションデータを分析エージェントに送信する必要がある場合は、defaultAnalyticsPort および defaultAnalyticsHost とともにこのパラメータが必要となります。

デフォルト値は、instrumentationRules 設定によって上書きされない限り、すべてのインストゥルメント化されたリソースに適用されます。

defaultAppName

""コントローラに報告するためにエージェントによって使用されるアプリケーション名。これは必須です。
defaultCustomConfig

このパラメータは、Java アプリケーションに固有です。

アプリケーション フレームワークでインストゥルメンテーションに特定の設定が必要な場合は、カスタムシステムプロパティを追加できます。

この値は、他の Java エージェントプロパティとともに設定された env or defaultEnv 変数に追加されます。

defaultContainerMatchString

これは、インストゥルメント化するコンテナを選択するための正規表現値です。このパラメータを使用するには、インストゥルメンテーション ルールで指定された instrumentContainer 内で select オプションを使用する必要があります。

このパラメータとともに select オプションを使用すると、クラスタエージェントは正規表現値に一致するコンテナをインストゥルメント化します。

defaultEnv

JAVA_TOOL_OPTIONS

このパラメータは、Java アプリケーションに固有です。

-javaagent 引数とアプリケーション エージェントのシステムプロパティが追加される環境変数。

これを上書きして、展開に最適な他の環境を使用することができます

defaultInstrumentationLabelMatch


[ ]

インストゥルメンテーションのためのマークが付けられた特定の展開ラベル。

このパラメータは、インストゥルメント化する key-value ペアのリストを受け入れます。

インストゥルメンテーションには、少なくとも 1 つのラベルを一致させる必要があります。

次に例を示します。

defaultInstrumentationLabelMatch:
- label1: value1

- label1: value2

- label2: value2

たとえば、label1: value2 のみが一致する場合、インストゥルメンテーションは期待どおりに機能します。

defaultInstrumentMatchString

.*

インストゥルメンテーションの対象になる展開の名前。

このパラメータは、instrumentationRules 内で指定された matchstring パラメータのデフォルト値として使用されます。matchstring が指定されていない場合、クラスタエージェントはこのパラメータ値を使用します。

このパラメータは、正規表現として展開名を受け入れます。

インストゥルメント化する展開が複数ある場合は、スペースを使用せずに名前を "|" で区切ることができます。

デフォルトでは、このパラメータは nsToInstrumentRegex によって構成されたすべての展開をインストゥルメント化します。したがって、インストゥルメンテーション ルールの matchString に値が指定されておらず、このパラメータに値を指定しない場合、クラスタエージェントはすべての展開をインストゥルメント化します。

imageInfo

java:
  image: "docker.io/appdynamics/java-      agent:latest"
  agentMountPath: "/opt/appdynamics"
  imagePullPolicy: "IfNotPresent"
CODE
dotnetcore:
    image: "docker.io/appdynamics/dotnet-core-agent:latest"
    agentMountPath: /opt/appdynamics
    imagePullPolicy: "IfNotPresent"
CODE
nodejs:
 image: "docker.io/appdynamics/nodejs-agent:20.8.0-stretch-slimv14"
 agentMountPath: /opt/appdynamics
 imagePullPolicy: "IfNotPresent"
CODE

Node.js エージェント、.NET Agent for Linux、および Java エージェントがプルされた Docker リポジトリ。

次の値をサポートしています。

  • image:エージェントイメージの場所、およびそのtag/version
  • agentMountPath:イメージファイルシステム内のイメージアーティファクトの場所。デフォルトは [/opt/appdynamics] です。
    パスが異なる場合は、この構成を変更する必要があります。
  • imagePullPolicy:エージェントの Docker イメージに必要なプルポリシー。要件に基づいて、次のプルポリシーのいずれかを選択できます。
      • Always

      • IfNotPresent

      • なし

    このパラメータは、自動インストゥルメンテーション中に追加される init コンテナで使用されます。

instrumentationMethod

None

アプリケーションのインストゥルメント化に使用されるインストゥルメンテーション方式。

次の値をサポートしています。

  • None:インストゥルメンテーションは無効になります
  • Env:インストゥルメンテーション プロパティをコンテナ環境変数にアタッチします。値が設定されていない場合、インストゥルメンテーションは開始されません。

instrumentationRules

[ ]

これは、自動インストゥルメンテーションを有効にするための必須パラメータです。
特定のインストゥルメンテーション ルールのリストが記述されています。ルールは 1 つまたは複数の名前空間に適用できます。また、展開名とラベルに基づいてフィルタ処理できます。インストゥルメンテーション ルールは細かく設定でき、特定の展開を対象にすることをサポートできます。

インストゥルメンテーション ルールのためのクラスタエージェントの構成」を参照してください。

nsToInstrumentRegex

""

必須です。値を指定しない場合、自動インストゥルメンテーションは機能しません。

正規表現としてインストゥルメント化される名前空間を指定します。

インストゥルメント化する名前空間が複数ある場合は、スペースを使用せずに "|" を使用して名前空間を区切ります。

デフォルトでは、名前空間はインストゥルメント化されません。

numberOfTaskWorkers 2

同時に自動インストゥルメント化される展開数のレート制限を設定します。

この値を大きくすると、クラスタ内でのポッドの同時再起動数が増加する可能性があります。

netvizInfo

bciEnabled: true

port: 3892


ネットワークの可視性のアプリケーション エージェントnetviz)を構成するには、(このパラメータの設定に加えて)ネットワークエージェントを個別に展開する必要があります。
ネットワークエージェントをインストールする手順については、「Kubernetes を使用したネットワークの可視性」を参照してください。

デフォルトでは、netviz が有効になっています。ネットワークエージェントが存在しない場合、このプロパティは影響を与えません。
要件に応じて netviz エージェントを有効または無効にできます。

次の値をサポートしています。

  1. bciEnablednetviz が有効になっているかどうかを示すブール型のフラグ。
  2. port:ネットワークエージェントがリッスンしているポート(デフォルトは 3892))。デフォルトポート以外のポートでネットワークエージェントを実行している場合にのみ、この値を上書きします。

runAsGroup

0

アプリケーションコンテナを非ルートユーザとして構成した場合は、対応するグループのグループ ID(GID)を提供します。

runAsGroup は、エージェント アーティファクトに適切なファイル権限を設定するために使用されます。

The デフォルト値 runAsGroup は、instrumentationRules 設定によって上書きされない限り、すべてのインストゥルメント化されたリソースに適用されます。

runAsUser

0

アプリケーションコンテナを非ルートユーザとして構成した場合は、対応するユーザのユーザ ID(UID)を提供します。

runAsUser は、エージェント アーティファクトに適切なファイル権限を設定するために使用されます。

デフォルト値 runAsUser は、instrumentationRules 設定によって上書きされない限り、すべてのインストゥルメント化されたリソースに適用されます。

resourcesToInstrumentDeployment

クラスタエージェントは、このパラメータにリストされているリソースをインストゥルメント化します。デフォルト値は Deployment です。StatefulSet をインストゥルメント化する必要がある場合は、StatefulSet をリストに追加します。

たとえば、Deployments および StatefulSet をインストゥルメント化するには、次のように設定します。

resourcesToInstrument:

- Deployment
- StatefulSet

インストゥルメンテーション ルールのためのクラスタエージェントの構成

特定の名前空間または展開の構成をさらにカスタマイズするために、インストゥルメンテーション ルールを使用できます。ルールを作成するには、この表の instrumentationRules プロパティと子プロパティを使用します。特定の名前空間のデフォルトのインストゥルメンテーション ルールを上書きするには、これらのプロパティを使用します。さらに、これらを使用して、名前空間ごとに異なるコントローラ アプリケーション名とエージェントバージョンを割り当てることができます。

クラスタエージェントは、namespaceRegexmatchString,、および labelMatch の組み合わせを使用して、最初に一致したインストゥルメンテーション ルールを選択します。ルールが一致しない場合、構成はこれらのパラメータで指定されているデフォルト値に戻ります。

  • nsToInstrumentRegex
  • defaultInstrumentationLabelMatch
  • defaultInstrumentMatchString

たとえば、インストゥルメンテーション ルール -matchString "<string>" が、クラスタ エージェント コンフィギュレーション ファイルに追加されたとします。

instrumentationRules:
    - matchString: "<string>"

展開の名前がこの文字列と一致する場合は、instrumentationRules の下の残りのパラメータが適用されます。文字列が一致しない場合、自動インストゥルメンテーションは停止します。パラメータがルール内で定義されない場合、クラスタエージェントのデフォルトは、パラメータ nsToInstrumentRegex, defaultInstrumentationLabelMatch, および defaultInstrumentMatchString になり、インストゥルメンテーション ルールが決定されます。

パラメータ名

デフォルト値

説明

analyticsHost

分析エージェントのホスト名。

このパラメータは、Node.js エージェントまたは .NET エージェントでデフォルトのトランザクションデータを分析エージェントに送信する必要がある場合に必要となります。

analyticsPort

分析エージェントのリスニングポート。

たとえば、分析エージェントがポート 9090 でリッスンしている場合、このパラメータの値は 9090 です。

このパラメータは、デフォルトのトランザクションデータを分析エージェントに送信するために Node.js または .NET エージェントを必要とする場合に、defaultAnalyticsHost とともに必要となります。

analyticsSslEnabled

この値は、分析エージェントポートが SSL 対応かどうかに基づいています。ポートが SSL 対応でない場合は、値を false と指定します。

Node.js または .NET エージェントでデフォルトのトランザクションデータを分析エージェントに送信する必要がある場合は、defaultAnalyticsPort および defaultAnalyticsHost とともにこのパラメータが必要となります。

containerMatchString

これは、値を満たす名前を持つコンテナを選択するための正規表現値です。このパラメータでは、defaultInstrumentContainer または instrumentContainer 内で select オプションを使用する必要があります。

このパラメータとともに select オプションを使用すると、クラスタエージェントは正規表現値に一致するコンテナをインストゥルメント化します。

このパラメータは、defaultContainerMatchString に指定されたデフォルト値を上書きします。

customAgentConfigSource

このパラメータは、ConfigMaps を介してインストゥルメント化するエージェントのカスタム設定を使用するオプションを提供します。このパラメータでは、クラスタエージェントの名前空間に必要な ConfigMap を作成する必要があります。このパラメータは、クラスタエージェントの YAML ファイルから動的に設定できます。YAML ファイルに加えた変更は、アプリケーションを再起動することなく、インストゥルメント化されたすべてのエージェントに対して更新されます。同様に、ConfigMap の設定に加えた変更は、アプリケーションを再起動することなく、すべてのインストゥルメント化されたエージェントに対して更新されます。

  • configMapName:ConfigMap の名前を指定します。これにより、エージェントは同じカスタム ConfigMap を使用して、インストゥルメント化されたすべてのエージェント名前空間を更新できます。
  • subDir:(Java エージェントの場合は必須)ConfigMap がマウントされる場所の相対パスを指定します。
    例:/ver20.8.0.3686/conf
    ここで、20.8.0.3686 は Java エージェントのバージョンです。このディレクトリは、Java エージェントのバージョンによって異なる場合があります。

    詳細については、例 6 を参照してください。
    ConfigMap の絶対マウントパスは <agent home path>/subDir

    です。この ConfigMap は、ターゲットアプリケーションの名前空間にある同じ名前の ConfigMap を置き換えます。

展開から ConfigMap ファイル(ルールで使用)を削除する必要がある場合は、最初にこのパラメータをクラスタエージェントの YAML ファイルから削除し、次にクラスタエージェントの名前空間から ConfigMap を削除する必要があります。


instrumentContainer

First

このパラメータは、インストゥルメント化する必要があるコンテナを選択するオプションを提供します。次のいずれかの値を指定できます。

  • first:これはデフォルト値です。この値を指定すると、クラスタエージェントはポッド内の最初のコンテナをインストゥルメント化します。
  • all:この値を指定すると、クラスタエージェントはポッド内のすべてのコンテナをインストゥルメント化します。
  • select:この値を指定すると、クラスタエージェントは、defaultContainerMatchString パラメータまたは containerMatchString パラメータで指定された正規表現と一致する名前のコンテナのみをインストゥルメント化します。
language

インストゥルメント化されるアプリケーションの言語。

次の言語がサポートされています。

  • dotnetcore
  • java
  • nodejs
matchString

ルールが適用される展開名を照合するための正規表現

このパラメータに値を指定しない場合、クラスタエージェントは defaultInstrumentMatchString で指定された値を使用し、その値を満たすすべての展開をインストゥルメント化します。

labelMatch{}このルールに含めるラベルの key-value ペアのリスト。 いずれかのラベルと一致すれば満たされます。

例:
labelMatch:
-label1: value1
-label1: value2
-label2: value2
label1: value2 のみが一致する場合、インストゥルメンテーションは期待どおりに機能します。

appName<defaultAppName> に移動してください。

コントローラに報告するために Java エージェントによって使用されるアプリケーション名。defaultAppName を上書きします。

値が指定されていない場合は、構成された defaultAppName が使用されます。

appNameLabel
このラベルの値は、AppDynamics アプリケーション名になります。 
customAgentConfig

このパラメータは、Java アプリケーションに固有です。

アプリケーション フレームワークでインストゥルメンテーションに特定の設定が必要な場合は、カスタムシステムプロパティを追加できます。
この値は、defaultCustomConfig パラメータで指定されたデフォルト値よりも優先されます。

この値は、他の Java エージェントプロパティとともに設定された env または defaultEnv 変数に追加されます。

tierName""

コントローラに報告するために Java エージェントによって使用される階層名。

階層名が指定されていない場合は、展開名がデフォルトとして使用されます。

env""

このパラメータは、Java アプリケーションに固有です。

アプリケーション エージェントのシステムプロパティが追加される環境変数。指定すると、このインストゥルメンテーション ルールと一致する展開の defaultEnv を上書きします。

何も指定されていない場合、デフォルトは defaultEnv(構成されている場合)または env JAVA_TOOL_OPTIONS(デフォルトのクラスタレベルで構成されていない場合)になります。

imageInfo
image:  "docker.io/appdynamics/java-agent:latest"
agentMountPath: "/opt/appdynamics"
imagePullPolicy: "IfNotPresent"
CODE
dotnetcore:
image: "docker.io/appdynamics/dotnet-core-agent:latest"
    agentMountPath: /opt/appdynamics
imagePullPolicy: "IfNotPresent"
CODE
nodejs:
 image: "docker.io/appdynamics/nodejs-agent:20.8.0-stretch-slimv14"
 agentMountPath: /opt/appdynamics
imagePullPolicy: "IfNotPresent"
CODE

エージェントイメージの場所。次のいずれかのパラメータを選択できます。

  • image:エージェントイメージの場所、およびそのタグ/バージョン。
  • agentMountPath:イメージファイルシステム内のイメージアーティファクトの場所。デフォルトは [/opt/appdynamics] です。この構成は、パスがデフォルトパスと異なる場合にのみ必要です。
  • imagePullPolicy:エージェントの Docker イメージに必要なプルポリシー。デフォルトは IfNotPresent です。要件に基づいて、次のプルポリシーのいずれかを選択できます。
    • Always
    • IfNotPresent
    • Never
    このパラメータは、自動インストゥルメンテーション中に追加される init コンテナで使用されます。

デフォルト値は IfNotPresent です。

このルールで言及されている特定の言語について、このインストゥルメンテーション ルールと一致する展開の image-info を上書きします。

デフォルトのクラスタレベルの構成を上書きし、この特定の選択したルールにカスタムのエージェントバージョンを使用する場合は、これを構成する必要があります。

netvizInfo

bciEnabled: true

port: 3892


ネットワークの可視性のアプリケーション エージェント(netviz)を構成するには、(このパラメータの設定に加えて)ネットワークエージェントを個別に展開する必要があります。
ネットワークエージェントをインストールする手順については、「Kubernetes を使用したネットワークの可視性」を参照してください。

デフォルトでは、netviz が有効になっています。ネットワークエージェントが存在しない場合、このプロパティは影響を与えません。
要件ごとに netviz エージェントを有効または無効にできます。

次の値をサポートしています。

  1. bciEnablednetviz が有効になっているかどうかを示すブール型のフラグ。
  2. port:ネットワークエージェントがリッスンしているポート(デフォルトは 3892))。デフォルトポート以外のポートでネットワークエージェントを実行している場合にのみ、この値を上書きします。

runAsGroup

0

アプリケーションコンテナを非ルートユーザとして構成した場合は、対応するグループの groupId を提供します。

これにより、エージェント アーティファクトに適切なファイル権限が設定されます。

この値は、インストゥルメント化されたすべてのリソースに適用されます。

デフォルトのインストゥルメンテーション用に設定されている runAsGroup のデフォルト値を上書きする必要がある場合、またはこのルールを満たすリソースに特定の値が必要な場合は、このパラメータを追加します。

runAsUser

0

アプリケーションコンテナを非ルートユーザとして構成した場合は、対応するユーザの userId を提供します。

これにより、エージェント アーティファクトに適切なファイル権限が設定されます。

この値は、インストゥルメント化されたすべてのリソースに適用されます。

デフォルトのインストゥルメンテーション用に設定されている runAsUser のデフォルト値を上書きする必要がある場合、またはこのルールを満たすリソースに特定の値が必要な場合は、このパラメータを追加します。

設定例

例 1:ecom 名前空間内のすべての展開をインストゥルメント化します。各ポッドで実行されている Java エージェントは、Ecommerce アプリケーションでコントローラに登録され、階層名はデフォルトで Kubernetes の展開名になります。

例 2:すべての名前空間の、名前が Payment で始まり、ラベル module=payment を持つ展開のみをインストゥルメント化します。

例 3:名前空間 ecom および books のすべての展開をインストゥルメント化します。books 名前空間内のアプリケーションの場合は、コントローラで BookStore というアプリケーション名を使用し、Java エージェントの特定のバージョンを使用します。

例 4:groceries 名前空間が異なるコントローラのアプリケーション名を使用するように例 3 の構成を上書きし、javaagent Java 引数を挿入するように JAVA_OPTS 環境変数を上書きします。

例 5:名前空間 books の Node.js アプリケーションと、名前空間 groceries の .NET コア Linux アプリケーションをインストゥルメント化します。また、Node.js アプリケーションで、分析エージェントにトランザクションデータを送信する必要があります。

例 6:Java アプリケーションの str で始まる名前のコンテナを、名前空間 ecom でインストゥルメント化します。また、controllerConf ConfigMap にある controller-info.xml  および  app-agent-config.xml  構成ファイルと logConf  ConfigMap にあるエージェントのロギング設定用の log4j2.xml ファイルのカスタムエージェント設定を使用します。これらの ConfigMap は、クラスタエージェントの名前空間に存在します。

例 7:groceries 名前空間のすべての展開をインストゥルメント化し、books および ecom  名前空間Payment で始まる名前が付いた展開のみをインストゥルメント化します。

apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<app-name>"
  controllerUrl: "<protocol>://<appdynamics-controller-host>:8080"
  account: "<account-name>"
  # docker image info
  image: "<your-docker-registry>/appdynamics/cluster-agent:tag"
  nsToMonitor:
    - "default"
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom
  defaultAppName: Ecommerce
  instrumentationRules:
    imageInfo:
      java:
        image: "docker.io/appdynamics/java-agent:20.3.0"
        agentMountPath: /opt/appdynamics
        imagePullPolicy: Always
YML
apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<app-name>"
  controllerUrl: "<protocol>://<appdynamics-controller-host>:8080"
  account: "<account-name>"
  # docker image info
  image: "<your-docker-registry>/appdynamics/cluster-agent:tag"
  nsToMonitor:
    - "default"
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: .
*
  defaultAppName: Ecommerce
  instrumentationRules:
  - matchString: ^Payment
    labelMatch:
    - module: payment
YML
apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<app-name>"
  controllerUrl: "<protocol>://<appdynamics-controller-host>:8080"
  account: "<account-name>"
  # docker image info
  image: "<your-docker-registry>/appdynamics/cluster-agent:tag"
  nsToMonitor:
    - "default"
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom|books
  defaultAppName: Ecommerce
  instrumentationRules:
    - namespaceRegex: books
      appName: BookStore
      imageInfo:
        image: "docker.io/appdynamics/java-agent:4.5.19"
        agentMountPath: /opt/appdynamics
        imagePullPolicy: Always
    - namespaceRegex: ecom
YML
apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<app-name>"
  controllerUrl: "<protocol>://<appdynamics-controller-host>:8080"
  account: "<account-name>"
  # docker image info
  image: "<your-docker-registry>/appdynamics/cluster-agent:tag"
  nsToMonitor:
    - "default"
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom|books|groceries
  defaultAppName: Ecommerce
  imageInfo:
    java:
      image: "docker.io/appdynamics/java-agent:latest"
      agentMountPath: /opt/appdynamics
      imagePullPolicy: Always
  instrumentationRules:
    - namespaceRegex: books
      appName: BookStore
      imageInfo:
        image: "docker.io/appdynamics/java-agent:4.5.19"
        agentMountPath: /opt/appdynamics
        imagePullPolicy: Always
    - namespaceRegex: groceries
      appName: Groceries
      env: JAVA_OPTS
    - namespaceRegex: ecom
      #no appName and matchstring for this rule so it will take default appName and default matchstring which is .
*
YML
apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<app-name>"
  controllerUrl: "<protocol>://<appdynamics-controller-host>:8080"
  account: "<account-name>"
  # docker image info
  image: "<your-docker-registry>/appdynamics/cluster-agent:tag"
  nsToMonitor:
    - "default"
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom|books|groceries
  defaultAppName: Ecommerce
  appNameStrategy: namespace
  imageInfo:
    java:
      image: "docker.io/appdynamics/java-agent:latest"
      agentMountPath: /opt/appdynamics
      imagePullPolicy: Always
  instrumentationRules:
    - namespaceRegex: groceries
      language: dotnetcore
      imageInfo:
        image: "docker.io/appdynamics/dotnet-core-agent:latest"
        agentMountPath: /opt/appdynamics
        imagePullPolicy: Always
    - namespaceRegex: books
      matchString: openmct
      language: nodejs
      imageInfo:
        image: "docker.io/appdynamics/nodejs:20.6.0"
        agentMountPath: /opt/appdynamics
        imagePullPolicy: Always
      analyticsHost: <hostname of the Analytics Agent>
      analyticsPort: 443
      analyticsSslEnabled: true
YML
apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<app-name>"
  controllerUrl: "<protocol>://<appdynamics-controller-host>:8080"
  account: "<account-name>"
  # docker image info
  image: "<your-docker-registry>/appdynamics/cluster-agent:tag"
  nsToMonitor:
    - "default"
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom
  defaultAppName: Ecommerce
  instrumentationRules:
    - namespaceRegex: ecom
      matchString: ^Payment
      appName: <application-name>
      language: <language>
      customAgentConfigSource:
       - configMapName: controllerConf
         subDir: /ver20.8.0.3686/conf/
       - configMapName: logConf
         subDir: /ver20.8.0.3686/conf/logging
      instrumentContainer: select
      containerMatchString: ^str
      imageInfo:
        image: <image-repo>
        imagePullPolicy: IfNotPresent
YML
apiVersion: appdynamics.com/v1alpha1
kind: Clusteragent
metadata:
  name: k8s-cluster-agent
  namespace: appdynamics
spec:
  appName: "<app-name>"
  controllerUrl: "<protocol>://<appdynamics-controller-host>:8080"
  account: "<account-name>"
  # docker image info
  image: "<your-docker-registry>/appdynamics/cluster-agent:tag"
  nsToMonitor:
    - "default"
  # auto-instrumentation config
  instrumentationMethod: Env
  nsToInstrumentRegex: ecom|books|groceries
  defaultAppName: Ecommerce
  appNameStrategy: namespace
  defaultMatchString: ^payment
  imageInfo:
    java:
      image: "docker.io/appdynamics/java-agent:latest"
      agentMountPath: /opt/appdynamics
      imagePullPolicy: Always
  instrumentationRules:
    - namespaceRegex: groceries
      matchString: .
*
    - namespaceRegex: ecom|books
      #no matchstring so it will take default matchstring which is ^payment
YML