概要

Single Step Instrumentation (SSI) for APM は、Datadog Agent をインストールし、アプリケーションをインスツルメント する手順を 1 ステップにまとめたものです。追加の設定ステップは不要です。

互換性

対応する言語、オペレーティングシステム、アーキテクチャの要件については、Single Step Instrumentation の互換性を参照してください。

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

Enable APM Instrumentation オプションを選択して Datadog Agent をインストールまたは更新すると、APM を有効にするように Agent がインストールおよび構成されます。これにより、追加のインストールや構成手順なしでアプリケーションが自動的にインスツルメントされます。

以下の例は、それぞれのデプロイメントタイプでどのように動作するかを示します。

以前に Linux ホストで Single Step Instrumentation を使用していた場合は、最新バージョンにアップデートしてください。

Ubuntu ホストの場合

  1. 1 行のインストールコマンドを実行します。

    DD_API_KEY=<YOUR_DD_API_KEY> DD_SITE="<YOUR_DD_SITE>" DD_APM_INSTRUMENTATION_ENABLED=host DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2,js:5,dotnet:3" DD_ENV=<AGENT_ENV> bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)"
    

    <YOUR_DD_API_KEY> をお使いの Datadog API キーに、<YOUR_DD_SITE> をお使いの Datadog サイトに、<AGENT_ENV> を Agent がインストールされる環境 (例: staging) に置き換えてください。

    その他のオプションについては、高度なオプションをご覧ください。
  2. 新しいシェルセッションを開始します。

  3. ホストまたは VM 上のサービスを再起動します。

Docker Linux コンテナの場合

  1. 1 行のインストールコマンドを実行します。
    DD_APM_INSTRUMENTATION_ENABLED=docker DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2,js:5,dotnet:3" DD_NO_AGENT_INSTALL=true bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)"
    
  2. Docker で Agent を構成します。
    docker run -d --name dd-agent \
      -e DD_API_KEY=<YOUR_DD_API_KEY> \
      -e DD_APM_ENABLED=true \
      -e DD_ENV=<AGENT_ENV> \
      -e DD_APM_NON_LOCAL_TRAFFIC=true \
      -e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \
      -e DD_APM_RECEIVER_SOCKET=/var/run/datadog/apm.socket \
      -e DD_DOGSTATSD_SOCKET=/var/run/datadog/dsd.socket \
      -v /var/run/datadog:/var/run/datadog \
      -v /var/run/docker.sock:/var/run/docker.sock:ro \
      gcr.io/datadoghq/agent:7
    
    <YOUR_DD_API_KEY> をお使いの Datadog API キーに、<AGENT_ENV> を Agent がインストールされる環境 (例: staging) に置き換えてください。
    その他のオプションについては、高度なオプションをご覧ください。
  3. Docker コンテナを再起動します。
  4. Datadog でサービスのパフォーマンス可観測性を調べます

Datadog Agent を以下のいずれかの方法でインストールすることで APM を有効にできます、

  • Datadog Operator
  • Datadog Helm chart
Single Step Instrumentation は、Datadog Agent をインストールしたネームスペース内のアプリケーションをインスツルメントしません。アプリケーションを実行しない別のネームスペースを作成し、そこに Datadog Agent をインストールすることが推奨されます。

要件

  • Kubernetes v1.20+
  • Helm (Datadog Operator をデプロイするため)
  • Kubectl CLI (Datadog Agent をインストールするため)

Datadog Operator を使用してクラスター全体で Single Step Instrumentation を有効にする手順です。これにより、対応言語で書かれたクラスター内のすべてのアプリケーションのトレースが自動的に送信されます。

Datadog Operator で Single Step Instrumentation を有効にするには

  1. Datadog Operator v1.5.0+ を Helm でインストールします。

    helm repo add datadog https://helm.datadoghq.com
    helm repo update
    helm install my-datadog-operator datadog/datadog-operator
    
  2. お使いの Datadog API キーを保存する Kubernetes シークレットを作成します。

    kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY
    
  3. Datadog Agent のデプロイ構成を含む datadog-agent.yaml を作成します。もっとも簡単な設定は以下のとおりです。

    apiVersion: datadoghq.com/v2alpha1
    kind: DatadogAgent
    metadata:
      name: datadog
    spec:
      global:
        site: <DATADOG_SITE>
        tags:
          - env:<AGENT_ENV>
        credentials:
          apiSecret:
            secretName: datadog-secret
            keyName: api-key
      features:
        apm:
          instrumentation:
            enabled: true
            libVersions:
              java: "1"
              dotnet: "3"
              python: "2"
              js: "5"
    

    <DATADOG_SITE> をお使いの Datadog サイトに、<AGENT_ENV> を Agent がインストールされる環境 (例: env:staging) に置き換えてください。

    その他のオプションについては、高度なオプションをご覧ください。
  4. 次のコマンドを実行します。

    kubectl apply -f /path/to/your/datadog-agent.yaml
    
  5. Datadog Cluster Agent の変更が反映されるまで数分待ってから、アプリケーションを再起動します。

Helm を使用してクラスター全体で Single Step Instrumentation を有効にする手順です。これにより、対応言語で書かれたクラスター内のすべてのアプリケーションのトレースが自動的に送信されます。

Helm で Single Step Instrumentation を有効にするには

  1. Helm Datadog リポジトリを追加します。

     helm repo add datadog https://helm.datadoghq.com
     helm repo update
    
  2. お使いの Datadog API キーを保存する Kubernetes シークレットを作成します。

    kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY
    
  3. datadog-values.yaml を作成し、以下の構成を追加します。

    datadog:
     apiKeyExistingSecret: datadog-secret
     site: <DATADOG_SITE>
     tags:
          - env:<AGENT_ENV>
     apm:
       instrumentation:
          enabled: true
          libVersions:
             java: "1"
             dotnet: "3"
             python: "2"
             js: "5"
    

    <DATADOG_SITE> をお使いの Datadog サイトに、<AGENT_ENV> を Agent がインストールされる環境 (例: env:staging) に置き換えてください。

    その他のオプションについては、高度なオプションをご覧ください。
  4. 次のコマンドを実行します。

    helm install datadog-agent -f datadog-values.yaml datadog/datadog
    
  5. Datadog Cluster Agent の変更が反映されるまで数分待ってから、アプリケーションを再起動します。

これらの手順を完了した後、ランタイムメトリクスを有効にしたり、Service Catalog でアプリケーションの可観測性データを確認したりすることができます。

高度なオプション

ワンラインのインストールコマンドを実行するとき、いくつかのオプションでカスタマイズが可能です。

DD_APM_INSTRUMENTATION_LIBRARIES - APM ライブラリのカスタマイズ

DD_APM_INSTRUMENTATION_ENABLED が設定されている場合、デフォルトでは Java、Python、Ruby、Node.js、.NET Core の Datadog APM ライブラリがインストールされます。DD_APM_INSTRUMENTATION_LIBRARIES は、インストールするライブラリを上書きするために使用されます。値は、コロンで区切られたライブラリ名とバージョンのペアをカンマ区切りで並べた文字列です。

DD_APM_INSTRUMENTATION_LIBRARIES の例:

  • DD_APM_INSTRUMENTATION_LIBRARIES="java:1" - Java の Datadog APM ライブラリのみを、メジャーバージョン 1 のリリースラインに固定してインストールします。
  • DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2" - Java と Python の Datadog APM ライブラリのみを、メジャーバージョンをそれぞれ 1 と 2 に固定してインストールします。
  • DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5" - Java と Python の Datadog APM ライブラリのみを、それぞれ特定のバージョン 1.38.0 と 2.10.5 に固定してインストールします。

利用可能なバージョンは、各言語のソースリポジトリに一覧があります。

DD_APM_INSTRUMENTATION_LIBRARIES - APM ライブラリのカスタマイズ

DD_APM_INSTRUMENTATION_ENABLED が設定されている場合、デフォルトでは Java、Python、Ruby、Node.js、.NET Core の Datadog APM ライブラリがインストールされます。DD_APM_INSTRUMENTATION_LIBRARIES は、インストールするライブラリを上書きするために使用されます。値は、コロンで区切られたライブラリ名とバージョンのペアをカンマ区切りで並べた文字列です。

DD_APM_INSTRUMENTATION_LIBRARIES の例:

  • DD_APM_INSTRUMENTATION_LIBRARIES="java:1" - Java の Datadog APM ライブラリのみを、メジャーバージョン 1 のリリースラインに固定してインストールします。
  • DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2" - Java と Python の Datadog APM ライブラリのみを、メジャーバージョンをそれぞれ 1 と 2 に固定してインストールします。
  • DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5" - Java と Python の Datadog APM ライブラリのみを、それぞれ特定のバージョン 1.38.0 と 2.10.5 に固定してインストールします。

利用可能なバージョンは、各言語のソースリポジトリに一覧があります:

ネームスペース単位でインスツルメンテーションを有効/無効にする

特定のネームスペース内のアプリケーションに対して、インスツルメンテーションを有効または無効にできます。enabledNamespaces と disabledNamespaces は同時に設定できません。

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

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

   features:
     apm:
       instrumentation:
         enabled: true
         enabledNamespaces: # インスツルメントを有効にするネームスペースを追加
           - default
           - applications

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

   features:
     apm:
       instrumentation:
         enabled: true
         disabledNamespaces: # インスツルメンテーションを無効にするネームスペースを追加
           - default
           - applications

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

   datadog:
      apm:
        instrumentation:
          enabled: true
          enabledNamespaces: # インスツルメントを有効にするネームスペースを追加
             - namespace_1
             - namespace_2

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

   datadog:
      apm:
        instrumentation:
          enabled: true
          disabledNamespaces: # インスツルメンテーションを無効にするネームスペースを追加
            - namespace_1
            - namespace_2

トレースライブラリバージョンの指定

Datadog Cluster Agent v7.52.0+ 以降では、指定したトレースライブラリに基づいて、一部のアプリケーションのみを自動的にインスツルメントできます。

アプリケーションが使用する言語に対応する Datadog のトレースライブラリとそのバージョンを指定すると、その言語で書かれたアプリケーションを自動的にインスツルメントできます。構成方法は以下の 2 つがあり、優先順位は次の順序で適用されます。

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

デフォルト: もしライブラリバージョンを一切指定せずに apm.instrumentation.enabled=true を設定した場合、サポートされている言語で書かれたアプリケーションは、最新のトレースライブラリバージョンを使用して自動的にインスツルメントされます。

サービスレベルでの指定

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

言語ポッドアノテーション
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>"

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

major バージョンのライブラリリリースでは後方互換性が壊れる変更が含まれる場合があるため、latest タグを使用する際は注意してください。

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

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    # ...
spec:
  template:
    metadata:
      annotations:
        admission.datadoghq.com/java-lib.version: "<CONTAINER IMAGE TAG>"
    spec:
      containers:
        - # ...

クラスターレベルでの指定

ポッドごとにアノテーションを用いて自動インスツルメントを有効にしない場合は、Single Step Instrumentation の構成を使ってクラスター全体でどの言語をインスツルメントするか指定できます。apm.instrumentation.libVersions が設定されている場合、指定した言語のアプリケーションのみ、指定したライブラリバージョンでインスツルメントされます。

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

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

   features:
     apm:
       instrumentation:
         enabled: true
         libVersions: # 設定したいライブラリとバージョンを追加
            dotnet: "3.2.0"
            python: "1.20.6"
            js: "4.17.0"

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

   datadog:
     apm:
       instrumentation:
         enabled: true
         libVersions: # 設定したいライブラリとバージョンを追加
            dotnet: "3.2.0"
            python: "1.20.6"
            js: "4.17.0"

コンテナレジストリ

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 に変更することで、別のレジストリからトレーシングライブラリを引き出すことができます。

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

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

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

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

特定のサービスの APM インスツルメンテーションを削除してトレース送信を停止する場合は、以下の手順に従ってください。

  1. サービス起動コマンドに環境変数 DD_INSTRUMENT_SERVICE_WITH_APM を追加します。

    DD_INSTRUMENT_SERVICE_WITH_APM=false <service_start_command>
    
  2. サービスを再起動します。

  1. サービス起動コマンドに環境変数 DD_INSTRUMENT_SERVICE_WITH_APM を追加します。
    docker run -e DD_INSTRUMENT_SERVICE_WITH_APM=false <service_start_command>
    
  2. サービスを再起動します。
  1. ポッド仕様の 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 をアンインストールしてインフラストラクチャーを再起動してください:

  1. 次を実行します。
    dd-host-install --uninstall
    
  2. ホストまたは VM 上のサービスを再起動します。
  1. 次を実行します。
    dd-container-install --uninstall
    
  2. Docker を再起動します。
    systemctl restart docker
    
    または、環境に応じたコマンドを使用してください。

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

  1. datadog-agent.yamlinstrumentation.enabled=false を設定します。

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

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

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

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

トラブルシューティング

Single Step Instrumentation が有効にならない

Single Step Instrumentation は、アプリケーション内に カスタムインスツルメンテーションが検出されると自動的に無効になります。SSI を使用したい場合は、以下を行う必要があります:

  1. 既存のカスタムインスツルメンテーションコードを削除します。
  2. アプリケーションを再起動します。

参考資料

お役に立つドキュメント、リンクや記事: