Prometheus と Grafana で管理する Spring ベースの gRPC マイクロサービスの作成
Google Cloud Japan Team
※この投稿は米国時間 2024 年 3 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。
gRPC は、パフォーマンスに優れた最新のオープンソース リモート プロシージャ コール(RPC)フレームワークであり、マイクロサービスを効率的に接続するうえで重要な役割を果たします。Spring は、充実したエコシステムとコミュニティ サポートによって柔軟なモジュラー プログラミング モデルと包括的なインフラストラクチャ統合を提供する、好評を得ているフレームワークです。この人気の 2 つのテクノロジーを一緒に使うことができたらどうなるか、想像してみてください。このブログでは、gRPC と Spring ベースのマイクロサービスとのインテグレーションについて説明します。また、Google Cloud Managed Service for Prometheus と Managed Service for Grafana を活用して、新しい gRFC A66 指標を使用した効果的なモニタリングとオブザーバビリティを実現する方法もご紹介します。
gRPC を Spring Boot と統合する
gRPC と Spring のインテグレーションを提供するオープンソースの取り組みはいくつかありますが、その一つは grpc-ecosystem/grpc-spring です。これは要は、Spring スタイルの宣言型アノテーションと構成を提供することで、生成された gRPC クライアント / サーバーの設定をサポートする Spring Boot モジュールです。
簡単に説明すると、gRPC / Spring マイクロサービスを作成するために、作成者は以下を行う必要があります。
-
Spring Boot アプリケーションを作成する
-
依存関係として grpc-spring-boot-starter(提供元: grpc-ecosystem/grpc-spring)を追加する
-
gRPC 開発ガイドの手順を行う
-
サービスの proto を定義する
-
gRPC(Java)のアーティファクトを生成し、依存関係として追加する
-
生成されたインターフェースを実装することで gRPC(Java)サービスを実装する
-
サービスの実装に @GrpcService というアノテーションを付ける
-
クライアントに @GrpcClient を注入する
詳細なドキュメントについては、https://grpc-ecosystem.github.io/grpc-spring をご覧ください。
オブザーバビリティ データの生成と収集の方法
Spring とのインテグレーションにより、gRPC ライブラリは gRFC A66 仕様で定義された指標を収集します。その後、ライブラリは Prometheus などのモニタリング バックエンドによって公開されスクレイピングされるように構成できます。
Managed Service for Prometheus は、Google Cloud の Prometheus 指標向けフルマネージド マルチクラウド ソリューションで、複数のプロジェクトに対して使用できます。簡単に構成して、Prometheus 指標を gRPC / Spring マイクロサービス(上記の構成で示した /actuator/prometheus)で設定した URL からスクレイピングできます。
オブザーバビリティ データの利用方法
gRPC 指標が Managed Service for Prometheus によって収集されると、Cloud Monitoring Metrics Explorer だけでなく、PromQL を使用してサードパーティの可視化ツール(Grafana など)からもクエリを実行できるようになります。gRFC A66 指標向けの事前定義された Grafana ダッシュボードが grpc-ecosystem/grpc-spring GitHub リポジトリで公開されており、簡単に Grafana にインポートしてカスタマイズできます。
すべてをつなげる
grpc-ecosystem/grpc-spring リポジトリには、以下のコンポーネントを含む、エンドツーエンドのユーザー エクスペリエンスを示す具体的な例が提供されています。
-
クライアントとしての gRPC / Spring マイクロサービス
-
サーバーとしての gRPC / Spring マイクロサービス
全体的なアーキテクチャは次のようになります。
ワークフローは次のように実行されます。
1. クライアントがサーバーに gRPC 呼び出しを行い、API は以下のセマンティクスをサポートします。
-
Unary RPC
-
クライアント ストリーミング RPC
-
サーバー ストリーミング RPC
-
双方向ストリーミング RPC
2. クライアントは、秒間クエリ数(QPS)が満足のいく数に達するまで、RPC 呼び出しを続けます。
3. サーバーはデモの目的で、無作為にごく一部のエラーを注入します。
4. 最後に、クライアントとサーバーの両方が gRPC A66 指標の生成を有効にし、Prometheus を使用して公開します。
その後、Grafana / Managed Prometheus ユーザーガイドに沿って、Grafana で Prometheus データソースを作成できます。
この例は、Grafana にインポートできる gRPC A66 指標ダッシュボードも提供しています。
使ってみる
gRPC と Spring のインテグレーションについて詳しくは、github.com/grpc-ecosystem/grpc-spring をご覧ください。
Managed Service for Prometheus による gRPC と Spring のインテグレーションの例についての詳細は、github.com/grpc-ecosystem/grpc-spring/examples/grpc-observability をご覧ください。
-Google、ソフトウェア エンジニア Feng Li
-Google、ソフトウェア エンジニア Vindhya Ningegowda