Open7

DatadogにAPMをAzure App Service / Go アプリケーションに構築するまでのアレコレ

ピン留めされたアイテム
nitakingnitaking

やりたいこと

  • GoのAPIアプリケーションにDatadog APMを導入したい

現在の方針

他に検討したアプローチ

  1. Datadog Agentを構築し、送信
  2. Direct
    • Nodeのみ対応している認識
  3. Azure Sidecar
    • docker composeでコンテナを立てるイメージ
    • 料金的に微妙な認識
  4. Azure Sidecar with Extension
    • Win専用なので対象外

https://www.figma.com/deck/Qcc9voN7KtJxZOPJYXHpOY

nitakingnitaking

整理ver

実装アプローチ Pros / Cons 参考リンク
1アプリケーション事にDockerコンテナを一つ立てる Pros: docker-composeで別立てして、シンプルに送信
Cons: 各アプリケーション毎にコンテナの追加金額が発生。コスパと運用コストが気になる。
エージェントレスロギング Pros: Nodeはエージェントレス対応[1]
Cons: Goは非対応。

Goがエージェントレス非対応のため、断念。
[2]
Azure Sidecar docker composeでコンテナを立てる。
Pros: 任意のコンテナイメージを使用可能。カスタマイズ性の高さ。
Cons: マネージドでない。メンテコストが発生。設定の複雑さ。
Azure Sidecar with Extension Pros: マネージドであるため管理コスト低。設定のシンプルさ。
Cons: カスタマイズ性の低さ

With Extensionの違いによるコストの違いはない。
[3]
Instrument Azure App Service / Serverless init Azure App Service上で動作するアプリケーションにDatadogの監視・計測機能を組み込む。

Pros: Datadog Agentが不要。
Cons: 起動時にDatadogのエラーがあると起動プロセスが依存しているので、巻き込まれる可能性あり。
[4] [5]

脚注
  1. Node.js エージェントレス対応 ↩︎

  2. エージェントレスロギング ↩︎

  3. Azure Sidecar Extension ↩︎

  4. Azure App Service Container ↩︎

  5. Azure App Service 全般 ↩︎

nitakingnitaking

できていること

  • ローカル docker-compose にてdatadog-agentを立てることで、ローカルからAPMを送信できることは確認したい
nitakingnitaking

docker-compose.yaml

Serverlessで不要な点

  1. Docker Compose設定(不要になる)
  2. Dockerfile修正

# ✅ Serverless対応
# 既存の設定
ARG DD_GIT_REPOSITORY_URL
ARG DD_GIT_COMMIT_SHA
ENV DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL}
ENV DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA}

# ✅ 追加:serverless-init
COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
COPY . /app
ENTRYPOINT ["/app/datadog-init"]
CMD ["./your-go-app"]
  1. Bootstrap設定の変更

// ❌ ローカル用(Agent URL指定)
tracer.Start(
    tracer.WithAgentAddr("datadog-agent:8126"),
    tracer.WithService("api"),
    tracer.WithDebugMode(true),
)

// ✅ Serverless用(Agent URL不要)
tracer.Start(
    tracer.WithService("api"),
    tracer.WithDebugMode(true),
    // serverless-initが自動的にトレースを送信
)
  1. 環境変数設定(Azure App Service)

# ✅ Azure App Serviceの環境変数として設定
DD_API_KEY=your_api_key
DD_SITE=datadoghq.com
DD_SERVICE=api
DD_ENV=production
DD_VERSION=1.0.0

# ❌ 不要(serverless-initが処理)
# DD_AGENT_HOST
# DD_TRACE_AGENT_PORT
nitakingnitaking

• 再利用可能: TraceMiddleware、dd-trace-goライブラリ、Git関連の環境変数
• 変更必要: Docker構成(agent不要)、tracer初期化(AgentAddr削除)、環境変数設定方法
• 新規追加: serverless-init、Azure App Service固有の環境変数

つまり、アプリケーションレベルのトレース実装はそのまま使えますが、インフラ設定部分をServerless用に調整する必要があります。

nitakingnitaking

ローカル環境でもserverless-initの動作確認は可能