Google Cloud Run

概要

Google Cloud Run は、コンテナベースのアプリケーションをデプロイし、スケーリングするためのフルマネージドサーバーレスプラットフォームです。Datadog は、GCP インテグレーションを通して Cloud Run のモニタリングとログ収集を提供しています。また、Datadog は現在公開ベータ版として、トレース、カスタムメトリクス、直接ログ収集を可能にする専用 Agent で Cloud Run アプリケーションをインスツルメントするソリューションも提供しています。

この機能は公開ベータ版です。フィードバックフォーム、または標準的なサポートチャンネルを通じてフィードバックを提供することができます。ベータ期間中は、Cloud Run モニタリングと APM トレースは直接費用なしで利用できます。既存の APM のお客様は、スパンの取り込みとボリュームのコストが増加する可能性があります。

はじめに

前提条件

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

ワンクリックでサンプルアプリケーションをデプロイする

このガイドの残りの部分に従う必要なしにサンプルアプリケーションをデプロイするには、これらの例のいずれかを使用することができます。インストールプロセスでは、Datadog API キーのような必要な詳細を尋ねられます。これらのアプリケーションは、デフォルトの Web サイトである datadoghq.com にデータを送信することに注意してください。

1. アプリケーションのインスツルメンテーション

Datadog インスツルメンテーションでコンテナをビルドするには、Dockerfile やビルドパックを使用するかどうかによって、これら 2 つの方法のいずれかに従うことができます。

1.a Dockerfile を使用したインスツルメンテーション

Dockerfile に次の記述を追加することで、アプリケーションをインスツルメントすることができます。以下の記述例は、既存の Dockerfile のセットアップに応じて調整が必要になる場合があります。

# Datadog `serverless-init` を Docker イメージにコピーします
COPY --from=datadog/serverless-init /datadog-init /app/datadog-init

# アプリケーションを Datadog の serverless-init プロセスでラップするためエントリポイントを変更します
ENTRYPOINT ["/app/datadog-init"]

# オプションで Datadog のタグを追加します
ENV DD_SERVICE=datadog-demo-run-go
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1

# エントリポイントにラップされたバイナリアプリケーションを実行します。必要に応じて内容を変更してください。
CMD ["/path/to/your-go-binary"]

シンプルな Go アプリケーション用のサンプルコードGo トレーシングライブラリに関する詳細。

# Datadog `serverless-init` を Docker イメージにコピーします
COPY --from=datadog/serverless-init /datadog-init /app/datadog-init

# python トレーシングライブラリをこちらか requirements.txt でインストールします
RUN pip install --no-cache-dir ddtrace==1.7.3

# オプションで Datadog のタグを追加します
ENV DD_SERVICE=datadog-demo-run-python
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1

# アプリケーションを Datadog の serverless-init プロセスでラップするためエントリポイントを変更します
ENTRYPOINT ["/app/datadog-init"]

# Datadog トレースライブラリによって起動される、エントリポイントにラップされたバイナリアプリケーションを実行します。必要に応じて内容を変更してください。
CMD ["ddtrace-run", "python", "app.py"]

シンプルな Python アプリケーション用のサンプルコードPython トレーシングライブラリに関する詳細。

# Datadog `serverless-init` を Docker イメージにコピーします
COPY --from=datadog/serverless-init /datadog-init /app/datadog-init

# Datadog js トレーシングライブラリをこちらか package.json でインストールします

npm i dd-trace@2.2.0

# enable the Datadog tracing library
ENV NODE_OPTIONS="--require dd-trace/init"

# オプションで Datadog のタグを追加します
ENV DD_SERVICE=datadog-demo-run-nodejs
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1

# エントリポイントにラップされたバイナリアプリケーションを実行します。必要に応じて内容を変更してください。
ENTRYPOINT ["/app/datadog-init"]

# エントリポイントにラップされたバイナリアプリケーションを実行します。必要に応じて内容を変更してください。
CMD ["/nodejs/bin/node", "/path/to/your/app.js"]

シンプルな Node.js アプリケーション用のサンプルコードNode.js トレーシングライブラリに関する詳細。

# Datadog `serverless-init`  を Docker イメージにコピーします
COPY --from=datadog/serverless-init /datadog-init /app/datadog-init

# オプションで Datadog のタグを追加します
ENV DD_SERVICE=datadog-demo-run-java
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1

# アプリケーションを Datadog の serverless-init プロセスでラップするためエントリポイントを変更します
ENTRYPOINT ["/app/datadog-init"]

# エントリポイントにラップされたバイナリアプリケーションを実行します。必要に応じて内容を変更してください。
CMD ["./mvnw", "spring-boot:run"]

シンプルな Java アプリケーション用のサンプルコードJava トレーシングライブラリに関する詳細。

# Datadog `serverless-init`  を Docker イメージにコピーします
COPY --from=datadog/serverless-init /datadog-init /app/datadog-init

# オプションで Datadog のタグを追加します
ENV DD_SERVICE=datadog-demo-run-dotnet
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1

# アプリケーションを Datadog の serverless-init プロセスでラップするためエントリポイントを変更します
ENTRYPOINT ["/app/datadog-init"]

# エントリポイントにラップされたバイナリアプリケーションを実行します。必要に応じて内容を変更してください。
CMD ["dotnet", "helloworld.dll"]
# Datadog `serverless-init`  を Docker イメージにコピーします
COPY --from=datadog/serverless-init /datadog-init /app/datadog-init

# オプションで Datadog のタグを追加します
ENV DD_SERVICE=datadog-demo-run-ruby
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1

# アプリケーションを Datadog の serverless-init プロセスでラップするためエントリポイントを変更します
ENTRYPOINT ["/app/datadog-init"]

# エントリポイントにラップされたバイナリアプリケーションを実行します。
CMD ["rails", "server", "-b", "0.0.0.0"] (必要に応じて内容を変更してください)

シンプルな Ruby アプリケーション用のサンプルコードRuby トレーシングライブラリに関する詳細。

1.b ビルドパックを使用したインスツルメンテーション

Pack Buildpacks は、Dockerfile を使用せずにコンテナをパッケージ化する便利な方法を提供します。この例では、GCP コンテナレジストリと Datadog サーバーレスビルドパックを使用しています。

: ビルドパックを実行する前に、お使いの言語のトレーシングライブラリをインストールするよう、指示に従ってください。

以下のコマンドを実行して、アプリケーションを構築します。

pack build --builder=gcr.io/buildpacks/builder \
--buildpack from=builder \
--buildpack datadog/serverless-buildpack \
gcr.io/YOUR_PROJECT/YOUR_APP_NAME

: Alpine とは互換性がありません。

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

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

  • DD_API_KEY: データを Datadog アカウントに送信するために使用する Datadog API キー。プライバシーと安全性の問題を考慮して、GCP シークレットに設定する必要があります。
  • DD_SITE: Datadog のエンドポイントと Web サイト。このページの右側で自分のサイトを選択します。あなたのサイト: .
  • DD_TRACE_ENABLED: true に設定してトレーシングを有効にします

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

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

gcloud run deploy APP_NAME --image=gcr.io/YOUR_PROJECT/APP_NAME \
  --port=80 \
  --update-env-vars=DD_API_KEY=$DD_API_KEY \
  --update-env-vars=DD_TRACE_ENABLED=true \
  --update-env-vars=DD_SITE='datadoghq.com' \
  --allow-unauthenticated

3. 結果

デプロイが完了すると、メトリクスとトレースが Datadog に送信されます。Datadog で Infrastructure->Serverless に移動すると、サーバーレスメトリクスとトレースを確認できます。

追加の構成

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

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

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

環境変数

変数説明
DD_API_KEYDatadog API キー - 必須
DD_SITEDatadog サイト - 必須
DD_LOGS_ENABLEDtrue の場合、ログ (stdout と stderr) を Datadog に送信します。デフォルトは false です。
DD_SERVICE統合サービスタグ付けを参照してください。
DD_VERSION統合サービスタグ付けを参照してください。
DD_ENV統合サービスタグ付けを参照してください。
DD_SOURCE統合サービスタグ付けを参照してください。
DD_TAGS統合サービスタグ付けを参照してください。

トラブルシューティング

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

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

その他の参考資料