- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
アプリケーションのトレースを収集するには、Kubernetes クラスターで Datadog Agent を実行する必要があります。
TCP (IP:Port
)、Unix Domain Socket (UDS) のいずれか、または両方を使用して、Agent がトレースを取り込むように構成することができます。Agent は、必要に応じて両方のセットアップから同時にトレースを受信することができます。
デフォルトのコンフィギュレーションにより、ホスト上にディレクトリが作成され、Agent 内にマウントされます。次に Agent はソケットファイル /var/run/datadog/apm.socket
を作成し、リッスンします。アプリケーションポッドも同様に、このボリュームをマウントして、この同じソケットに書き込むことができます。datadog.apm.hostSocketPath
と datadog.apm.socketPath
のコンフィギュレーション値で、パスとソケットを変更することが可能です。
この機能は datadog.apm.socketEnabled
で無効にすることができます。
Datadog Agent は、TCP 経由でトレースを受信するように構成することも可能です。この機能を有効にするには:
values.yaml
ファイルを更新します。datadog:
## Enable apm agent and provide custom configs
apm:
# datadog.apm.portEnabled -- Enable APM over TCP communication (port 8126 by default)
## ref: https://docs.datadoghq.com/agent/kubernetes/apm/
portEnabled: true
続いて、次のコマンド helm upgrade -f values.yaml <RELEASE NAME> datadog/datadog
を使用して Datadog Helm チャートをアップグレードします。values.yaml
にオペレーディングシステムを設定していない場合は、このコマンドに --set targetSystem=linux
または --set targetSystem=windows
を追加します。
警告: datadog.apm.portEnabled
パラメーターを指定すると、ホストのポートが開かれます。アプリケーションまたは信頼できるソースからのみアクセスを許可するように、ファイアウォールを設定してください。ネットワークプラグインが hostPorts
をサポートしていない場合は、hostNetwork: true
を Agent ポッド仕様に追加してください。ホストのネットワークネームスペースが Datadog Agent と共有されます。つまり、コンテナで開かれたすべてのポートはホストで開きます。ポートがホストとコンテナの両方で使用されると、競合し (同じネットワークネームスペースを共有するので)、ポッドが開始しません。これを許可しない Kubernetes インストールもあります。
APM トレースの収集を有効にするには、DaemonSet コンフィギュレーションファイルを開いて以下を編集します。
ポート 8126
からの受信データ (ホストからエージェントへのトラフィックを転送) を trace-agent
コンテナ内で許可するようにします。
# (...)
containers:
- name: trace-agent
# (...)
ports:
- containerPort: 8126
hostPort: 8126
name: traceport
protocol: TCP
# (...)
古いバージョンの Agent (7.17 以前) を使用している場合は、上記の手順に加えて、datadog.yaml
トレース Agent マニフェストの env
セクションで DD_APM_NON_LOCAL_TRAFFIC
変数と DD_APM_ENABLED
変数を true
に設定してください。
# (...)
containers:
- name: trace-agent
# (...)
env:
- name: DD_APM_ENABLED
value: 'true'
- name: DD_APM_NON_LOCAL_TRAFFIC
value: "true"
# (...)
警告: hostPort
パラメーターを指定すると、ホストのポートが開かれます。アプリケーションまたは信頼できるソースからのみアクセスを許可するように、ファイアウォールを設定してください。ネットワークプラグインが hostPorts
をサポートしていない場合は、hostNetwork: true
を Agent ポッド仕様に追加してください。ホストのネットワークネームスペースが Datadog Agent と共有されます。つまり、コンテナで開かれたすべてのポートはホストで開きます。ポートがホストとコンテナの両方で使用されると、競合し (同じネットワークネームスペースを共有するので)、ポッドが開始しません。これを許可しない Kubernetes インストールもあります。
APM トレースの収集を有効にするには、DaemonSet コンフィギュレーションファイルを開いて以下を編集します。
# (...)
containers:
- name: trace-agent
# (...)
env:
- name: DD_APM_ENABLED
value: "true"
- name: DD_APM_RECEIVER_SOCKET
value: "/var/run/datadog/apm.socket"
# (...)
volumeMounts:
- name: apmsocket
mountPath: /var/run/datadog/
volumes:
- hostPath:
path: /var/run/datadog/
type: DirectoryOrCreate
# (...)
このコンフィギュレーションにより、ホスト上にディレクトリが作成され、Agent 内にマウントされます。Agent はそのディレクトリに DD_APM_RECEIVER_SOCKET
の値を /var/run/datadog/apm.socket
としたソケットファイルを作成し、リッスンするようにします。アプリケーションポッドも同様に、このボリュームをマウントして、この同じソケットに書き込むことができます。
APM が有効になると、デフォルトのコンフィギュレーションにより、ホスト上にディレクトリが作成され、Agent 内にマウントされます。次に Agent はソケットファイル /var/run/datadog/apm/apm.socket
を作成し、リッスンします。アプリケーションポッドも同様に、このボリュームをマウントして、この同じソケットに書き込むことができます。features.apm.unixDomainSocketConfig.path
のコンフィギュレーション値で、パスとソケットを変更することが可能です。
Datadog Agent は、TCP 経由でトレースを受信するように構成することも可能です。この機能を有効にするには:
DatadogAgent
のマニフェストを以下のように更新します。
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
global:
credentials:
apiKey: <DATADOG_API_KEY>
site: <DATADOG_SITE>
features:
apm:
enabled: true
hostPortConfig:
enabled: true
<DATADOG_SITE>
が である場合 (デフォルトは
datadoghq.com
)。
完全な例については、APM とメトリクス収集が有効になっているマニフェストの例を参照してください。
次に、新しいコンフィギュレーションを適用します。
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
警告: hostPort
パラメーターを指定すると、ホストのポートが開かれます。アプリケーションまたは信頼できるソースからのみアクセスを許可するように、ファイアウォールを設定してください。ネットワークプラグインが hostPorts
をサポートしていない場合は、hostNetwork: true
を Agent ポッド仕様に追加してください。ホストのネットワークネームスペースが Datadog Agent と共有されます。つまり、コンテナで開かれたすべてのポートはホストで開きます。ポートがホストとコンテナの両方で使用されると、競合し (同じネットワークネームスペースを共有するので)、ポッドが開始しません。これを許可しない Kubernetes インストールもあります。
注: minikube では、Unable to detect the kubelet URL automatically
(キューブレット URL を自動的に検出できません)というエラーが表示される場合があります。この場合、DD_KUBELET_TLS_VERIFY=false
を設定します。
Datadog Admission Controller は、Datadog Cluster Agent のコンポーネントで、アプリケーションポッドの構成を簡素化します。詳しくは、Datadog Admission Controller ドキュメントをお読みください。
Datadog Admission Controller を使用して環境変数を挿入し、新しいアプリケーションポッドに必要なボリュームをマウントすることで、ポッドと Agent のトレース通信を自動で構成します。Datadog Agent にトレースを送信するためにアプリケーションを自動的に構成する方法については、Admission Controller を使ったライブラリの挿入のドキュメントを参照してください。
Unix Domain Socket (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_AGENT_HOST
(IP:Port
の場合) または DD_TRACE_AGENT_URL
(UDS の場合) のエンドポイントにトレースを送出します。
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
(IP:Port
の場合) または DD_TRACE_AGENT_URL
(UDS の場合) のエンドポイントにトレースを送出します。
その他の例については、言語ごとの APM インスツルメンテーションドキュメントを参照してください。
注: Datadog では、タグを付ける際のベストプラクティスとして、統合サービスタグ付けを使用することをおすすめしています。統合サービスタグ付けは、env
、service
、version
の 3 つの標準タグを使用して Datadog テレメトリーと結合します。ご使用環境で統合タグ付けを構成する方法に関する詳細は、統合サービスタグ付けドキュメントをご参照ください。
Kubernetes で稼働する Agent 内のトレースに利用可能なすべての環境変数をリストします。
環境変数 | 説明 |
---|---|
DD_API_KEY | Datadog API キー |
DD_PROXY_HTTPS | 使用するプロキシの URL をセットアップします。 |
DD_APM_REPLACE_TAGS | スパンのタグから機密データをスクラブします。 |
DD_HOSTNAME | 自動検出が失敗した場合、または Datadog Cluster Agent を実行する場合に、メトリクスに使用するホスト名を手動で設定します。 |
DD_DOGSTATSD_PORT | DogStatsD ポートを設定します。 |
DD_APM_RECEIVER_SOCKET | 設定した場合、Unix Domain Sockets からトレースを収集し、ホスト名とポートコンフィギュレーションよりも優先します。デフォルトでは設定されていません。設定する場合は、有効な sock ファイルを指定する必要があります。 |
DD_BIND_HOST | StatsD とレシーバーのホスト名を設定します。 |
DD_LOG_LEVEL | ログレベルを設定します。(trace /debug /info /warn /error /critical /off ) |
DD_APM_ENABLED | true に設定すると、Datadog Agent はトレースメトリクスを受け取ります。デフォルト値は true です(Agent 7.18 以上)。 |
DD_APM_CONNECTION_LIMIT | 30 秒のタイムウィンドウに対する最大接続制限を設定します。 |
DD_APM_DD_URL | トレースが送信される Datadog API エンドポイントを設定します: https://trace.agent. 。デフォルトは https://trace.agent.datadoghq.com 。 |
DD_APM_RECEIVER_PORT | Datadog Agent のトレースレシーバーがリスニングするポート。デフォルト値は 8126 です。 |
DD_APM_NON_LOCAL_TRAFFIC | 他のコンテナからのトレース時に、非ローカルトラフィックを許可します。デフォルト値は true です(Agent 7.18 以上)。 |
DD_APM_IGNORE_RESOURCES | Agent が無視するリソースを構成します。書式はカンマ区切りの正規表現です。例: GET /ignore-me,(GET|POST) /and-also-me となります。 |
DD_ENV | Agent によって発行されたすべてのデータにグローバル env を設定します。トレースデータに env が存在しない場合、この変数が使用されます。詳細については、APM 環境設定を参照してください。 |
環境変数 | 説明 |
---|---|
agent.apm.enabled | これを有効にすると、ポート 8126 で APM とトレースが有効になります。Datadog Docker のドキュメントを参照してください。 |
agent.apm.env | Datadog Agent は、多くの環境変数をサポートしています。 |
agent.apm.hostPort | ホストで公開するポートの数。指定する場合、これは有効なポート番号 0 < x < 65536 である必要があります。HostNetwork を指定する場合、これは ContainerPort と一致する必要があります。ほとんどのコンテナはこれを必要としません。 |
agent.apm.resources.limits | 制限は、許可されるコンピューティングリソースの最大量を表します。詳細については、Kubernetes のドキュメントを参照してください。 |
agent.apm.resources.requests | リクエストには、必要なコンピューティングリソースの最小量を表します。コンテナの requests が省略されている場合、明示的に指定されている場合はデフォルトで limits になり、それ以外の場合は実装定義の値になります。詳細については、Kubernetes のドキュメントを参照してください。 |