Kubernetes APM - トレース収集

learning center
ラーニングセンターで Kubernetes のモニタリングの紹介をご覧ください

実際のクラウドの計算リソースと Datadog のトライアルアカウントを使って、無料で学習できます。これらのハンズオンラボを開始して、Kubernetes に特有のメトリクス、ログ、および APM トレースについて短期間で理解を深めましょう。

今すぐ登録

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

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

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

注意: 手動構成なしで自動インスツルメンテーションを行うには、Kubernetes 用のシングルステップインスツルメンテーション を参照してください。

セットアップ

  1. まだインストールしていない場合は、使用している Kubernetes 環境に応じた Datadog Agent をインストールしてください。
  2. Configure the Datadog Agent してトレースを収集します。
  3. Configure application pods して Datadog Agent にトレースを送信します。

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

このセクションの指示では、UDS 経由でトレースを受信するように Datadog Agent を構成します。TCP を使用する場合は、additional configuration セクションを参照してください。Kubernetes サービスを使用する場合は、Kubernetes サービスでの APM の設定 を参照してください。

datadog-agent.yaml を編集して、features.apm.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 エラーが発生する場合があります。この場合、global.kubelet.tlsVerifyfalse に設定します。

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

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

datadog:
  apm:
    socketEnabled: true    

デフォルトの構成では、ホスト上にディレクトリが作成され、Agent 内にマウントされます。次に Agent はソケットファイル /var/run/datadog/apm.socket を作成し、リッスンします。アプリケーションポッドは、このボリュームを同様にマウントし、同じソケットに書き込むことができます。datadog.apm.hostSocketPath および datadog.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 エラーが発生する場合があります。この場合、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

以下の手順で、アプリケーション SDK がトレースを送信するように構成します。

Datadog Agent がトレースを収集するように構成し、アプリケーションポッドにトレースの送信に関する設定を行った後、Datadog SDK をアプリケーションにインストールしてトレースを送信します。これが完了すると、SDK は適切な 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 上のトレースを受け入れるように構成されている必要があります。

以下の手順で、アプリケーション SDK がトレースを送信するように構成します。

Datadog Agent がトレースを収集するように構成し、アプリケーションポッドにトレースの送信に関する設定を行った後、Datadog SDK をアプリケーションにインストールしてトレースを送信します。これが完了すると、SDK は適切な 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 がサポートされていない場合は、Agent Pod の仕様に hostNetwork: true を追加してください。これにより、ホストのネットワークネームスペースが Datadog Agent と共有されます。これは、コンテナ上で開かれるすべてのポートがホスト上でも開かれることを意味します。ホストとコンテナの両方でポートが使用されている場合、それらは競合し (同じネットワークネームスペースを共有しているため)、Pod は起動しません。一部の 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 がサポートされていない場合は、Agent Pod の仕様に hostNetwork: true を追加してください。これにより、ホストのネットワークネームスペースが Datadog Agent と共有されます。これは、コンテナ上で開かれるすべてのポートがホスト上でも開かれることを意味します。ホストとコンテナの両方でポートが使用されている場合、それらは競合し (同じネットワークネームスペースを共有しているため)、Pod は起動しません。一部の 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..
Default: https://trace.agent.datadoghq.com
DD_APM_TARGET_TPSThe target traces per second to sample.
Default: 10
DD_APM_ERROR_TPSThe target error trace chunks to receive per second.
Default: 10
DD_APM_MAX_EPSMaximum number of APM events per second to sample.
Default: 200
DD_APM_MAX_MEMORYWhat the Datadog Agent aims to use in terms of memory. If surpassed, the API rate limits incoming requests.
Default: 500000000
DD_APM_MAX_CPU_PERCENTThe CPU percentage that the Datadog Agent aims to use. If surpassed, the API rate limits incoming requests.
Default: 50
DD_APM_FILTER_TAGS_REQUIRECollects only traces that have root spans with an exact match for the specified span tags and values.
See Ignoring unwanted resources in APM.
DD_APM_FILTER_TAGS_REJECTRejects traces that have root spans with an exact match for the specified span tags and values.
See Ignoring unwanted resources in APM.
DD_APM_REPLACE_TAGSScrub sensitive data from your span’s tags.
DD_APM_IGNORE_RESOURCESConfigure resources for the Agent to ignore. Format should be comma separated, regular expressions.
For example: GET /ignore-me,(GET|POST) /and-also-me
DD_APM_LOG_FILEPath to file where APM logs are written.
DD_APM_CONNECTION_LIMITMaximum connection limit for a 30 second time window.
Default: 2000
DD_APM_ADDITONAL_ENDPOINTSSend data to multiple endpoints and/or with multiple API keys.
See Dual Shipping.
DD_APM_DEBUG_PORTPort for the debug endpoints for the Trace Agent. Set to 0 to disable the server.
Default: 5012.
DD_BIND_HOSTSet the StatsD and receiver hostname.
DD_DOGSTATSD_PORTFor tracing over TCP, set the DogStatsD port.
DD_ENVSets the global env for all data emitted by the Agent. If env is not present in your trace data, this variable is used.
DD_HOSTNAMEManually set the hostname to use for metrics if autodetection fails, or when running the Datadog Cluster Agent.
DD_LOG_LEVELSet the logging level.
Values: trace, debug, info, warn, error, critical, off
DD_PROXY_HTTPS使用するプロキシの URL をセットアップします。

参考資料