Azure Container Apps

概要

Azure Container Apps is a fully managed serverless platform for deploying and scaling container-based applications. Datadog provides monitoring and log collection for Container Apps through the Azure integration. Datadog also provides a solution for instrumenting your Container Apps applications with a purpose-built Agent to enable tracing, custom metrics, and direct log collection.

前提条件

Datadog API キーを取得済みであることと、Datadog トレーシングライブラリがサポートするプログラミング言語を使用していることを確認してください。

アプリケーションをインスツルメントする

アプリケーションをインスツルメンテーションするには、Dockerfileビルドパックの 2 つの方法があります。

Dockerfile

Datadog publishes new releases of the serverless-init container image to Google’s gcr.io, AWS’ ECR, and on Docker Hub:

hub.docker.comgcr.iopublic.ecr.aws
datadog/serverless-initgcr.io/datadoghq/serverless-initpublic.ecr.aws/datadog/serverless-init

イメージはセマンティックバージョニングに基づいてタグ付けされ、新しいバージョンごとに 3 つの関連タグが付与されます。

  • 11-alpine: 重大な変更がない最新のマイナーリリースを追跡する場合、これらを使用します
  • 1.x.x1.x.x-alpine: ライブラリの正確なバージョンにピン留めする場合、これらを使用します
  • latestlatest-alpine: 重大な変更が含まれる可能性がある最新のバージョンリリースに従う場合、これらを使用します

serverless-init の動作

serverless-init アプリケーションはプロセスをラップし、サブプロセスとしてこれを実行します。このアプリケーションはメトリクス用の DogStatsD リスナーとトレース用の Trace Agent リスナーを起動します。アプリケーションの stdout/stderr ストリームをラップすることでログを収集します。ブートストラップの後、serverless-init はサブプロセスとしてコマンドを起動します。

完全なインスツルメンテーションを得るには、Docker コンテナ内で実行する最初のコマンドとして datadog-init を呼び出していることを確認します。これを行うには、エントリーポイントとして設定するか、CMD の最初の引数として設定します。

Dockerfile に以下の指示と引数を追加します。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
RUN pip install --target /dd_tracer/python/ ddtrace
ENV DD_SERVICE=datadog-demo-run-python
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. Datadog Python トレーサーをインストールします。

    RUN pip install --target /dd_tracer/python/ ddtrace
    

    手動トレーサーインスツルメンテーションの説明で説明したように、Datadog トレーサーライブラリをアプリケーションに直接インストールする場合は、このステップを省略してください。

  3. (オプション) Datadog タグを追加します。

    ENV DD_SERVICE=datadog-demo-run-python
    ENV DD_ENV=datadog-demo
    ENV DD_VERSION=1
    
  4. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  5. Datadog トレーシングライブラリによって起動されたエントリポイントにラップされたバイナリアプリケーションを実行します。この行は必要に応じて変更してください。

    CMD ["/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されている場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
RUN pip install --target /dd_tracer/python/ ddtrace
ENV DD_SERVICE=datadog-demo-run-python
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
CMD ["/app/datadog-init", "/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
RUN pip install --target /dd_tracer/python/ ddtrace
ENV DD_SERVICE=datadog-demo-run-python
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["your_entrypoint.sh", "/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

2. アプリケーションを構成する

コンテナが構築され、レジストリにプッシュされたら、最後の手順として Datadog Agent 用に必要な環境変数を設定します。

  • DD_API_KEY: データを Datadog アカウントに送信するために使用する Datadog API キー。プライバシーと安全性の問題を考慮して、Azure シークレットに設定する必要があります。

  • DD_SITE: Datadog のエンドポイントと Web サイト。このページの右側で自分のサイトを選択します。あなたのサイトは datadoghq.com です。

  • DD_AZURE_SUBSCRIPTION_ID: コンテナアプリリソースに関連付けられた Azure サブスクリプション ID (必須)。

  • DD_AZURE_RESOURCE_GROUP: コンテナアプリリソースに関連付けられた Azure リソースグループ (必須)。

  • DD_TRACE_ENABLED: true に設定してトレースを有効にします。

環境変数とその機能の詳細については、追加の構成を参照してください。

次のコマンドはサービスをデプロイし、外部からの接続がサービスに到達できるようにするためのコマンドです。DD_API_KEY を環境変数として設定し、サービスのリスニングポートを 80 に設定します。

az containerapp up \
  --name APP_NAME \
  --resource-group RESOURCE_GROUP \
  --ingress external \
  --target-port 80 \
  --env-vars "DD_API_KEY=$DD_API_KEY" "DD_TRACE_ENABLED=true" "DD_SITE=datadoghq.com" \
  --image YOUR_REGISTRY/YOUR_PROJECT

3. 結果

Once the deployment is completed, your metrics and traces are sent to Datadog. In Datadog, navigate to Infrastructure > Serverless to see your serverless metrics and traces.

追加の構成

  • 高度なトレース: Datadog Agent は、一般的なフレームワーク向けに基本的なトレース機能をすでにいくつか提供しています。さらに詳しい情報については、高度なトレースガイドに従ってください。

  • ログ: Azure インテグレーションを使用している場合は、すでにログが収集されています。また、環境変数 DD_LOGS_ENABLEDtrue に設定することで、サーバーレスインスツルメンテーションを通じて直接アプリケーションログをキャプチャすることも可能です。

  • カスタムメトリクス: DogStatsd クライアントを使って、カスタムメトリクスを送信することができます。Cloud Run やその他のサーバーレスアプリケーションの監視には、ディストリビューションメトリクスを使用します。ディストリビューションは、デフォルトで avgsummaxmincount の集計データを提供します。Metric Summary ページでは、パーセンタイル集計 (p50、p75、p90、p95、p99) を有効にすることができ、タグの管理も可能です。ゲージメトリクスタイプの分布を監視するには、時間集計と空間集計の両方で avg を使用します。カウントメトリクスタイプの分布を監視するには、時間集計と空間集計の両方で sum を使用します。

  • トレースサンプリング: サーバーレスアプリケーションの APM トレースリクエストサンプリングレートを管理するには、関数の DD_TRACE_SAMPLE_RATE 環境変数を 0.000 (コンテナアプリのリクエストをトレースしない) から 1.000 (すべてのコンテナアプリのリクエストをトレースする) の間の値に設定します。

メトリクスは、アプリケーションの 100% のトラフィックに基づいて計算され、どのようなサンプリング構成であっても正確な値を維持します。

環境変数

変数説明
DD_API_KEYDatadog API キー - 必須
DD_SITEDatadog サイト - 必須
DD_LOGS_ENABLEDtrue の場合、ログ (stdout と stderr) を Datadog に送信します。デフォルトは false です。
DD_LOGS_INJECTIONtrue の場合、JavaNode.js.NET、および PHP でサポートされているロガーのトレースデータですべてのログをリッチ化します。PythonGoRuby については追加のドキュメントを参照してください。
DD_TRACE_SAMPLE_RATEトレース取り込みのサンプルレート 0.01.0 をコントロールします
DD_SERVICE統合サービスタグ付けを参照してください。
DD_VERSION統合サービスタグ付けを参照してください。
DD_ENV統合サービスタグ付けを参照してください。
DD_SOURCE統合サービスタグ付けを参照してください。
DD_TAGS統合サービスタグ付けを参照してください。

トラブルシューティング

このインテグレーションは、お使いのランタイムが完全な SSL を実装しているかどうかに依存します。Node の slim イメージを使用している場合、証明書を含めるために Dockerfile に次のコマンドを追加する必要があるかもしれません。

RUN apt-get update && apt-get install -y ca-certificates

参考資料

PREVIEWING: brett.blue/embedded-collector-release