アプリケーション モニタリング用にアプリケーションを計測する

このドキュメントでは、アプリケーションが生成する指標とトレースデータにアプリケーション固有のラベルが含まれるように App Hub アプリケーションを構成する方法について説明します。また、アプリケーション モニタリングで使用される指標をアプリケーションからエクスポートして、Google Kubernetes Engine で実行される HTTP リクエスト ワークロードのトラフィック レベル、サーバー エラー率、レイテンシをレポートする方法についても説明します。

アプリケーション固有のラベルについて

アプリケーション固有のラベルは、ログデータ、指標データ、トレースデータに挿入されるラベルまたは属性を指します。これらのラベルは、データを生成したサービスまたはワークロードを識別します。アプリケーション固有のラベルは、他のラベルと同様に使用できます。たとえば、アプリケーションの ID でデータをフィルタできます。サポートされているインフラストラクチャによって生成されたテレメトリーには、これらのラベルが自動的に含まれます。計測を使用すると、アプリケーションによって書き込まれた指標とトレースにこれらのラベルを含めることができます。

このセクションでは、a.b.{x,y}a.b.x および a.b.y として解釈します。

アプリケーションに追加したインストルメンテーションの指標データには、次の指標ラベルを含めることができます。

  • metric.labels.apphub_application_{container,id,location}
  • metric.labels.apphub_workload_{criticality_type,environment_type,id}

アプリケーションに追加したインストゥルメンテーションによって生成されたトレーススパンには、次のリソース属性を含めることができます。

  • gcp.apphub.application.{container,id,location}
  • gcp.apphub.{workload,service}.{criticality_type,environment_type,id}

OpenTelemetry HTTP サーバー指標について

Google Kubernetes Engine で実行されるワークロードのシステム指標で、トラフィック レベル、サーバー エラー率、HTTP リクエストのレイテンシを報告できるものはありません。ただし、これらのゴールデン シグナルの値は、OpenTelemetry HTTP クライアント ライブラリによって自動的に収集される指標である http.server.request.duration から導出できます。

googlemanagedprometheus エクスポータは、http.server.request.duration OpenTelemetry 指標を次のプロパティを持つ Prometheus 指標に変換します。

  • 名前: prometheus/http_server_request_duration_seconds/histogram
  • Metric: prometheus.googleapis.com/http_server_request_duration_seconds/histogram
  • リソースタイプ: prometheus_target
  • 単位: s
  • 種類: CUMULATIVE
  • 値の型: DISTRIBUTION

Google Cloud プロジェクトに http_server_request_duration_seconds 指標が含まれている場合、OOTB ダッシュボードにはトラフィック レベル、サーバー エラー率、HTTP リクエストのレイテンシが表示されます。

http_server_request_duration_seconds 指標をエクスポートするようにアプリケーションを構成する方法については、このドキュメントの Kubernetes で OpenTelemetry を使用するをご覧ください。

指標データにアプリケーション ラベルを追加する

Google Cloud Observability は、プロジェクトに送信された Prometheus 指標に付加された属性と、App Hub API から返されたデータを比較して、Prometheus 指標のソースを特定しようとします。このセクションの残りの部分では、Google Cloud Observability が App Hub アプリケーションを識別できるようにする構成を示します。

Kubernetes で OpenTelemetry を使用する

Google Cloud Observability で、Google Kubernetes Engine で実行されるアプリケーションのワークロードによって生成された指標データにアプリケーション ラベルを付加するには、次の操作を行います。

  1. OpenTelemetry を使用してアプリケーションを計測します。

  2. Google が構築した Collector または OpenTelemetry Collector のいずれかをデプロイし、次のように Collector を構成します。

    • googlemanagedprometheus エクスポーターを使用して指標データをエクスポートします。
    • k8sattributes プロセッサを構成して、環境から namespace などのメタデータを抽出します。
    • transform/collision プロセッサを構成して、project_idlocationclusternamespace 属性を設定します。
    • top_level_controller_name ラベルと top_level_controller_type ラベルを設定するように transform/aco-gke プロセッサを構成します。

    例については、Google 製の Collector の構成ファイルである otlp-k8s-ingest/config/collector.yaml をご覧ください。この Collector の詳細については、Google が構築した OpenTelemetry Collector を GKE にデプロイするをご覧ください。

  3. アプリケーションのワークロードを App Hub に登録します。

GKE で Google Cloud Managed Service for Prometheus を使用する

Google Cloud Observability で、Google Kubernetes Engine クラスタで実行されているアプリケーションのワークロードによって生成された指標データにアプリケーション ラベルを付加するには、次の操作を行います。

  1. マネージド コレクションで Google Cloud Managed Service for Prometheus を使用します。

  2. バージョンが 1.32.1-gke.1439000 以上の Google Kubernetes Engine クラスタにワークロードをデプロイします。

  3. アプリケーションのワークロードを App Hub に登録します。

Google Cloud Managed Service for Prometheus は、サービス ディスカバリ メタデータを使用してアプリケーション ラベルの値を取得し、targetLabels.metadatatop_level_controller_{name,type} ラベルを追加します。指標の取り込み中に、Google Cloud Observability は top_level_controller_{name,type} ラベルと App Hub API を使用して App Hub アプリケーションを識別し、適切なラベルを指標データに追加します。

Cloud Run を使用する

Google Cloud Observability で Cloud Run ワークロードによって生成された指標データにアプリケーション ラベルを付加するには、次の操作を行います。

  1. OpenTelemetry または Cloud Run 用の Managed Service for Prometheus サイドカーを使用して、アプリケーションを計測します。これらのアプローチについては、次のドキュメントをご覧ください。

  2. アプリケーションのワークロードを App Hub に登録します。

指標ラベルを確認する

アプリケーションが Prometheus 指標をプロジェクトに送信していることを確認するには、次の操作を行います。

  1. アプリケーションが Prometheus 指標をプロジェクトに送信していることを確認します。
    1. Google Cloud コンソールで Metrics explorer のページに移動します。

      [Metrics Explorer] に移動

      検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

    2. Google Cloud コンソールのツールバーで、 Google Cloud プロジェクトを選択します。App Hub の構成には、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
    3. [指標] 要素の [指標を選択] メニューを開いてフィルタバーに「Prometheus Target」と入力し、サブメニューを使用して特定のリソースタイプと指標を選択します。
      1. [有効なリソース] メニューで、[Prometheus Target] を選択します。
      2. 指標を選択するには、[有効な指標カテゴリ] メニューと [有効な指標] メニューを使用します。
      3. [適用] をクリックします。
    4. クエリ結果から時系列を削除するフィルタを追加するには、[フィルタ] 要素を使用します。

    5. データの表示方法を構成します。

      ラベルを表示するには、[フィルタ] メニューを開きます。[フィルタ] の各エントリはラベルに対応しています。

      グラフの構成の詳細については、Metrics Explorer 使用時の指標の選択をご覧ください。

    Prometheus 指標が表示されない場合は、構成を確認します。

Prometheus 指標にアプリケーション ラベルが含まれていない場合は、次の操作を行います。

  1. ワークロードまたはサービスが App Hub に登録されていることを確認します。

  2. ログを調べて、エラーがないかどうかを確認します。

    たとえば、OpenTelemetry Collector または Google が構築した Collector をデプロイして、Google Kubernetes Engine で実行している場合は、次の操作を行うことができます。

    1. Google Cloud コンソールで、[ワークロード] ページに移動します。

      [ワークロード] に移動

      検索バーを使用してこのページを検索した場合は、小見出しが [Kubernetes Engine] の結果を選択します。

    2. コレクタのデプロイを選択し、[ログ] タブを選択します。
  3. OpenTelemetry Collector または Google が構築した Collector を使用している場合は、Collector の構成を確認します。コレクタは次のことを行う必要があります。

    • googlemanagedprometheus エクスポーターを使用して指標データをエクスポートします。
    • k8sattributes プロセッサを構成して、環境から namespace などのメタデータを抽出します。
    • transform/collision プロセッサを構成して、project_idlocationclusternamespace 属性を設定します。
    • top_level_controller_name ラベルと top_level_controller_type ラベルを設定するように transform/aco-gke プロセッサを構成します。

    例については、Google が作成した Collector 構成ファイル(otlp-k8s-ingest/config/collector.yaml)をご覧ください。

トレーススパンにアプリケーション属性を追加する

Cloud Trace で、アプリケーションのサービスとワークロードによって生成されたトレースデータにアプリケーション固有のリソース属性を付加するには、次の操作を行います。

  1. App Hub にサービスとワークロードを登録します。
  2. OpenTelemetry でアプリケーションを計測し、Google Cloud OTLP エンドポイントを使用して、アプリケーションから収集したトレースデータをプロジェクトに送信します。
  3. エクスポートされたスパンデータに、アプリケーションで使用されるサポートされている Google Cloud リソースを識別する OpenTelemetry リソース属性が含まれるように、OpenTelemetry Collector または Google が構築した Collector を構成します。リソース属性には、次のものを含める必要があります。

    • cloud.account.id
    • cloud.{availability_zone,region} のいずれか
    • リソース固有の属性。たとえば、Kubernetes ワークロードの場合、スパンには k8s.cluster.namek8s.namespace、Kubernetes デプロイのタイプを設定する必要があります。

    プロセッサを使用して、コレクタがリソース固有の属性をスパンに付加するようにします。詳しくは、resourcedetectionprocessork8sattributesprocessor をご覧ください。

    Google Cloud Observability は、上記のリソース属性と App Hub API を使用して App Hub アプリケーションを識別します。アプリケーションが識別されると、アプリケーション固有の属性がトレースデータに追加されます。

これらの属性の詳細については、Google Cloud App Hub のセマンティック規約をご覧ください。