概要

Kubernetes 環境では、APM 用のシングルステップインスツルメンテーション (SSI) を利用して Datadog Agent をインストールし、Datadog SDK を使ってアプリケーションを 1 ステップでインスツルメントします。

要件

アプリケーションで APM を有効にする

シングルステップインスツルメンテーションは、Datadog Agent がインストールされているネームスペースのアプリケーションをインスツルメントしません。アプリケーションを実行していない別のネームスペースに Agent をインストールしてください。

クラスター全体でシングルステップインスツルメンテーションを有効にするための手順に従ってください。これにより、サポートされている言語で作成されたすべてのアプリケーションからトレースが自動的に送信されます。

注: 特定のネームスペースや Pod だけをインスツルメントするには、高度なオプションのワークロードターゲティングを参照してください。

  1. Datadog で、Kubernetes に Datadog Agent をインストールするのページに移動します。

  2. 画面の指示に従ってインストール方法を選択し、API キーを選択して、Operator または Helm のリポジトリをセットアップします。

  3. **構成datadog-agent.yaml**セクションで、追加構成 >アプリケーションの監視可能性に移動し、APM インスツルメンテーションをオンにします。

    Datadog アプリを通じて Kubernetes に Datadog Agent をインストールするための構成ブロック
  4. 生成される構成ファイルを使用して Agent をデプロイします。

  5. アプリケーションを再起動します。

SSI は、インスツルメントされたアプリケーションに若干の起動時間を追加します。このオーバーヘッドが実際の状況で受け入れられない場合は、Datadog サポートに連絡してください。

統合サービスタグを構成する

統合サービスタグ (UST) は、トレース、メトリクス、ログを通じて一貫したタグを適用し、監視可能性データのナビゲートと相関を容易にします。UST は、自動ラベル抽出 (推奨)、ddTraceConfigs による明示的な構成、またはデプロイメントマニフェストで構成できます。

Remote Configuration を使用している場合、自動ラベル抽出には互換性がありません。次のものを使用して、UST を明示的に構成する必要があります: ddTraceConfigs

SSI を使用すると、個々のデプロイメントに変更を加えることなく、Pod ラベルとメタデータから UST 値を自動的に抽出できます。そのためには、既存の Kubernetes ラベルを Datadog サービスタグにマッピングするように kubernetesResourcesLabelsAsTags を構成します。

注: この方法は Remote Configuration と互換性がありません。Remote Configuration を使用している場合は、ddTraceConfigs で UST を明示的に構成するを参照してください。

前提条件

コンポーネント最小バージョン
datadog-agent7.69
datadog-operator1.16.0
datadog-helm-chart3.120.0

構成

次の例では、app.kubernetes.io/name を、サービス名が含まれる任意のラベルに置き換えてください (例:service.kubernetes.io/namecomponent)。この方法で複数のラベルを構成できます。

datadog:
  # Automatically extract service names from Kubernetes labels
  kubernetesResourcesLabelsAsTags:
    pods:
      app.kubernetes.io/name: service     # Modern Kubernetes label
    deployments.apps:
      app.kubernetes.io/name: service
    replicasets.apps:
      app.kubernetes.io/name: service

  # Set environment globally for the entire cluster
  tags:
    - "env:production"

  apm:
    instrumentation:
      enabled: true

この構成により、Datadogはこのラベルを含むインスツルメントされた任意のワークロードに対して、app.kubernetes.io/name ラベルの値を使用することにより、service タグを自動的に設定します。

ddTraceConfigs を使用して UST を明示的に構成する

ほとんどの場合、自動構成で十分です。とはいえ、特定のワークロードの設定を詳細に制御する必要がある場合は、ddTraceConfigs を使用することにより、明示的にラベルをサービス構成にマッピングします。

datadog:
  kubernetesResourcesLabelsAsTags:
    pods:
      app.kubernetes.io/name: service
    deployments.apps:
      app.kubernetes.io/name: service

  # Set environment globally for the entire cluster
  tags:
    - "env:production"

  apm:
    instrumentation:
      enabled: true
      targets:
        - name: frontend-services
          podSelector:
            matchLabels:
              tier: frontend
          ddTraceConfigs:
            - name: DD_SERVICE       # Explicitly override service name
              valueFrom:
                fieldRef:
                  fieldPath: metadata.labels['app.kubernetes.io/name']
            # DD_ENV inherited from cluster-level tags above
            # DD_VERSION automatically extracted from image tags

デプロイメントマニフェストで UST を構成する

UST 抽出に適したラベルを使用していないセットアップの場合は、環境変数を使用してデプロイメントマニフェストの中で直接 UST を設定できます。この方法では各デプロイメントに個別に変更を加える必要がありますが、細かい制御が可能になります。

手順について詳しくは、Kubernetesサービスの UST 設定を参照してください。

SDK に依存する製品と機能を有効にする

SSI がアプリケーションに Datadog SDK をロードし、分散トレーシングを有効にした後、SDK に依存する追加の製品を構成できます。

ProductEnvironment variable
Runtime MetricsDD_RUNTIME_METRICS_ENABLED
Log InjectionDD_LOGS_INJECTION
Continuous ProfilerDD_PROFILING_ENABLED
Data Streams MonitoringDD_DATA_STREAMS_ENABLED
App and API ProtectionDD_APPSEC_ENABLED
Runtime Code Analysis (IAST)DD_IAST_ENABLED
Dynamic InstrumentationDD_DYNAMIC_INSTRUMENTATION_ENABLED
Data Jobs MonitoringDD_DATA_JOBS_ENABLED
Software Composition AnalysisDD_APPSEC_SCA_ENABLED

Note: All variables accept true or false. DD_PROFILING_ENABLED also accepts auto, which profiles only eligible processes and is recommended for SSI.

以下のいずれかのセットアップ方法を使用します。

  • ワークロードターゲティングで構成する (推奨):

    デフォルトの場合、シングルステップインスツルメンテーションはすべてのネームスペースのすべてのサービスをインスツルメントします。ワークロードターゲティングを使用して、インスツルメンテーションを特定のネームスペース、Pod、またはワークロードに制限し、カスタム構成を適用します。

  • 環境変数を設定する:

    アプリケーション構成で環境変数を直接設定することにより製品を有効にします。

高度なオプション

以下の高度なオプションを使用することにより、シングルステップインスツルメンテーションが環境内でどのように動作するかをカスタマイズできます。これらの設定はオプションであり、通常、それらが必要になるのは特別なセットアップの場合だけです。

注入モードを構成する

SSI で複数の注入モードがサポートされており、それらは、インジェクターと APM ライブラリファイルがアプリケーションコンテナにどのように配信されるかを制御します。通常、この設定を手動で構成する必要はありません。Pod の初期化中に、顕著な Pod 起動遅延や予想以上のリソース消費 (CPU、メモリ) に気付いた場合は、調整を検討してください。インジェクターの動作について詳しくは、シングルステップインスツルメンテーションによるインジェクターの動作を参照してください。

モード説明要件
init_containerinit コンテナは、アプリケーションコンテナにインジェクターと APM ライブラリファイルをコピーするために使用します。Helm チャートまたは Datadog Operator でデプロイされたエージェント
csiプレビュー中。Datadog CSI ドライバーを使用して、インジェクターと APM ライブラリファイルをマウントします。init コンテナモードと比較して、Pod の起動時間を短縮します。Agent 7.76.0 以上、CSI ドライバー 1.2.0 以上、Helm Chart 3.178.1 以上、または Datadog Operator 1.25.0 以上

csi モードを使用する前に、Datadog CSI ドライバーをインストールし、アクティブにしてください。Helm でデプロイする場合は、datadog.csi.enabled: truedatadog-values.yaml に設定してください。インストール手順や GKE オートパイロットなど、環境固有の要件については、CSI ドライバーのドキュメントを参照してください。

注入モードをグローバルに構成する

クラスター全体で注入モードを設定するには、injectionModedatadog-values.yaml に追加します。

datadog:
  apm:
    instrumentation:
      injectionMode: <mode>

サポートされている値: init_containercsi

クラスター全体で注入モードを設定するには、injectionModedatadog-agent.yaml に追加します。

features:
  apm:
    instrumentation:
      injectionMode: <mode>

サポートされている値: init_containercsi

Datadog Operator のバージョンが 1.25.0 未満の場合は、特定の Pod のインジェクションモードをオーバーライドするために、Pod アノテーションを使用してください。

Pod ごとにインジェクションモードを構成する

特定の Pod のインジェクションモードをオーバーライドするには、Pod の指定に次のアノテーションを追加します。

metadata:
  annotations:
    admission.datadoghq.com/apm-inject.injection-mode: "<mode>"

サポートされている値: init_containercsi

特定のワークロードをターゲットにする

デフォルトの場合、SSI はクラスター内のすべてのネームスペースのすべてのサービスをインスツルメントします。Agent のバージョンに応じて、インスツルメンテーションするサービスとその方法を微調整するために、以下の構成方法のいずれかを使用してください。

targets ラベルを使用してターゲティングブロックを作成し、インスツルメンテーションするワークロードと適用する構成を指定します。

各ターゲットブロックには以下のキーがあります。

キー説明
nameターゲットブロックの名前。これは監視状態には影響せず、メタデータとしてのみ使用されます。
namespaceSelectorインスツルメンテーションするネームスペース。以下のいずれかを使用して指定します:
matchNames: 1 つ以上のネームスペース名のリスト。
matchLabels: {key,value} のペアで定義される 1 つ以上のラベルのリスト。
matchExpressions: ネームスペースセレクタ要件のリスト。

ネームスペースはすべての基準を満たす必要があります。詳細については、Kubernetes セレクタのドキュメントを参照してください。
podSelectorインスツルメンテーションする Pod。以下のいずれかを使用して指定します:
matchLabels: {key,value} のペアで定義される 1 つ以上のラベルのリスト。
matchExpressions: Pod セレクタ要件のリスト。

Pod はすべての基準を満たす必要があります。詳細については、Kubernetes セレクタのドキュメントを参照してください。
ddTraceVersions各言語で使用する Datadog APM SDK のバージョン。
ddTraceConfigs統合サービスタグを設定できる APM SDK 構成、トレースを超えた SDK 依存製品を有効にし、他の APM 設定をカスタマイズします。

構成する必要があるファイルは、Single Step Instrumentation を有効にした方法によって異なります:

  • Datadog Operator で SSI を有効にした場合は、datadog-agent.yaml を編集します。
  • Helm で SSI を有効にした場合は、datadog-values.yaml を編集します。

: ターゲットは順番に評価され、最初の一致が優先されます。

構成例

特定のサービスを選択する方法を示す以下の例をご確認ください。

この構成:

  • jenkins ネームスペースを除くすべてのネームスペースに対して APM を有効にします。
  • : リストに記載されているネームスペース以外のすべてのネームスペースで無効にするには、enabledNamespaces を使用します。
  • は、デフォルトの Java SDK を使用してJavaアプリケーションを、また v.3.1.0 の Python SDK を使用して Python アプリケーションをインスツルメントするよう、Datadog に対して指示します。
   apm:
     instrumentation:
       enabled: true
       disabledNamespaces:
         - "jenkins"
       targets:
         - name: "all-remaining-services"
           ddTraceVersions:
             java: "default"
             python: "3.1.0"

この構成は 2 つのターゲットブロックを作成します。

  • 最初のブロック (名前は login-service_namespace):
    • はネームスペース login-service 内のサービスに対して APM を有効にします。
    • は、このネームスペース内のサービスをデフォルトの Java SDK のバージョンでインスツルメントするよう、Datadog に対して指示します。
    • は、このターゲットグループの環境変数 DD_PROFILING_ENABLED を設定します。
  • 2 番目のブロック (名前は billing-service_apps)
    • は、ラベル app:billing-service のネームスペース内のサービスに対して APM を有効にします。
    • は、このサービスセットを v3.1.0 の Python SDK でインスツルメントするよう、Datadog に対して指示します。
  apm:
    instrumentation:
      enabled: true
      targets:
        - name: "login-service_namespace"
          namespaceSelector:
            matchNames:
              - "login-service"
          ddTraceVersions:
            java: "default"
          ddTraceConfigs:
            - name: "DD_PROFILING_ENABLED"  ## profiling is enabled for all services in this namespace
              value: "auto"
        - name: "billing-service_apps"
          namespaceSelector:
            matchLabels:
              app: "billing-service"
          ddTraceVersions:
            python: "3.1.0"

この構成は次のことをします。

  • は、次のラベルの Pod に APM を有効にします。
  • app:db-user は、db-user アプリケーションを実行している Pod をマークします。
  • webserver:routing は、request-router アプリケーションを実行している Pod をマークします。
  • は、Datadog Tracer SDK のデフォルトバージョンを使用するよう、Datadog に対して指示します。
  • は、各ターゲットグループに適用される Datadog 環境変数を設定し、SDK を構成します。
   apm:
     instrumentation:
       enabled: true
       targets:
         - name: "db-user"
           podSelector:
             matchLabels:
               app: "db-user"
           ddTraceVersions:
             java: "default"
           ddTraceConfigs:   ## trace configs set for services in matching pods
             - name: "DD_DATA_STREAMS_ENABLED"
               value: "true"
         - name: "user-request-router"
           podSelector:
             matchLabels:
               webserver: "user"
           ddTraceVersions:
             php: "default"

この構成:

  • は、login-service ネームスペース内で、app:password-resolver のラベルの付いた Pod に対して APM を有効にします。
  • は、Datadog Java Tracer SDK のデフォルトバージョンを使用するよう、Datadog に対して指示します。
  • は、このターゲットに適用する Datadog 環境変数を設定します。
   apm:
     instrumentation:
       enabled: true
       targets:
         - name: "login-service-namespace"
           namespaceSelector:
             matchNames:
               - "login-service"
           podSelector:
             matchLabels:
               app: "password-resolver"
           ddTraceVersions:
             java: "default"
           ddTraceConfigs:
             - name: "DD_PROFILING_ENABLED"
               value: "auto"

この構成は、app=app1 または app=app2 のいずれかのラベルの付いた Pod を除くすべての Pod に対して APM を有効にします。

   apm:
     instrumentation:
       enabled: true
       targets:
         - name: "default-target"
           podSelector:
               matchExpressions:
                 - key: app
                   operator: NotIn
                   values:
                   - app1
                   - app2

この構成は、web-apps ネームスペース内のサービスに App and API protection (AAP) および Continuous Profiler を有効にし、ddTraceConfigs を使用することにより必要な環境変数を設定します。

   apm:
     instrumentation:
       enabled: true
       targets:
         - name: "web-apps-with-security"
           namespaceSelector:
             matchNames:
               - "web-apps"
           ddTraceVersions:
             java: "default"
             python: "default"
           ddTraceConfigs:
             - name: "DD_APPSEC_ENABLED"
               value: "true"
             - name: "DD_PROFILING_ENABLED"
               value: "auto"

SSI を通じて有効にできる製品の完全なリストについては、SDK 依存の製品と機能を有効にするを参照してください。

ネームスペースのインスツルメンテーションを有効または無効にする

特定のネームスペース内のアプリケーションに対してインスツルメンテーションを有効または無効にすることができます。enabledNamespaces または disabledNamespaces のいずれか一方のみを設定できます。両方を設定することはできません。

どのファイルを編集するかは、Datadog Operator か Helm で Single Step Instrumentation を有効にしたかによって異なります。

特定のネームスペースでインスツルメンテーションを有効にするには、enabledNamespaces の構成を datadog-agent.yaml に追加します:

   features:
     apm:
       instrumentation:
         enabled: true
         enabledNamespaces: # Add namespaces to instrument
           - default
           - applications

特定のネームスペースでインスツルメンテーションを無効にするには、disabledNamespaces の構成を datadog-agent.yaml に追加します:

   features:
     apm:
       instrumentation:
         enabled: true
         disabledNamespaces: # Add namespaces to not instrument
           - default
           - applications

特定のネームスペースでインスツルメンテーションを有効にするには、enabledNamespaces の構成を datadog-values.yaml に追加します:

   datadog:
      apm:
        instrumentation:
          enabled: true
          enabledNamespaces: # Add namespaces to instrument
             - namespace_1
             - namespace_2

特定のネームスペースでインスツルメンテーションを無効にするには、disabledNamespaces の構成を datadog-values.yaml に追加します:

   datadog:
      apm:
        instrumentation:
          enabled: true
          disabledNamespaces: # Add namespaces to not instrument
            - namespace_1
            - namespace_2

SDK バージョンを指定する

Datadog Cluster Agent v7.52.0 以上の場合、指定する SDK に基づいて、一部のアプリケーションのみを自動的にインスツルメントできます。

それらの言語で作成されたアプリケーションを自動的にインスツルメントするには、Datadog SDK とそのバージョンを指定します。これは、次の優先順位で適用される 2 つの方法で構成できます。

  1. サービスレベルで指定する、または
  2. クラスターレベルで指定する

デフォルト: ライブラリバージョンを一切指定しない場合、サポートされている言語で作成されたアプリケーションは、最新の SDK バージョンを使用して自動的にインスツルメントされます。

サービスレベルで指定する

特定のポッドで動作するアプリケーションを自動的にインスツルメントするには、Pod の仕様にアプリケーション対応の言語アノテーションとライブラリバージョンを追加してください。

言語Pod アノテーション
Javaadmission.datadoghq.com/java-lib.version: "<CONTAINER IMAGE TAG>"
Node.jsadmission.datadoghq.com/js-lib.version: "<CONTAINER IMAGE TAG>"
Pythonadmission.datadoghq.com/python-lib.version: "<CONTAINER IMAGE TAG>"
.NETadmission.datadoghq.com/dotnet-lib.version: "<CONTAINER IMAGE TAG>"
Rubyadmission.datadoghq.com/ruby-lib.version: "<CONTAINER IMAGE TAG>"
PHPadmission.datadoghq.com/php-lib.version: "<CONTAINER IMAGE TAG>"

<CONTAINER IMAGE TAG> を、目的のライブラリのバージョンに置き換えてください。利用可能なライブラリのバージョンは、Datadog コンテナレジストリ、および各言語のトレーサーソースリポジトリに記載されています。

注意が必要な場合として、 latest タグを使う場合があります。ライブラリのリリースの多くでは、それによって破壊的な変更をもたらされる可能性があります。

たとえば、Java アプリケーションを自動的にインスツルメントする場合は以下のようになります。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    # ...
spec:
  template:
    metadata:
      annotations:
        admission.datadoghq.com/java-lib.version: "<CONTAINER IMAGE TAG>"
    spec:
      containers:
        - # ...
クラスターレベルで指定する

特定のPod に対してアノテーションを使用して自動インスツルメンテーションを有効にしていない場合、SSI 構成を使用してクラスター全体でインスツルメンテーションする言語を指定できます。apm.instrumentation.libVersions が設定されている場合、指定されたライブラリのバージョンを使用してインスツルメンテーションされるのは、指定された言語で作成されたアプリケーションだけです。

どのファイルを編集するかは、Datadog Operator か Helm で Single Step Instrumentation を有効にしたかによって異なります。

たとえば、.NET、Python、Node.js のアプリケーションをインスツルメントする場合、datadog-agent.yaml ファイルに以下の構成を追加します。

   features:
     apm:
       instrumentation:
         enabled: true
         libVersions: # Add any libraries and versions you want to set
            dotnet: "x.x.x"
            python: "x.x.x"
            js: "x.x.x"

たとえば、.NET、Python、Node.js のアプリケーションをインスツルメントする場合、datadog-values.yaml ファイルに以下の構成を追加します。

   datadog:
     apm:
       instrumentation:
         enabled: true
         libVersions: # Add any libraries and versions you want to set
            dotnet: "x.x.x"
            python: "x.x.x"
            js: "x.x.x"

デフォルトのイメージレジストリを変更する

Datadog は、以下の gcr.io、Docker Hub、Amazon ECR にインスツルメンテーションライブラリのイメージを公開しています。

Datadog Cluster Agent の構成の中の DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_CONTAINER_REGISTRY 環境変数は、Admission Controller が使用するレジストリを指定します。デフォルト値は gcr.io/datadoghq です。

ローカルコンテナレジストリでイメージをホストしている場合は、docker.io/datadogpublic.ecr.aws/datadog、または他の URL に変更することによって、別のレジストリから SDK をプルできます。

コンテナレジストリを変更する手順については、コンテナレジストリの変更を参照してください。

プライベートコンテナレジストリを使用する

組織で公開レジストリ (gcr.iodocker.iopublic.ecr.aws など) からの直接プルが許可されていない場合は、必要な Datadog イメージを内部でホスティングし、Admission Controller がそれらを使用するように構成できます。

プライベートコンテナレジストリで SSI を使用するには、次のようにします。

  1. Datadog のコンテナイメージをプライベートレジストリにミラーリングするには、これらの手順に従ってください。

    必要なのは、インスツルメントする言語のイメージだけです。どのイメージが必要か不明な場合、ほとんどのケースをカバーする基本的なラインを以下に示します。

    • apm-inject
    • dd-lib-java-init
    • dd-lib-python-init
    • dd-lib-dotnet-init
    • dd-lib-php-init
    • dd-lib-ruby-init
    • dd-lib-js-init

    これらのイメージは、gcr.ioDocker Hub、または Amazon ECR Public Gallery にあります。

  2. イメージを構成に従ってタグ付けします。

    ミラーリングするバージョンは、ワークロードで設定されているバージョンと一致している必要があります。これらは以下のいずれかの方法で設定されていることがあります。

    • ddTraceVersions を使用してAgent の設定でグローバルに、または
    • admission.datadoghq.com/java-lib.version のようにアノテーションを使用して Pod ごとに。

    明示的にバージョンが設定されていない場合は、デフォルトバージョン (0) が使用されます。

    たとえば、次のとおりです。

    apm:
      instrumentation:
        enabled: true
        targets:
          - name: "default-target"
            ddTraceVersions:
              java: "1"
              python: "3"
    

    この構成には、以下のイメージタグが必要です。

    • apm-inject:0
    • dd-lib-java-init:1
    • dd-lib-python-init:3
  3. プライベートレジストリを使用するよう、クラスター Agent 構成を更新します。

    プライベートレジストリを使用するように、クラスター Agent 構成の中で DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_CONTAINER_REGISTRY 環境変数を設定します。

コンテナレジストリを変更する詳細については、コンテナレジストリの変更を参照してください。

EKS でのコンテナネットワークインターフェースの使用

Calicoのような CNI を使用する場合、コントロールプレーンノードは Datadog の Admission Controller へのネットワーク接続を開始できず、「アドレスが許可されていない」というエラーが報告されます。 シングルステップインスツルメンテーションを使用するには、useHostNetwork: trueパラメーターにより Datadog のクラスターエージェントに変更を加えます。

datadog:
  ...

clusterAgent:
  useHostNetwork: true

  admissionController:
    ...

シングルステップ APM インスツルメンテーションを Agent から削除する

特定のサービス、ホスト、VM、またはコンテナでトレースデータを収集したくない場合は、以下の手順を実行してください。

特定のサービスのインスツルメンテーションを削除する

特定のサービスの APM インスツルメンテーションを削除してトレース送信を停止する場合は、以下のいずれかのようにすることができます。

インスツルメンテーションルール (Agent v7.64 以上で利用可能) を使用すると、特定のアプリケーションのトレースを有効または無効にできます。構成の詳細についてはこちらでご確認ください

Datadog Admission Controller を使用する

代替手段として、またはインスツルメンテーションルールをサポートしていないエージェントバージョンの場合、Pod にラベルを追加することにより、Pod の変更を無効にすることもできます。

SSI を無効にすることに加えて、以下の手順により他の変更操作 Webhook は無効になります。注意して使用してください。
  1. Pod 指定で admission.datadoghq.com/enabled: ラベルを "false" に設定します。
    spec:
      template:
        metadata:
          labels:
            admission.datadoghq.com/enabled: "false"
    
  2. 構成を適用します。
    kubectl apply -f /path/to/your/deployment.yaml
    
  3. インスツルメンテーションを削除したいサービスを再起動します。

インフラストラクチャー上のすべてのサービスについて APM を削除する

トレースの送信を停止するには、APM をアンインストールしてインフラストラクチャーを再起動してください:

どのファイルを編集するかは、Datadog Operator か Helm で Single Step Instrumentation を有効にしたかによって異なります。

  1. datadog-agent.yaml の中で instrumentation.enabled=false を設定します。

    features:
      apm:
        instrumentation:
          enabled: false
    
  2. 更新したコンフィギュレーションファイルで Datadog Agent をデプロイします。

    kubectl apply -f /path/to/your/datadog-agent.yaml
    
  1. datadog-values.yaml の中で instrumentation.enabled=false を設定します。

    datadog:
      apm:
        instrumentation:
          enabled: false
    
  2. 次のコマンドを実行します。

    helm upgrade datadog-agent -f datadog-values.yaml datadog/datadog
    

ベストプラクティス

SSI を有効にすると、クラスターのうちサポートされているすべてのプロセスが自動的にインスツルメントされ、数分以内にトレース生成が開始されます。

どこで APM を有効にするかを制御して、オーバーヘッドを削減するため、以下のベストプラクティスを考慮してください。

デフォルトとオプトインインスツルメンテーション

モード動作使用する場合
デフォルトクラスター内のサポートされている全プロセスがインスツルメントされます。小さなクラスターまたはプロトタイプ。
オプトインインスツルメンテーションを特定のネームスペースまたは Pod に制限するために、インスツルメンテーションルールを使用します。プロダクションクラスター、段階的ロールアウト、またはコストが大きな問題となるユースケース。

特定の Pod のインスツルメンテーションを有効にする

  1. デプロイメントメタデータと Pod テンプレートの両方にとって意味のあるラベル (datadoghq.com/apm-instrumentation: "enabled" など) を追加します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: checkout-api
      labels:
        app: checkout-api
        datadoghq.com/apm-instrumentation: "enabled"   # opt-in label (cluster-wide)
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: checkout-api
      template:
        metadata:
          labels:
            app: checkout-api
            datadoghq.com/apm-instrumentation: "enabled"   # opt-in label must be on *template*, too
            # Unified Service Tags (recommended)
            tags.datadoghq.com/service: "checkout-api"
            tags.datadoghq.com/env:     "prod"
            tags.datadoghq.com/version: "2025-06-10"
        spec:
          containers:
            - name: api
              image: my-registry/checkout:latest
              ports:
                - containerPort: 8080
    
  2. Datadog Agent Helm の構成で、SSI を有効にし、podSelector を使用することにより、オプトインラベルが一致する Pod のみに注入します。

      apm:
        instrumentation:
          enabled: true
          targets:
            - name: apm-instrumented
              podSelector:
                matchLabels:
                  datadoghq.com/apm-instrumentation: "enabled"
    

追加の例については、インスツルメンテーションルールを参照してください。

Agent Helm の構成で ddTraceVersions を使用することにより、Datadog SDK の言語とバージョンの両方を制御します。これにより、不必要な SDK がダウンロードされるのを防ぎ、init コンテナのフットプリントを最小限に抑え、イメージサイズを削減し、より意図的なトレースのアップグレードが可能になります (たとえば、コンプライアンス要件を満たすため、またはデバッグを簡素化するため)。

例: ネームスペースの Java SDK を指定する

login-service ネームスペースで、Java アプリケーションだけが実行されます。他の SDK のダウンロードを避けるため、そのネームスペースをターゲットとするように Agent を構成し、Java SDK バージョン 1.48.2 のみを注入します。

targets:
  - name: login-service
    namespaceSelector:
      matchNames: ["login-service"]
    ddTraceVersions:
      java: "1.48.2"    # pin version

デフォルトの構成

Pod が ddTraceVersions ルールに一致しない場合、デフォルトのターゲットが適用されます。

targets:
  - name: default-target          # tag any pod *without* an override
    ddTraceVersions:
      java:   "1"   # stay on latest v1.x
      python: "3"   # stay on latest v3.x
      js:     "5"   # NodeJS
      php:    "1"
      dotnet: "3"

トラブルシューティング

SSI で APM を有効にする際に問題が発生した場合は、SSI トラブルシューティングガイドを参照してください。

参考資料