Kubernetes APM - トレース収集

learning center
ラーニングセンターで Kubernetes のモニタリング入門をお試しください

Datadog のトライアルアカウントと実際のクラウドコンピュートキャパシティを使用して、コストをかけずに学ぶことができます。ハンズオンラボを開始して、Kubernetes 固有のメトリクス、ログ、APM トレースを使いこなしましょう。

今すぐ登録

このページでは、Kubernetes アプリケーションを対象とした Application Performance Monitoring (APM) のセットアップと構成について説明します。

APM のトラブルシューティングパイプライン: トレーサーは、アプリケーションポッドから Agent ポッドにトレースとメトリクスデータを送信し、Agent ポッドはそれを Datadog バックエンドに送信して Datadog UI に表示させることができます。

トレースは Unix Domain Socket (UDS)、TCP (IP:Port)、または Kubernetes サービスを介して送信できます。Datadog では UDS の使用を推奨していますが、必要であれば 3 つすべてを同時に使用することも可能です。

セットアップ

  1. まだインストールしていない場合は、お使いの Kubernetes 環境に応じた Datadog Agent をインストールしてください。
  2. トレースを収集するように Datadog Agent を構成します
  3. トレースを Datadog Agent に送信するようにアプリケーションポッドを構成します

トレースを収集するように Datadog Agent を構成する

このセクションの説明では、UDS でトレースを受信するように Datadog Agent を構成します。TCP を使用するには、その他の構成セクションを参照してください。Kubernetes サービスを使用するには、Kubernetes サービスを使用して APM を設定するを参照してください。

datadog-agent.yaml を編集して features.liveProcessCollection.enabledtrue に設定します。

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>

  features:
    apm:
      enabled: true
      unixDomainSocketConfig:
        path: /var/run/datadog/apm.socket # default

APM が有効になると、デフォルトのコンフィギュレーションにより、ホスト上にディレクトリが作成され、Agent 内にマウントされます。次に Agent はソケットファイル /var/run/datadog/apm/apm.socket を作成し、リッスンします。アプリケーションポッドも同様に、このボリュームをマウントして、この同じソケットに書き込むことができます。features.apm.unixDomainSocketConfig.path のコンフィギュレーション値で、パスとソケットを変更することが可能です。

After making your changes, apply the new configuration by using the following command:

kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml

: minikube では、Unable to detect the kubelet URL automatically(キューブレット URL を自動的に検出できません)というエラーが表示される場合があります。この場合、global.kubelet.tlsVerifyfalse に設定します。

Datadog Agent のインストールに Helm を使用した場合、APM は UDS または Windows の名前付きパイプでデフォルトで有効になっています。

確認するには、datadog-values.yamldatadog.apm.socketEnabledtrue に設定されていることを確認してください。

datadog:
  apm:
    socketEnabled: true    

デフォルトのコンフィギュレーションにより、ホスト上にディレクトリが作成され、Agent 内にマウントされます。次に Agent はソケットファイル /var/run/datadog/apm.socket を作成し、リッスンします。アプリケーションポッドも同様に、このボリュームをマウントして、この同じソケットに書き込むことができます。datadog.apm.hostSocketPathdatadog.apm.socketPath のコンフィギュレーション値で、パスとソケットを変更することが可能です。

datadog:
  apm:
    # the following values are default:
    socketEnabled: true
    hostSocketPath: /var/run/datadog/
    socketPath: /var/run/datadog/apm.socket

APM を無効にするには、datadog.apm.socketEnabledfalse に設定します。

After making your changes, upgrade your Datadog Helm chart using the following command:

helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog

: minikube では、Unable to detect the kubelet URL automatically(キューブレット URL を自動的に検出できません)というエラーが表示される場合があります。この場合、datadog.kubelet.tlsVerifyfalse に設定します。

Datadog Agent にトレースを送信するためのアプリケーションポッドの構成

Datadog Admission Controller は、Datadog Cluster Agent のコンポーネントで、アプリケーションポッドの構成を簡素化します。詳しくは、Datadog Admission Controller ドキュメントをお読みください。

Datadog Admission Controller を使用して環境変数を挿入し、新しいアプリケーションポッドに必要なボリュームをマウントすることで、ポッドと Agent のトレース通信を自動で構成します。Datadog Agent にトレースを送信するためにアプリケーションを自動的に構成する方法については、Admission Controller を使ったライブラリの挿入のドキュメントを参照してください。

UDS を使用して Agent にトレースを送信する場合は、ソケットのあるホストディレクトリ (Agent が作成したもの) をアプリケーションコンテナにマウントし、ソケットへのパスを DD_TRACE_AGENT_URL で指定します。

apiVersion: apps/v1
kind: Deployment
#(...)
    spec:
      containers:
      - name: "<CONTAINER_NAME>"
        image: "<CONTAINER_IMAGE>/<TAG>"
        env:
        - name: DD_TRACE_AGENT_URL
          value: 'unix:///var/run/datadog/apm.socket'
        volumeMounts:
        - name: apmsocketpath
          mountPath: /var/run/datadog
        #(...)
      volumes:
        - hostPath:
            path: /var/run/datadog/
          name: apmsocketpath

アプリケーショントレーサーがトレースを発するように構成します。

Datadog Agent がトレースを収集するように構成し、アプリケーションポッドにトレースの送信先に関する構成を行った後、Datadog トレーサーをアプリケーションにインストールして、トレースを送信します。これが完了すると、トレーサーは適切な DD_TRACE_AGENT_URL エンドポイントにトレースを自動的に送出します。

TCP (<IP_ADDRESS>:8126) を使用して Agent にトレースを送信している場合、この IP アドレスをアプリケーションポッドに供給します (Datadog Admission Controller で自動的に、または手動で下位 API を使用してホスト IP をプルします)。アプリケーションコンテナには、status.hostIP を指す環境変数 DD_AGENT_HOST が必要です。

apiVersion: apps/v1
kind: Deployment
#(...)
    spec:
      containers:
      - name: "<CONTAINER_NAME>"
        image: "<CONTAINER_IMAGE>/<TAG>"
        env:
          - name: DD_AGENT_HOST
            valueFrom:
              fieldRef:
                fieldPath: status.hostIP

注: この構成では、Agent が TCP 上のトレースを受け入れるように構成されている必要があります。

アプリケーショントレーサーがトレースを発するように構成します。

Datadog Agent がトレースを収集するように構成し、アプリケーションポッドにトレースの送信先に関する構成を行った後、Datadog トレーサーをアプリケーションにインストールして、トレースを送信します。これが完了すると、トレーサーは適切な DD_AGENT_HOST エンドポイントにトレースを自動的に送出します。

その他の例については、言語ごとの APM インスツルメンテーションドキュメントを参照してください。

追加構成

TCP 経由でトレースを受け取るように Datadog Agent を構成する

datadog-agent.yaml を以下のように更新します。

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>

  features:
    apm:
      enabled: true
      hostPortConfig:
        enabled: true
        hostPort: 8126 # default

After making your changes, apply the new configuration by using the following command:

kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml

警告: hostPort パラメーターを指定すると、ホストのポートが開かれます。アプリケーションまたは信頼できるソースからのみアクセスを許可するように、ファイアウォールを設定してください。ネットワークプラグインが hostPorts をサポートしていない場合は、hostNetwork: true を Agent ポッド仕様に追加してください。ホストのネットワークネームスペースが Datadog Agent と共有されます。つまり、コンテナで開かれたすべてのポートはホストで開きます。ポートがホストとコンテナの両方で使用されると、競合し (同じネットワークネームスペースを共有するので)、ポッドが開始しません。これを許可しない Kubernetes インストールもあります。

以下の APM コンフィギュレーションを使用して、datadog-values.yaml ファイルを更新します。

datadog:
  apm:
    portEnabled: true
    port: 8126 # default

After making your changes, upgrade your Datadog Helm chart using the following command:

helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog

警告: datadog.apm.portEnabled パラメーターを指定すると、ホストのポートが開かれます。アプリケーションまたは信頼できるソースからのみアクセスを許可するように、ファイアウォールを設定してください。ネットワークプラグインが hostPorts をサポートしていない場合は、hostNetwork: true を Agent ポッド仕様に追加してください。ホストのネットワークネームスペースが Datadog Agent と共有されます。つまり、コンテナで開かれたすべてのポートはホストで開きます。ポートがホストとコンテナの両方で使用されると、競合し (同じネットワークネームスペースを共有するので)、ポッドが開始しません。これを許可しない Kubernetes インストールもあります。

APM 環境変数

override.nodeAgent.containers.trace-agent.env にその他の APM 環境変数を設定します。

datadog-agent.yaml

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  override:
    nodeAgent:
      containers:
        trace-agent:
          env:
            - name: <ENV_VAR_NAME>
              value: <ENV_VAR_VALUE>

agents.containers.traceAgent.env にその他の APM 環境変数を設定します。

datadog-values.yaml

agents:
  containers:
    traceAgent:
      env:
        - name: <ENV_VAR_NAME>
          value: <ENV_VAR_VALUE>

DaemonSet または Deployment (Datadog Cluster Agent 用) に環境変数を追加します。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: datadog
spec:
  template:
    spec:
      containers:
        - name: agent
          ...
          env:
            - name: <ENV_VAR_NAME>
              value: <ENV_VAR_VALUE>

APM の構成で利用可能な環境変数のリスト:

環境変数説明
DD_APM_ENABLEDtrue に設定すると、Datadog Agent はトレースメトリクスを受け取ります。
デフォルト: true (Agent 7.18 以上)。
DD_APM_ENV収集したトレースに env: タグを設定します。
DD_APM_RECEIVER_SOCKETUDS 経由のトレース用。設定されている場合、有効なソケットファイルを指す必要があります。
DD_APM_RECEIVER_PORTTCP 経由のトレースの場合、Datadog Agent のトレースレシーバーがリッスンするポート。
デフォルト: 8126
DD_APM_NON_LOCAL_TRAFFIC他のコンテナからのトレース時に、非ローカルトラフィックを許可します。
デフォルト: true (Agent 7.18 以上)。
DD_APM_DD_URLトレースが送信される Datadog API エンドポイント: https://trace.agent.
デフォルト: https://trace.agent.datadoghq.com
DD_APM_TARGET_TPSサンプリングする 1 秒あたりのトレースの目標数。
デフォルト: 10
DD_APM_ERROR_TPS1 秒あたりに受け取るエラートレースチャンクの目標数。
デフォルト: 10
DD_APM_MAX_EPSサンプリングする 1 秒あたりの APM イベントの最大数。
デフォルト: 200
DD_APM_MAX_MEMORYDatadog Agent のメモリ使用量の目標値。この値を超えると、API は受信リクエストを制限します。
デフォルト: 500000000
DD_APM_MAX_CPU_PERCENTDatadog Agent の CPU 使用率の目標値。この値を超えると、API は受信リクエストを制限します。
デフォルト: 50
DD_APM_FILTER_TAGS_REQUIRE指定されたスパンのタグと値が完全に一致するルートスパンを持つトレースのみを収集します。
APM で不要なリソースを無視するを参照してください。
DD_APM_FILTER_TAGS_REJECT指定されたスパンのタグと値が完全に一致するルートスパンを持つトレースを拒否します。
APM で不要なリソースを無視するを参照してください。
DD_APM_REPLACE_TAGSスパンのタグから機密データをスクラブします
DD_APM_IGNORE_RESOURCESAgent が無視するリソースを構成します。フォーマットはカンマ区切りの正規表現です。
例: GET /ignore-me,(GET|POST) /and-also-me
DD_APM_LOG_FILEAPM ログが書き込まれるファイルへのパス。
DD_APM_CONNECTION_LIMIT30 秒のタイムウィンドウに対する最大接続数の上限。
デフォルト: 2000
DD_APM_ADDITONAL_ENDPOINTS複数のエンドポイントや複数の API キーにデータを送信します。
デュアルシッピングを参照してください。
DD_APM_DEBUG_PORTトレース Agent のデバッグエンドポイント用ポート。サーバーを無効にするには、0 に設定します。
デフォルト: 5012
DD_BIND_HOSTStatsD とレシーバーのホスト名を設定します。
DD_DOGSTATSD_PORTTCP 経由のトレースの場合、DogStatsD ポートを設定します。
DD_ENVAgent が発するすべてのデータにグローバル env を設定します。トレースデータに env が存在しない場合、この変数が使用されます。
DD_HOSTNAME自動検出が失敗した場合、または Datadog Cluster Agent を実行する場合に、メトリクスに使用するホスト名を手動で設定します。
DD_LOG_LEVELログレベルを設定します。
: tracedebuginfowarnerrorcriticaloff
DD_PROXY_HTTPS使用するプロキシの URL をセットアップします。

その他の参考資料