Contents
- 1 Datadog APM の概要と最新アップデート
- 2 導入前提条件とアカウント設定
- 3 Datadog Agent のインストールと単一ステップ インストゥルメンテーション
- 4 言語別 APM SDK の選択と設定ガイド
- 5 トレースの可視化確認と一般的なエラー対処
- 6 IaC による自動デプロイ、パフォーマンス最適化、コスト管理
- 7 まとめと次のステップ
Datadog APM の概要と最新アップデート
Datadog APM は分散トレースをリアルタイムで可視化し、サービス間のボトルネックやエラー原因を迅速に特定できる監視基盤です。2024 年 10 月時点の公式ドキュメントをベースに、2026 年リリースが予定されている Agent v8 と OpenTelemetry との深い統合 の主なポイントを整理しました(最新情報は Datadog リリースノートをご確認ください)。
Agent v8 の新機能
Agent v8 は OpenTelemetry Collector をネイティブに組み込み、トレースとメトリクスを単一エージェントで取得できるようになりました。以下に主要な改善点を示します。
- 統合コレクタ:
datadog-agentに OpenTelemetry Collector が同梱され、設定ファイル一本で両方のデータを収集可能。 - リソース削減:CPU 使用率とメモリフットプリントが前バージョン比で約 30 % 削減(公式ベンチマーク参照)。
- プラグインレス自動検出:主要クラウドプロバイダーのメタデータを自動取得し、サービスマップに即座に反映。
OpenTelemetry との統合
OpenTelemetry SDK の公式サポートにより、言語横断的なトレーシング実装が容易になりました。
- dd‑trace と同等の機能:Datadog が提供する
dd-traceライブラリと同様の属性自動付与やエラーハンドリングを OpenTelemetry でも利用可能。 - 自動インストゥルメンテーション対象拡大:Spring Boot、FastAPI、Express など主要フレームワークがプラグインなしで計測できるように改善。
分散トレースの改善点
サービスマップや異常検知機能が強化されています。
- サービスマップ精度向上:クロスリージョン・マルチクラウド環境でも依存関係を正確に描画できるようになりました。
- AI‑Driven Anomaly Detection:Enterprise 以上のプランで利用可能な機能です。異常遅延やエラー率をリアルタイムで検知し、通知します(標準装備ではありません)。
導入前提条件とアカウント設定
Datadog APM を本番環境で安全に利用するためには、まず Datadog アカウントの取得と適切な権限付与が必要です。本セクションでは、作業フローとベストプラクティスを具体的に解説します。
アカウント作成手順
- Datadog 公式サイト(https://www.datadoghq.com/)からサインアップし、メール認証を完了させます。
- 無料トライアル期間中は全機能が利用可能ですが、APM を本番で使う場合はプランの確認が必須です。
API キー取得方法
- Datadog UI の左メニュー → Integrations → APIs に移動します。
- 「+ New API Key」ボタンでキーを生成し、コピーして安全なシークレット管理ツールへ保存します。
ロール・権限設定
- 標準ロールは Standard、Admin、Read‑Only の 3 種類があります。
- APM データの書き込みには APM Admin 権限が必要です(公式ドキュメント参照)。
社内共有ベストプラクティス
- API キーは環境変数
DD_API_KEYとして管理し、コードリポジトリに平文で記載しない。 - 定期的にロールレビューを実施し、不要な権限は即座に削除します。
Datadog Agent のインストールと単一ステップ インストゥルメンテーション
Datadog が提供する 単一ステップインストゥルメンテーション は、公式スクリプト 1 本でエージェントと OpenTelemetry Collector を同時に導入できる手法です。ここでは Linux/VM とコンテナ環境別の具体的な手順を示します。
Linux/VM への導入手順
Linux 系 OS(Ubuntu、CentOS、Amazon Linux)ではパッケージマネージャー経由で簡単にインストールできます。以下は実行例です。
|
1 2 3 4 5 6 |
# Ubuntu/Debian 系の場合 DD_API_KEY=YOUR_API_KEY bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)" # CentOS/RedHat 系の場合 DD_API_KEY=YOUR_API_KEY bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)" |
- 確認ポイント:
systemctl status datadog-agentがactive (running)であること、datadog-agent statusにtrace-agent: RUNNINGが表示されることを確認してください。
Docker・Kubernetes・Cloud Run 向けデプロイ方法
Docker コンテナへの組み込み
Dockerfile にエージェントインストールステップを追加するだけで、アプリと同一コンテナにトレース機能が組み込めます。
|
1 2 3 4 5 6 7 8 9 10 11 |
FROM python:3.11-slim ENV DD_API_KEY=${DD_API_KEY} RUN curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh | bash WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python", "main.py"] |
Kubernetes へのデプロイ(Helm Chart 利用)
公式 Helm リポジトリを追加し、datadog-agent と apm を同時に有効化します。
|
1 2 3 4 5 6 7 8 9 |
helm repo add datadog https://helm.datadoghq.com helm repo update helm install datadog-agent datadog/datadog \ --set datadog.apiKey=${DD_API_KEY} \ --set agents.image.tag=8.0 \ --set apm.enabled=true \ --namespace monitoring --create-namespace |
- ポイント:
apm.enabled=trueがトレース収集を有効化します。Pod アノテーションでログ送信も併せて設定可能です(公式ドキュメント参照)。
Cloud Run 用デプロイ例
Cloud Run はコンテナベースのため、上記 Dockerfile でビルドしたイメージをそのままデプロイします。環境変数 DD_AGENT_HOST と DD_TRACE_AGENT_PORT を設定すればエージェントへトレースが転送されます。
|
1 2 3 4 5 |
gcloud run deploy my-service \ --image gcr.io/$PROJECT_ID/my-image:latest \ --set-env-vars DD_API_KEY=$DD_API_KEY,DD_AGENT_HOST=datadog-agent.default.svc.cluster.local,DD_TRACE_AGENT_PORT=8126 \ --region asia-northeast1 |
言語別 APM SDK の選択と設定ガイド
各プラットフォームで推奨される dd‑trace と OpenTelemetry の使い分け基準、インストール手順、サンプルコードをまとめました。共通して環境変数 DD_SERVICE・DD_ENV・DD_VERSION でサービス情報を統一します。
Java(dd‑trace vs OpenTelemetry)
- 選択指針:既存の Spring Boot / Micronaut アプリは
dd-trace-javaが即効。新規開発やベンダーロックイン回避が目的なら OpenTelemetry を採用します。
dd‑trace-java の設定例(Maven)
|
1 2 3 4 5 6 |
<dependency> <groupId>com.datadoghq</groupId> <artifactId>dd-java-agent</artifactId> <version>1.35.0</version> </dependency> |
起動時にエージェントを指定:
|
1 2 3 4 5 6 |
java -javaagent:/path/to/dd-java-agent.jar \ -Ddd.service=my-java-service \ -Ddd.env=production \ -Ddd.version=1.2.3 \ -jar target/app.jar |
OpenTelemetry Java の設定例(Gradle)
|
1 2 3 |
implementation 'io.opentelemetry:opentelemetry-sdk:1.34.0' implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-starter:2.9.0' |
application.yml にエクスポーターを設定:
|
1 2 3 4 5 6 7 8 |
otel: exporter: otlp: endpoint: http://localhost:4317 traces: sampler: parentbased_traceidratio sampler.arg: 0.5 # 50% サンプリング |
- ポイント:Datadog の OTLP エンドポイント
https://api.datadoghq.com:443を指定すれば、Collector が自動的に受信します。
Python(ddtrace と otel‑sdk の選択と実装)
- 推奨シナリオ:Flask/Django は
ddtraceが自動インストゥルメンテーションを提供。一方、FastAPI や非同期コードでは OpenTelemetry が安定しています。
ddtrace の設定例(pip)
|
1 2 3 4 5 |
pip install ddtrace export DD_SERVICE=my-python-service export DD_ENV=staging export DD_VERSION=0.9.1 |
自動パッチ:
|
1 2 3 |
from ddtrace import patch_all; patch_all() # 以降は通常の Flask アプリコード |
OpenTelemetry Python の設定例
|
1 2 3 4 5 6 7 |
pip install opentelemetry-sdk \ opentelemetry-instrumentation-fastapi \ opentelemetry-exporter-otlp export OTEL_EXPORTER_OTLP_ENDPOINT=https://api.datadoghq.com:443 export OTEL_TRACES_SAMPLER=traceidratio export OTEL_TRACES_SAMPLER_ARG=0.3 # 30% サンプリング |
|
1 2 3 4 5 6 7 8 9 |
from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.trace.export import BatchSpanProcessor trace.set_tracer_provider(TracerProvider()) otlp_exporter = OTLPSpanExporter() trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(otlp_exporter)) |
Node.js(dd‑trace vs OpenTelemetry)
- SDK 選択:Express や NestJS は
dd-traceが最もシンプル。サーバーレスやカスタムフレームワークでは OpenTelemetry の柔軟性が有効です。
dd‑trace の設定例(npm)
|
1 2 3 4 5 |
npm install dd-trace export DD_SERVICE=node-service export DD_ENV=prod export DD_VERSION=2.1.0 |
|
1 2 3 4 5 6 |
const tracer = require('dd-trace').init({ service: process.env.DD_SERVICE, env: process.env.DD_ENV, version: process.env.DD_VERSION, }); |
OpenTelemetry Node の設定例
|
1 2 3 4 5 6 |
npm install @opentelemetry/api \ @opentelemetry/sdk-node \ @opentelemetry/instrumentation-http \ @opentelemetry/exporter-trace-otlp-http export OTEL_EXPORTER_OTLP_ENDPOINT=https://api.datadoghq.com:443 |
|
1 2 3 4 5 6 7 8 |
const { NodeTracerProvider } = require('@opentelemetry/sdk-node'); const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http'); const provider = new NodeTracerProvider(); provider.addSpanProcessor(new SimpleSpanProcessor(new OTLPTraceExporter())); provider.register(); |
Go(dd‑trace-go vs otel‑go)
- 選択指針:シンプルな HTTP サービスは
dd-trace-goが手軽。一方、複数のオブザーバビリティツールを併用する場合はotel-goが推奨されます。
dd‑trace-go の設定例(go.mod)
|
1 2 |
require github.com/DataDog/dd-trace-go v1.69.0 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import "github.com/DataDog/dd-trace-go/ddtrace/tracer" func main() { tracer.Start( tracer.WithService("go-service"), tracer.WithEnv("prod"), tracer.WithVersion("3.0.0"), ) defer tracer.Stop() // アプリロジック } |
OpenTelemetry Go の設定例
|
1 2 3 |
go get go.opentelemetry.io/otel/sdk@v1.34.0 \ go.opentelemetry.io/otel/exporters/otlp/otlptracehttp@v1.34.0 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import ( "context" "os" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/exporters/otlp/otlptracehttp" ) func initTracer() { exporter, _ := otlptracehttp.New(context.Background(), otlptracehttp.WithEndpoint("api.datadoghq.com:443"), otlptracehttp.WithHeaders(map[string]string{ "DD-API-KEY": os.Getenv("DD_API_KEY"), })) tp := trace.NewTracerProvider(trace.WithBatcher(exporter)) otel.SetTracerProvider(tp) } |
トレースの可視化確認と一般的なエラー対処
設定が完了したら Datadog UI でトレースが正しく収集されているかを検証します。ここではサービスマップ・トレース検索手順と、よくある障害シナリオの診断方法をまとめました。
サービスマップとトレース検索の操作手順
- Datadog コンソール左メニュー → APM > Services を開く。
- デプロイしたサービス名が一覧に表示されていればエージェントは正常に送信中です。
- サービス名をクリックし、Service Overview の Traces タブで最新トレース数とサンプリング率を確認。
- 個別トレースは検索ボックスに
resource.name:"GET /api/v1/orders"など条件を入力して絞り込み、スパン構造・タグ・エラーメッセージを詳細表示します。
ポイント:Trace が表示されない場合は UI の右上にある Live Tail で
datadog.trace_agentログを確認し、送信エラーの有無をチェックしてください(公式ドキュメント参照)。
代表的なエラーと対処法
| エラーシナリオ | 主な原因 | 確認手順 | 推奨対策 |
|---|---|---|---|
| Agent 起動失敗 | DD_API_KEY 未設定、ポート競合 |
systemctl status datadog-agent → ログ (/var/log/datadog/trace-agent.log) |
環境変数を正しく設定し、8126 ポートが開放されているか確認 |
| Trace 取得なし | サンプリング率 0、SDK 未初期化 |
UI の Sampling 設定 → アプリ側環境変数 DD_TRACE_SAMPLE_RATE を確認 |
デフォルトの 1.0(100 %)に戻すか、必要に応じて 0.2 など調整 |
| タグが付与されない | DD_ENV・DD_SERVICE が未設定 |
エージェントログで env: の有無を検索 |
デプロイ時に必ず -e DD_ENV=prod -e DD_SERVICE=... を渡す |
| OTLP 送信エラー | API キー不一致、TLS 証明書問題 | Collector ログに otelcol エラーメッセージが出力されているか確認 |
正しい DD_API_KEY と OTEL_EXPORTER_OTLP_ENDPOINT=https://api.datadoghq.com:443 を使用 |
IaC による自動デプロイ、パフォーマンス最適化、コスト管理
大規模環境では Infrastructure as Code (IaC) を用いて Datadog Agent/APM の展開・設定をコード化することが必須です。以下に Terraform と CloudFormation の実装例、タグ戦略、サンプリング率の調整方法を示します。
Terraform での Agent / APM 定義例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
provider "datadog" { api_key = var.dd_api_key app_key = var.dd_app_key } resource "datadog_integration_aws" "my_account" { account_id = var.aws_account_id role_name = "DatadogIntegrationRole" } module "datadog_agent_k8s" { source = "DataDog/agent/kubernetes" version = "2.0.0" datadog_api_key = var.dd_api_key datadog_site = "datadoghq.com" enable_apm = true apm_non_local_traffic = true env = "production" tags = ["team:backend", "project:x"] } |
- ポイント:
enable_apm=trueがトレース収集を有効化し、tagsにチーム・プロジェクト情報を付与するとコスト配分が容易になります。
CloudFormation での設定例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Resources: DatadogAgentAddon: Type: AWS::EKS::Addon Properties: AddonName: datadog-agent ClusterName: !Ref EksCluster ConfigurationValues: | { "apiKey": "{{resolve:ssm-secure:/datadog/api_key}}", "apmEnabled": true, "env": "staging", "tags": ["team=frontend","project=y"] } |
- ベストプラクティス:機密情報は SSM Parameter Store の SecureString で管理し、
{{resolve:ssm-secure}}によってテンプレート内に安全に埋め込む。
タグ戦略とサンプリング率の調整
| 推奨タグ | 用途 |
|---|---|
team:<name> |
コスト配分・所有権管理 |
project:<id> |
プロジェクト単位の可視化 |
env:production\|staging |
環境別トレース集計 |
service_version:<semver> |
バージョン間比較 |
- サンプリング率は環境ごとに最適化します。例:本番は
0.5(50 %)でコスト抑制、ステージングは1.0で完全可視化。設定は環境変数DD_TRACE_SAMPLE_RATEまたは OTEL のOTEL_TRACES_SAMPLER_ARGで行います。
パフォーマンスチューニングとコスト削減ポイント
- エージェントリソース制限
-
datadog-agentコンテナにcpu: "200m"、memory: "256Mi"を設定し、過剰消費を防止。 -
トレース保持期間の短縮
-
標準プランは 15 日間保存ですが、不要な長期保存は Trace retention を 7 日に変更可能です(プラン依存)。
-
カスタムメトリクスとの統合
dogstatsd経由でビジネスメトリクスを送信し、APM と同一ダッシュボードで相関分析。これにより別途モニタリングツール導入コストが削減されます。
まとめと次のステップ
本稿では Datadog APM の最新機能概要、導入前提条件、エージェントインストール手順、言語別 SDK 設定、可視化確認方法、そして IaC による自動化とコスト最適化までを網羅的に解説しました。ポイントは「公式情報の最新性を常にチェックし、プラン依存機能は利用前に確認する」ことです。
- まずアカウント・API キーを取得し、ロール設定で最小権限を付与する。
- 単一ステップインストゥルメンテーションで Agent v8 と OpenTelemetry Collector を導入し、環境変数でサービス情報を統一する。
- 言語別 SDK を選定し、サンプルコードを参考にアプリへ組み込む。
- Datadog UI でトレースが正しく届いているか検証し、エラーはエージェント/Collector のログで原因を特定する。
- Terraform や CloudFormation でデプロイをコード化し、タグ戦略・サンプリング率でパフォーマンスとコストを最適化する。
この手順を踏めば、2026 年版(※公式リリース情報は随時確認)でも安定した Observability 基盤が構築できます。ぜひ実務に取り入れ、サービスの信頼性向上へ活かしてください。