Open7
DatadogにAPMをAzure App Service / Go アプリケーションに構築するまでのアレコレ
ピン留めされたアイテム
やりたいこと
- GoのAPIアプリケーションにDatadog APMを導入したい
現在の方針
他に検討したアプローチ
- Datadog Agentを構築し、送信
- Direct
- Nodeのみ対応している認識
- Azure Sidecar
- docker composeでコンテナを立てるイメージ
- 料金的に微妙な認識
- Azure Sidecar with Extension
- Win専用なので対象外
整理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] |
できていること
- ローカル docker-compose にてdatadog-agentを立てることで、ローカルからAPMを送信できることは確認したい
docker-compose.yaml
Serverlessで不要な点
- Docker Compose設定(不要になる)
- 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"]
- 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が自動的にトレースを送信
)
- 環境変数設定(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
• 再利用可能: TraceMiddleware、dd-trace-goライブラリ、Git関連の環境変数
• 変更必要: Docker構成(agent不要)、tracer初期化(AgentAddr削除)、環境変数設定方法
• 新規追加: serverless-init、Azure App Service固有の環境変数
つまり、アプリケーションレベルのトレース実装はそのまま使えますが、インフラ設定部分をServerless用に調整する必要があります。
ローカル環境でもserverless-initの動作確認は可能