このチュートリアルでは、OpenTelemetry サイドカーを使用して、カスタム指標を Google Cloud Managed Service for Prometheus に報告する Cloud Run サービスの作成、デプロイ、呼び出しを行う方法について説明します。
目標
- OpenTelemetry サイドカーを使用して、Cloud Run にサービスを作成、ビルド、デプロイする。
- カスタム指標を生成し、Google Cloud Managed Service for Prometheus に報告する。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Monitoring, Artifact Registry, and Cloud Build APIs.
- gcloud CLI をインストールして初期化します。
gcloud components update
で Google Cloud CLI を更新します。
必要なロール
チュートリアルを完了するために必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。
- Cloud Build 編集者(
roles/cloudbuild.builds.editor
) - Cloud Run 管理者(
roles/run.admin
) - サービス アカウントの作成(
roles/iam.serviceAccountCreator
) - プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin
) - モニタリング指標の書き込み(
roles/monitoring.metricWriter
) - サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) -
Service Usage ユーザー(
roles/serviceusage.serviceUsageConsumer
) - ストレージ管理者(
roles/storage.admin
)
ロールの付与の詳細については、アクセスの管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
また、Cloud Run サービス アカウントにはモニタリング指標の書き込み(roles/monitoring.metricWriter
)ロールが必要です。Compute Engine のデフォルトのサービス アカウントには、デフォルトでこのロールが付与されていますが、権限を変更したり、別のサービス アカウントを使用している場合は、このロールを追加する必要がある場合があります。
gcloud のデフォルトを設定する
Cloud Run サービスを gcloud のデフォルトに構成するには:
デフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID は、このチュートリアルで作成したプロジェクトの名前に置き換えます。
選択したリージョン向けに gcloud を構成します。
gcloud config set run/region REGION
REGION は、任意のサポートされている Cloud Run のリージョンに置き換えます。
Cloud Run のロケーション
Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。
レイテンシ、可用性、耐久性の要件を満たしていることが、Cloud Run サービスを実行するリージョンを選択する際の主な判断材料になります。一般的には、ユーザーに最も近いリージョンを選択できますが、Cloud Run サービスで使用されている他の Google Cloud サービスのロケーションも考慮する必要があります。使用する Google Cloud サービスが複数のロケーションにまたがっていると、サービスの料金だけでなくレイテンシにも影響します。
Cloud Run は、次のリージョンで利用できます。
ティア 1 料金を適用
asia-east1
(台湾)asia-northeast1
(東京)asia-northeast2
(大阪)europe-north1
(フィンランド) 低 CO2europe-southwest1
(マドリッド) 低 CO2europe-west1
(ベルギー) 低 CO2europe-west4
(オランダ)europe-west8
(ミラノ)europe-west9
(パリ) 低 CO2me-west1
(テルアビブ)us-central1
(アイオワ) 低 CO2us-east1
(サウスカロライナ)us-east4
(北バージニア)us-east5
(コロンバス)us-south1
(ダラス)us-west1
(オレゴン) 低 CO2
ティア 2 料金を適用
asia-east2
(香港)asia-northeast3
(ソウル、韓国)asia-southeast1
(シンガポール)asia-southeast2
(ジャカルタ)asia-south1
(ムンバイ、インド)asia-south2
(デリー、インド)australia-southeast1
(シドニー)australia-southeast2
(メルボルン)europe-central2
(ワルシャワ、ポーランド)europe-west12
(トリノ)europe-west2
(ロンドン、イギリス)europe-west3
(フランクフルト、ドイツ)europe-west6
(スイス、チューリッヒ) 低 CO2me-central1
(ドーハ)northamerica-northeast1
(モントリオール) 低 CO2northamerica-northeast2
(トロント) 低 CO2southamerica-east1
(サンパウロ、ブラジル) 低 CO2southamerica-west1
(サンティアゴ、チリ)us-west2
(ロサンゼルス)us-west3
(ソルトレイクシティ)us-west4
(ラスベガス)
Cloud Run サービスをすでに作成している場合は、Google Cloud コンソールの Cloud Run ダッシュボードにリージョンが表示されます。
Artifact Registry イメージ リポジトリを作成する
サンプル サービス イメージをホストする Artifact Registry Docker リポジトリを作成します。
gcloud artifacts repositories create run-otel \ --repository-format=docker \ --location=REGION \ --project=PROJECT_ID
次のように置き換えます。
- PROJECT_ID は、このチュートリアルで作成したプロジェクトの名前に置き換えます。
- REGION REGION は、サポートされている任意の Cloud Run のリージョンに置き換えます。
コードサンプルの取得
使用するサンプルコードを取得するには:
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Cloud Run のサンプルコードが含まれているディレクトリに移動します。
Go
cd golang-samples/run/custom-metrics/
コードの確認
このチュートリアルのコードは、次のものから構成されています。
- 受信リクエストを処理し、
sample_sidecar_counter
という名前の指標を生成するサーバー。
- サービスの動作環境を定義する
Dockerfile
。
このサンプルでは、カスタム OpenTelemetry Collector をビルドするためのファイルが collector
サブディレクトリに含まれています。
OpenTelemetry Collector の構成ファイル。
提供された構成をアップストリーム Collector イメージにバンドルする
Dockerfile
。
コードの配布
コードの配布は、Cloud Build でコンテナ イメージをビルドする、Container Registry にコンテナ イメージをアップロードする、Cloud Run にコンテナ イメージをデプロイするという 3 つのステップで構成されます。
コードを配布するには:
-
サンプル サービス コンテナをビルドし、Container Registry に公開します。
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/run-otel/sample-metrics-app
ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Artifact Registry に保存されます。このイメージは必要に応じて再利用できます。
-
Collector コンテナをビルドして、Container Registry に公開します。
gcloud builds submit collector --tag REGION-docker.pkg.dev/PROJECT_ID/run-otel/otel-collector-metrics
ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Artifact Registry に保存されます。このイメージは必要に応じて再利用できます。
-
アプリケーションをデプロイします。
YAML
-
次の内容の新しいファイルを
service.yaml
という名前で作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE-NAME annotations: run.googleapis.com/launch-stage: BETA spec: template: metadata: annotations: run.googleapis.com/container-dependencies: "{app:[collector]}" spec: containers: - image: REGION-docker.pkg.dev/PROJECT_ID/run-otel/sample-metrics-app name: app ports: - containerPort: CONTAINER_PORT env: - name: "OTEL_EXPORTER_OTLP_ENDPOINT" value: "http://localhost:4317" - image: REGION-docker.pkg.dev/PROJECT_ID/run-otel/otel-collector-metrics name: collector startupProbe: httpGet: path: / port: 13133
- 次のように置き換えます。
- CONTAINER_PORT は、サービスの Ingress コンテナがリッスンするポートに置き換えます。デフォルトは
8080
です。 - SERVICE-NAME は、サービスの任意の名前(
custom-metrics-sample-service
など)に置き換えます。
- CONTAINER_PORT は、サービスの Ingress コンテナがリッスンするポートに置き換えます。デフォルトは
-
-
次のコマンドを使用して新しいサービスを作成します。
gcloud run services replace service.yaml
このコマンドはサービスの URL を返します。この URL を使用して、試してみるのサンプル アプリケーションをお試しください。
試してみる
コードを配布するの gcloud run
コマンドの URL を使用してサービスに接続し、サンプル指標を生成します。(このコマンドを複数回実行して、より興味深いデータを生成できます)。
curl -H \ "Authorization: Bearer $(gcloud auth print-identity-token)" \ SERVICE_URL
SERVICE_URL は、サービスの URL に置き換えます。
Google Cloud コンソールの [Cloud Monitoring] セクションで Metrics Explorer に移動し、sidecar_sample_counter
指標を選択します。
PromQL を使用して指標をクエリすることもできます。たとえば、次のクエリは、Cloud Run インスタンス ID に基づいて指標をフィルタします。
sidecar_sample_counter{instance="INSTANCE_ID"}
INSTANCE_ID は、サービスの任意のインスタンス ID に置き換えます(インスタンス ログまたはメタデータ サーバーから使用可能)。
このクエリにより、次のようなグラフが生成されます。
クリーンアップ
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトを削除する
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
チュートリアル リソースを削除する
このチュートリアルでデプロイした Cloud Run サービスを削除します。
gcloud run services delete SERVICE-NAME
SERVICE-NAME は、選択したサービス名です。
Cloud Run サービスは Google Cloud コンソールから削除することもできます。
チュートリアルの設定時に追加した gcloud のデフォルト リージョン構成を削除します。
gcloud config unset run/region
プロジェクト構成を削除します。
gcloud config unset project
このチュートリアルで作成した他の Google Cloud リソースを削除します。
次のステップ
トレースとログの例を含むその他の例は、GitHub で入手できます。