Oracle CloudでのApplication Performance Monitoringを使用したマイクロサービスのモニターおよびトレース
マイクロサービスの監視は、アーキテクチャが複雑で、分散デプロイメント・モデルが原因で困難な場合があります。
マイクロサービス・アプリケーションは、多数の異なるシステムにデプロイされた数千の独立したサービスで構成でき、各サービスはそのプロセスで実行されます。特定のリソースおよびヘルス・モニターに焦点を当てた従来のモニタリング・アプローチは、トランザクション・フローのトレースやマイクロサービス・アプリケーションの問題のデバッグでは有効ではなくなりました。
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM)では、マイクロサービスでのOpenTracingインストゥルメンテーションを自動的に可能にし、エンドツーエンドの完全なユーザー・トランザクションを取得して、ユーザー・エクスペリエンスとアプリケーション・パフォーマンスの両方を理解するのに役立ちます。APMには、インスタンス・レベル、エンドツーエンドおよびトランザクション・トレースを可能にする分散トレース・システムの実装が含まれています。また、アプリケーション・サーバーおよびビジネス・メトリックの監視も可能です。
アーキテクチャ
このリファレンス・アーキテクチャでは、Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM)を使用して、OCI Kubernetes Engine (OKE)クラスタにデプロイされたマイクロサービス・アプリケーションを監視する方法を示します。
次のアーキテクチャ・ダイアグラムは、Kubernetesクラスタにデプロイされたマイクロサービス・アプリケーションを示しています。アプリケーションは、2つのデプロイメント・レプリカを持つアプリケーション・サーバーでホストされ、JDBCを使用してOracle Autonomous Databaseに接続します。エンド・ユーザーは、Oracle CloudでホストされているWebインタフェースを介してアプリケーションにアクセスします。各図は、異なるアプローチを示しています。
-
OpenTelemetryオペレータ: 最初のアプローチでは、Kubernetesオペレータを使用して、Kubernetesポッドで実行されているJava仮想マシン(JVM)へのJavaエージェントの自動インジェクションを簡素化します。
-
共有ファイル・システム: 2つ目の方法では、共有ファイル・システムを使用してAPMエージェントをプロビジョニングおよびデプロイします。
どちらの方法でも、KubernetesにデプロイされたJavaアプリケーション・サーバーまたはフレームワーク(Oracle WebLogic ServerやSpring Bootなど)を監視できます。
次の図は、OpenTelemetry演算子の実装を示しています。
apm-microservices-open-telemetry-oracle.zip
このアーキテクチャのデータ・フローは次のとおりです。
- OCIにAPMドメインを作成し、ドメインのデータ・アップロード・エンドポイントURLとプライベートおよびパブリック・データ・キーを取得します。
- OCIに共有ファイル・システムを作成し、OKEクラスタに永続ボリュームなどのKubernetesストレージ・オブジェクトを作成します。
- APMドメインからAPM Javaエージェントをダウンロードし、マウントされたボリュームにプロビジョニングします。
- KubernetesデプロイメントまたはStatefulSetsのYAMLファイルを更新して、APMエージェントをアプリケーションにデプロイします。
B: OpenTelemetryオペレータは、Javaエージェントをローカル・キャッシュに自動的にダウンロードします。Javaエージェントは、OKEクラスタ内の各レプリカにローカルにインストールされます。
C:サーバーおよびJDBCのトレース、スパンおよびメトリックはAPMドメインに送信されます。Kubernetesポッドが再起動されると、サーバーからのトレースおよびスパンが、データ・アップロード・エンドポイントURLが配置されているAPMドメインに送信されます。
D:ブラウザのトレース、スパンおよびメトリックはAPMドメインに送信されます。収集されたデータは、パフォーマンスおよび可用性の分析のためにAPMダッシュボードおよびトレース・エクスプローラでビジュアル化できます。
次の図は、共有ファイル・システムの実装を示しています。
apm-microservices-arc oracle.zip
このアーキテクチャのデータ・フローは次のとおりです。
- OCIにAPMドメインを作成し、ドメインのデータ・アップロード・エンドポイントURLとプライベートおよびパブリック・データ・キーを取得します。
- OCIに共有ファイル・システムを作成し、OKEクラスタに永続ボリュームなどのKubernetesストレージ・オブジェクトを作成します。
- APMドメインからAPM Javaエージェントをダウンロードし、マウントされたボリュームにプロビジョニングします。
- KubernetesデプロイメントまたはStatefulSetsのYAMLファイルを更新して、APMエージェントをアプリケーションにデプロイします。
B:サーバーおよびJDBCのトレース、スパンおよびメトリックはAPMドメインに送信されます。Kubernetesポッドが再起動されると、サーバーからのトレースおよびスパンが、データ・アップロード・エンドポイントURLが配置されているAPMドメインに送信されます。
C:ブラウザのトレース、スパンおよびメトリックはAPMドメインに送信されます。収集されたデータは、パフォーマンスおよび可用性の分析のためにAPMダッシュボードおよびトレース・エクスプローラでビジュアル化できます。
このアーキテクチャには次のコンポーネントがあります。
- Tenancy
テナンシは、Oracle Cloud InfrastructureにサインアップしたときにOracle Cloud内でOracleが設定するセキュアで分離されたパーティションです。テナンシ内のOCIでリソースを作成、編成および管理できます。テナンシは、会社または組織と同義です。通常、会社は1つのテナンシを持ち、そのテナンシ内に組織構造を反映させます。通常、単一のテナンシは単一のサブスクリプションに関連付けられ、単一のサブスクリプションには1つのテナンシのみが含まれます。
- リージョン
Oracle Cloud Infrastructureリージョンは、可用性ドメインをホストする1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立しており、長距離の場合は(国または大陸にまたがって)分離できます。
- コンパートメント
コンパートメントは、Oracle Cloud Infrastructureテナンシ内のリージョン間論理パーティションです。コンパートメントを使用して、Oracle Cloudリソースの編成、アクセス制御および使用割当てを設定します。特定のコンパートメントでは、アクセスを制御し、リソースの権限を設定するポリシーを定義します。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義ネットワークです。従来のデータ・センター・ネットワークと同様に、VCNsではネットワーク環境を制御できます。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。
このアーキテクチャでは、Redsクラスタをホストするすべてのコンピュート・インスタンスが単一のリージョナル・サブネットにアタッチされます。
- セキュリティ・リスト
サブネットごとに、サブネット内外で許可されるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。
このアーキテクチャでは、TCPポート16379および6379のイングレス・ルールが追加されます。ポート6379はRedsクライアントにサービスを提供し、ポート16379はRedsクラスタバスで使用されます。
- Kubernetes Engine
Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)は、コンテナ化アプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。アプリケーションで必要なコンピュート・リソースを指定すると、KubernetesエンジンがそれらをOracle Cloud Infrastructureの既存のテナンシにプロビジョニングします。OKEは、Kubernetesを使用して、ホストのクラスタにわたるコンテナ化されたアプリケーションのデプロイメント、スケーリングおよび管理を自動化します。
- Autonomous Transaction Processing
Oracle Autonomous Transaction Processingは、トランザクション処理ワークロード用に最適化された、自動運転、自己保護、自己修復が可能なデータベース・サービスです。ハードウェアの構成や管理、ソフトウェアのインストールを行う必要はありません。Oracle Cloud Infrastructureは、データベースの作成、バックアップ、パッチ適用、アップグレードおよびチューニングを処理します。
- Application Performance Monitoring
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM)は、エンド・ユーザーからアプリケーション・ログまで、アプリケーションのパフォーマンスに対する深い可視性を提供する、Platform as a Service (PaaS)ベースのソリューションです。このサービスは、ユーザー・エクスペリエンス情報、アプリケーション・メトリックおよびログ・データ分析を統合します。
- APMドメイン
APMドメインは、APMが監視するシステムを含むOracle Cloud Infrastructure (OCI)リソース・タイプです。
各APMドメインは標準のOCIコンパートメント内に作成されます。OCIアクセス制御ポリシーを定義して、特定のユーザー・セットに対してAPMドメインへのアクセス権を付与できます。
- データ・キー
データ・キーは、データ・ソースによって収集された監視をAPMが受け入れるために必要です。データ・キーはAPMドメインの作成時に生成され、パブリック・データ・キーとプライベート・データ・キーの2つのタイプがあります
- データ・アップロード・エンドポイントURL
データ・アップロード・エンドポイントは、データ・ソースが監視を送信する宛先のURLです。データ・アップロード・エンドポイントは、APMドメインの作成時に生成されます。各APMドメインにはデータ・アップロード・エンドポイントがあります。
- OpenTelemetry演算子
OpenTelemetryオペレータは、Kubernetesポッドで実行されているJVMへのJavaエージェントの自動インジェクションを簡略化するために設計されたKubernetesオペレータです。
- APM Javaエージェント
APM Javaエージェントは、アプリケーション・サーバーからのスパンおよびメトリックを記録し、APMに送信します。
- APMブラウザ・エージェント
APMブラウザ・エージェントは、Webサイトとのユーザー・インタラクションを記録し、スパンおよびメトリックをAPMに送信します。
- トレースおよびスパン
トレースは、指定された期間に分散システムのすべてのコンポーネントを通過するリクエストの完全なフローです。スパンには、トレース内の操作または論理的な作業単位が含まれ、名前、開始時間および期間があります。
- APMドメイン
レコメンデーション
実際の要件は、ここで説明するアーキテクチャとは異なる場合があります。Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM)の開始点として、次の推奨事項を使用します。
- APMブラウザ・エージェント
APMブラウザ・エージェントをアプリケーションのWebインタフェースにデプロイして、エンド・ユーザーの監視を有効にします。トレースは、ブラウザでのユーザー・アクションから始まります。
- 合成モニタリング
合成モニタリングを構成して、アプリケーションのユーザー・インタフェースおよびAPIエンドポイントを監視し、可用性およびパフォーマンスの問題をプロアクティブに検出します。ブラウザベースまたはRESTベースのモニターを作成し、グローバルな場所から、またはテナント仮想クラウド・ネットワーク(VCN)内から定期的に実行するようにスケジュールできます。
考慮事項
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM)を使用する場合は、次の点を考慮してください。
- データ・キー
カスタム・データ・キーを使用して、APMに送信されるデータを管理します。デフォルトのデータ・キー以外に、特定の目的で独自のデータ・キーを作成できます。多くのユーザーがAPMを使用する大規模なデプロイメントの場合は、APMドメイン管理者としてAPMに入るデータと入らないデータを簡単に制御できるように、異なるプロジェクト所有者に異なるキーを指定します。
たとえば、APMは破棄されたプロジェクトからデータ・セットを受信し、データ収集をオフにします。ただし、プロジェクト所有者が組織を離れたため、オフにするエージェントを特定することは困難です。プロジェクトで使用されるデータ・キーを削除して、そのデータ・キーに関連付けられたデータを無視できます。
- Kubernetesリソース
マイクロサービスを構成する場合は、APMで履歴をより適切に追跡するようにKubernetesポッド・リソースを構成する際に、デプロイメントのかわりにStatefulSetsを使用することを検討してください。デプロイメント・ポッドは、IDを再生成するたびにIDを変更します。StatefulSetsは、同じID索引(SS_0、SS_1、SS_2など)で再生成され、APMを使用した履歴のトレースが簡略化されます。
- APMサービス名
APM Javaエージェントをプロビジョニングする場合は、APMで使用されるサービス名を指定する必要があります。APMで一貫性のあるトレースを行うには、デプロイメント/StatefulSet名をAPM serviceNameとして使用することを検討してください。
- サンプリング
大量のアプリケーションでサンプリングを使用します(たとえば、1秒当たり100万トランザクション)。APMでは、デフォルトですべてのスパンが収集され、アプリケーションのすべてのトランザクションを追跡できます。ただし、大量アプリケーションの場合、これは多数のスパンを生成できます。このような場合は、コスト効率を高め、トレース・データの量を削減するために、サンプリング構成を明示的に指定することを検討してください。
デプロイ
このリファレンス・アーキテクチャで説明されているAPM Javaエージェントをデプロイする場合は、次のOracle LiveLabsワークショップのステップバイステップの手順を参照してください。
次の演習では、Spring BootおよびOracle WebLogic Serverを使用したアプリケーションを例として使用します。