Google Cloudにテレメトリーを収集して送信しながら、アプリケーション コードをベンダーに依存しないようにするには、OpenTelemetry コレクタベースの計測サンプルをGo、Java、Node.js、Pythonに使用します。
これらのサンプルでは、指標、ログ、トレースをローカルの OpenTelemetry コレクタにエクスポートするようにプロセス内 OpenTelemetry SDK を構成する方法を示します。このコレクタは、テレメトリーを Google Cloudにルーティングします。サンプルは、Telemetry API を使用して指標データとトレースデータを OpenTelemetry Protocol(OTLP)形式で Google Cloud プロジェクトに送信し、 Google Cloud エクスポータを使用してログデータを送信します。
サンプルの仕組み
Go、Java、Node.js、Python のサンプルでは、
OpenTelemetry プロトコルを使用してトレースデータと指標データを収集します。
サンプルでは、
構造化ログを書き込むようにロギング フレームワークを構成し、アプリケーションのstdout ストリームから
読み取るように
OpenTelemetry Collector を構成します。フレームワークの推奨事項については、
計測方法を選択するをご覧ください。
アプリケーションは Docker を使用してビルドおよびデプロイされます。OpenTelemetry でアプリケーションを計測する場合、Docker を使用する必要はありません。
サンプルは、Cloud Shell、 Google Cloudリソース、またはローカル開発環境で実行できます。
詳細
サンプルでは、OpenTelemetry Collectorをサイドカーとして使用して アプリケーションのテレメトリーを受信して拡充し、エクスポータを使用して プロジェクトに送信します。 Google Cloud サンプル アプリケーションは、OTLP 形式をサポートする Telemetry API を使用して、指標データとトレースデータをプロジェクトに送信します。
サンプルは、次のことを示すものです。
OpenTelemetry Collector を使用して指標とトレースを収集するように OpenTelemetry を構成します。
このステップの複雑さは言語によって異なります。たとえば、Go では、
main関数を更新してテレメトリー収集を初期化し、HTTP サーバーとクライアントを構成します。構造化ログを書き込むようにロギング フレームワークを構成します。
アプリケーションで構造化ログを書き込むことをおすすめします。これによりログペイロードが JSON オブジェクトとしてフォーマットされます。これらのログでは、特定の JSON パスを検索するクエリを作成できます。また、ログペイロード内の特定のフィールドをインデックスに登録できます。
Google Kubernetes Engine などの一部のサービスには、 構造化ログをスクレイピングして Google Cloud プロジェクトに送信するエージェントが組み込まれています。Compute Engine などの他のサービスでは、ログをスクレイピングして送信するエージェントをインストールする必要があります。インストールするエージェントについては、 Ops エージェントの概要をご覧ください。
これらのサンプルを使用するのにエージェントをインストールする必要はありません。
Docker ファイルを構成します。すべてのサンプルには、次の YAML ファイルが含まれています。
docker-compose.yaml: アプリケーションのサービス、 OpenTelemetry Collector、ロードジェネレータを構成します。たとえば、OpenTelemetry Collector のサービスotelcolでは、イメージ、ボリューム、環境変数を指定します。OpenTelemetry コレクタのエンドポイントは、appサービスで指定されたOTEL_EXPORTER_OTLP_ENDPOINT環境変数によって設定されます。otel-collector-config.yaml: OpenTelemetry コレクタを構成します。サンプルでは、指標データとトレースデータに
otlpレシーバーを使用し、ログデータにfilelogレシーバーを使用します。サンプルでは、
otlphttpエクスポータを指標データとトレースデータに、 ログデータに Google Cloud エクスポータを使用します。otlphttpエクスポータは、OTLP をサポートする Telemetry API を使用してデータをプロジェクトに送信します。The Google Cloud エクスポータ は、ログデータを Cloud Logging API と互換性のある形式に変換し、変換されたデータを Google Cloud プロジェクトに送信します。
docker-compose.creds.yaml: このファイルは、必要に応じて Google Cloud 認証情報ファイルをotelcolコンテナにマウントします。このファイルは、 アプリケーションのデフォルト認証情報(ADC) がファイルとしてのみ使用可能なローカルマシンで サンプルを実行する場合に必要です。
必要な権限
-
サンプル アプリケーションがログ、指標、トレースデータを書き込むために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- ログ書き込み (
roles/logging.logWriter) プロジェクトに対する - プロジェクトに対する モニタリング指標の書き込み(
roles/monitoring.metricWriter) - Cloud テレメトリー トレース書き込み (
roles/telemetry.tracesWriter)プロジェクトに対する - Service Usage コンシューマー (
roles/serviceusage.serviceUsageConsumer)割り当てプロジェクトに対する
Cloud Shell、 Google Cloud リソース、ローカル 開発環境でサンプルを実行する場合は、これらの権限で十分です。割り当てプロジェクトを構成する方法については、 割り当てプロジェクトを設定するをご覧ください。
- ログ書き込み (
-
ログ、指標、トレースデータを表示するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- ログビューア (
roles/logging.viewer) - モニタリング閲覧者 (
roles/monitoring.viewer) - Cloud トレース ユーザー (
roles/cloudtrace.user)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
- ログビューア (
必要な API
Cloud Logging API、Cloud Monitoring API、Cloud Trace API、Telemetry API を有効にします。
API を有効にするために必要なロール
API を有効にするには、serviceusage.services.enable
権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。
gcloud services enable logging.googleapis.commonitoring.googleapis.com cloudtrace.googleapis.com telemetry.googleapis.com
代替の計測方法
他の構成を示す他のサンプルもご覧ください。
Trace エクスポータから OTLP エンドポイントに移行するでは、プロセス内計測を使用してトレースデータを Google Cloud プロジェクトに直接送信する方法について説明します。
お使いの環境でコレクタの使用がサポートされている場合は、OpenTelemetry コレクタを使用してテレメトリー データをエクスポートすることをおすすめします。コレクタを使用できない場合は、データを Google Cloud プロジェクトに直接送信するプロセス内エクスポータを使用する必要があります。
エグザンプラを使用して指標とトレースを関連付けるでは、エグザンプラを生成する Go アプリケーションを構成する方法について説明します。エグザンプラは、指標データポイントに関連付けられたサンプル データポイントです。エグザンプラを使用して、トレースデータと指標データを関連付けることができます。
Ops エージェントと OpenTelemetry Protocol(OTLP)を使用する では、アプリケーションから指標とトレースを収集するように Ops エージェントと OTLP レシーバーを構成する方法について説明します。
次のステップ
コレクタの詳細については、Google が構築した OpenTelemetry Collector をご覧ください。
コレクタベースのエクスポートを使用するサンプルを確認する。