このドキュメントでは、GKE クラスタ内で OpenTelemetry Collector を実行し、インストルメント済みアプリケーションから OTLP のログ、指標、トレースを収集し、そのデータを Google Cloudにエクスポートする方法について説明します。
始める前に
GKE で OpenTelemetry Collector を実行するには、次のリソースが必要です。
Cloud Monitoring API、Cloud Trace API、Cloud Logging API が有効になっている Google Cloud プロジェクト。
Google Cloud プロジェクトが存在しない場合は、以下の操作を行います。
Google Cloud コンソールで [新しいプロジェクト] に移動します。
[プロジェクト名] フィールドにプロジェクトの名前を入力して、[作成] をクリックします。
[お支払い] に移動します。
作成したプロジェクトをまだ選択していない場合は、ページ上部でプロジェクトを選択します。
既存のお支払いプロファイルを選択するか、新しいお支払いプロファイルを作成するように求められます。
新しいプロジェクトでは、Monitoring API、Trace API、Logging API がデフォルトで有効になっています。
Google Cloud プロジェクトがすでに存在する場合は、Monitoring API、Trace API、Logging API が有効になっていることを確認します。
[API とサービス] に移動します。
プロジェクトを選択します。
[add API とサービスの有効化] をクリックします。
各 API を名前で検索します。
検索結果で API の名前をクリックします。Monitoring API は「Stackdriver Monitoring API」と表示されます。
[API が有効です] と表示されていない場合は、[有効にする] をクリックします。
Kubernetes クラスタ。Kubernetes クラスタがない場合は、GKE のクイックスタートの説明に従います。
次のコマンドライン ツール:
gcloud
kubectl
gcloud
ツールとkubectl
ツールは Google Cloud CLI に含まれています。インストールの詳細については、Google Cloud CLI コンポーネントの管理をご覧ください。インストールされている gcloud CLI コンポーネントを確認するには、次のコマンドを実行します。gcloud components list
Collector の権限を構成する
GKE Workload Identity を無効にしている場合、このセクションはスキップしてください。
テレメトリーをエクスポートするために必要な権限が OpenTelemetry コレクタの Kubernetes サービス アカウントにあることを確認するには、プロジェクトに対する次の IAM ロールを OpenTelemetry コレクタの Kubernetes サービス アカウントに付与するよう管理者に依頼してください。
-
モニタリング指標の書き込み(
roles/monitoring.metricWriter
) -
Logging Log Writer(
roles/logging.logWriter
) -
Trace Agent(
roles/cloudtrace.agent
)
ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
管理者は、カスタムロールや他の事前定義ロールを使用して、OpenTelemetry コレクタの Kubernetes サービス アカウントに必要な権限を付与することもできます。
権限を構成するには、add-iam-policy-binding
コマンドを使用します。
gcloud projects add-iam-policy-binding projects/PROJECT_ID \ --role=roles/logging.logWriter \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/opentelemetry/sa/opentelemetry-collector gcloud projects add-iam-policy-binding projects/PROJECT_ID \ --role=roles/monitoring.metricWriter \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/opentelemetry/sa/opentelemetry-collector gcloud projects add-iam-policy-binding projects/PROJECT_ID \ --role=roles/cloudtrace.agent \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/opentelemetry/sa/opentelemetry-collector
コマンドを実行する前に、次のフィールドを更新します。
- PROJECT_ID: プロジェクトの ID。
- PROJECT_NUMBER: Google Cloud プロジェクト番号。
Collector をデプロイする
Collector パイプラインは、次のコマンドを使用して GitHub から直接デプロイできます。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
export GCLOUD_PROJECT=PROJECT_ID kubectl kustomize https://github.com/GoogleCloudPlatform/otlp-k8s-ingest.git/k8s/base | envsubst | kubectl apply -f -
Collector のモニタリングとデバッグ
OpenTelemetry Collector は、パフォーマンスのモニタリングと、OTLP 取り込みパイプラインの継続的な稼働時間の確保に役立つセルフ オブザーバビリティ指標を提供します。
Collector をモニタリングするには、Collector のサンプル ダッシュボードをインストールします。このダッシュボードでは、稼働時間、メモリ使用量、Google Cloud Observability に対する API 呼び出しなど、Collector のさまざまな指標に関する分析情報を一目で確認できます。
ダッシュボードのインストール手順は次のとおりです。
-
Google Cloud コンソールで [
ダッシュボード] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。
- [サンプル ライブラリ] タブを選択します。
- カテゴリで [OpenTelemetry Collector] を選択します。
- [OpenTelemtry Collector] を選択します。
- [
インポート] をクリックします。
インストール プロセスの詳細については、サンプル ダッシュボードをインストールするをご覧ください。
Collector を構成する
セルフマネージド OTLP 取り込みパイプラインには、デフォルトの OpenTelemetry コレクタ構成が含まれています。この構成は、大量の OTLP 指標、ログ、トレースを送信し、一貫した GKE と Kubernetes のメタデータを付加するように設計されています。また、一般的な取り込みの問題を防ぐように設計されています。
ただし、ニーズによってはデフォルト構成のカスタマイズが必要になる場合があります。このセクションでは、パイプラインのデフォルトと、ニーズに合わせてデフォルトをカスタマイズする方法について説明します。
デフォルトのコレクタ構成は、GitHub の config/collector.yaml
にあります。
エクスポータ
デフォルトのエクスポーターには、googlecloud
エクスポーター(ログとトレースを対象)と googlemanagedprometheus
エクスポーター(指標を対象)があります。
googlecloud
エクスポーターは、デフォルトのログ名で構成されています。googlemanagedprometheus
エクスポーターにはデフォルトの構成は必要ありません。このエクスポーターの構成の詳細については、Google Cloud Managed Service for Prometheus ドキュメントの OpenTelemetry コレクタを使ってみるをご覧ください。
プロセッサ
デフォルト構成には、次のプロセッサが含まれています。
batch
: テレメトリー リクエストを、 Google Cloud のリクエストあたりの最大エントリ数に達した時点か、 Google Cloud の 5 秒ごとの最小間隔のいずれか早いほうでバッチ処理するように構成します。k8sattributes
: Kubernetes リソース属性をテレメトリー ラベルに自動的にマッピングします。memory_limiter
: Collector のメモリ使用量を適切なレベルで制限します。このレベルを超えるデータポイントを破棄することで、メモリ不足によるクラッシュを防ぎます。resourcedetection
: クラスタ名やプロジェクト ID などの Google Cloud リソースラベルを自動的に検出します。transform
: Google Cloud のモニタリング対象リソース フィールドと競合する指標ラベルの名前を変更します。
レシーバー
デフォルトの構成には、otlp
レシーバーのみが含まれています。アプリケーションを計測して OTLP トレースや指標を Collector の OTLP エンドポイントに push する方法については、計測方法を選択するをご覧ください。
次のステップ: テレメトリーを収集して表示する
このセクションでは、サンプル アプリケーションをデプロイし、そのアプリケーションが Collector の OTLP エンドポイントを参照するように設定して、Google Cloudでテレメトリーを表示する方法について説明します。サンプル アプリケーションは、トレース、ログ、指標を Collector にエクスポートする小さな生成ツールです。
OpenTelemetry SDK で計測されたアプリケーションがすでにある場合は、代わりに Collector のエンドポイントを参照するようにアプリケーションを設定できます。
サンプル アプリケーションをデプロイするには、次のコマンドを実行します。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/otlp-k8s-ingest/main/sample/app.yaml
OpenTelemetry SDK を使用する既存のアプリケーションが Collector のエンドポイントを参照するようにするには、OTEL_EXPORTER_OTLP_ENDPOINT
環境変数を http://opentelemetry-collector.opentelemetry.svc.cluster.local:4317
に設定します。
数分後、アプリケーションによって生成されたテレメトリーが、シグナルごとに Collector を介して Google Cloud コンソールに転送され始めます。