キュレートされた新しい OpenTelemetry 取り込みパイプラインで GKE アプリから OTLP データを収集する
Mike Dame
Software Engineer
※この投稿は米国時間 2024 年 8 月 1 日に、Google Cloud blog に投稿されたものの抄訳です。
OpenTelemetry は、ログ、指標、トレースのための、ベンダーに依存しないオープンソースのオブザーバビリティ スタンダードです。そのライブラリ コレクション、エージェント、互換性のあるバックエンド、コミュニティ サポートにより、アプリケーションをモニタリングするフォーマットとして急速に成長しています。
Google Kubernetes Engine(GKE)に OpenTelemetry スタンダードを導入したいというお客様の要望の増加に伴い、Google は OpenTelemetry でアプリケーションを計測するためのドキュメントを提供していました。そしてこのたび、GKE 用にキュレートされた新しい OpenTelemetry Protocol パイプラインと、計測したアプリケーションから OTLP データを収集して Google Cloud Observability にエクスポートするプロセスの簡素化に関するドキュメントを公開いたしました。
OTLP パイプラインとは
OpenTelemetry Protocol(OTLP)は、アプリケーションのログ、指標、トレースのための、ベンダーに依存しない標準的なデータ形式を定義します。OpenTelemetry で計測したシグナルを OTLP でレポートするアプリケーションでは、OpenTelemetry Collector を使ってそのデータを処理し、転送できます。
これは、GKE ではワークロード Pod を OpenTelemetry で計測してデータをエクスポートし、Collector がそのデータを処理してログ、指標、トレースを Google Cloud Observability に送信できるということです。
キュレートされた OTLP 取り込みパイプラインは Kubernetes マニフェストのセットです。GKE クラスタに OpenTelemetry Collector をインストールするのに必要な最小限のリソースをデプロイするよう事前構成されています。これには以下が含まれています。
-
オープンソースの OpenTelemetry Collector のデプロイ
-
大量のシグナルやリソースの検出のサポートを含む、一般的な GKE のユースケースと既知の問題を踏まえて設計された Collector の構成
-
Collector がワークロードを識別し、GCP Observability のバックエンドと通信するために必要なロールベース アクセス制御リソース
このパイプラインの目的は、OTLP コレクションをすぐに利用できるよう、ニーズに合わせて構成を追加できる、すぐに使えるソリューションを提供することです。
このサンプルの特徴
OTLP パイプラインを手作業でデプロイして構成することは面倒なプロセスです。利用できる構成オプションの数が多いため、自社の環境やバックエンドに最適な構成はどれか、必ずしも明確とは限りません。
幸い、GKE 上のほとんどのユースケースは、このパイプラインが提供する共通の構成を使って Google Cloud Observability 向けに最適化できます。この構成は、以下のようなシナリオに対応します。
-
リソースを検出し、テレメトリのソースとなっている GKE 上のワークロードを正確に識別する
-
Google Cloud Observability で許容される最大スループットまでテレメトリ データをバッチ処理し、Collector による API 呼び出しの量を減らす
-
メモリ制限を構成して Collector の OOM クラッシュを防ぐ
-
変換により、指標の競合を防ぎ、Google Cloud と OpenTelemetry のスタンダードに準拠した属性名になるようにする
Google はこのデフォルト構成をサポートしており、追加のテストによって、新しいリリースの OpenTelemetry Collector と互換性があり、正確に機能することが確認済みです。
このパイプラインのマニフェストでは、Kubernetes Deployment に前述の構成で Collector をインストールします。この構成は、クラスタ全体のリソースを検出すると同時に可用性の高い稼働時間を提供できるため、ほとんどのユースケースに適したインストール モードとして特別に選択されています。
Collector の構成全体と Kubernetes のマニフェストは GitHub で公開されており、標準の `kubectl` CLI で `kustomize` を使ってインストールできます。
パイプラインのデプロイと使用
OTLP パイプラインでは、GCP Observability のバックエンドにデータを送信するために Google Cloud サービス アカウントが必要となります。アカウントを設定するには、以下のコマンドを使用します。
次に、`kubectl` と以下のコマンドを使って、GitHub から OTLP パイプラインを直接デプロイします。
パイプラインがインストールされると、以下のエンドポイントに新たにインストールされたコレクタに、OpenTelemetry の計測済みアプリケーションから直接エクスポートできるようになります。
OpenTelemetry SDK 構成の環境変数 `OTEL_EXPORTER_OTLP_ENDPOINT` を使用すると、アプリケーションでこれを簡単に設定できます。
詳細については、OpenTelemetry Collector を GKE にデプロイする方法に関するドキュメントをご覧ください。
デバッグとサポート
このパイプラインには、Collector からセルフ オブザーバビリティ指標をモニタリングできるよう、事前構成済みのオブザーバビリティ ダッシュボードが含まれています。このダッシュボードは、Google Cloud Monitoring サンプル ダッシュボードで利用できます。インストールするには、サンプル ライブラリから OpenTelemetry Collector ダッシュボードを追加します。
サンプル ダッシュボードをインストールすると、Collector の稼働時間とメモリ使用量に加えて、Cloud Observability に対して行われた API リクエスト数をモニタリングできるようになります。これらの値を使用して、Collector の健全性と使用状況をモニタリングします。
ご質問、バグレポート、機能リクエストがございましたら、GitHub でご報告ください。担当チームが対応いたします。
次のステップ
詳しい情報を確認して使用を開始するには、OpenTelemetry によるアプリケーションの計測および OTLP 取り込みパイプラインの設定に関するドキュメントと、GitHub リポジトリをご確認ください。
ー ソフトウェア エンジニア Mike Dame