次の方法で共有


チュートリアル: ロード テストを実行して、Web アプリのパフォーマンスのボトルネックを特定する

このチュートリアルでは、Azure Load Testing を使用して Web アプリケーションのパフォーマンスのボトルネックを特定する方法について説明します。 サンプル Node.js Web アプリケーションの負荷をシミュレートした後、ロード テスト ダッシュボードを使用してクライアント側とサーバー側のメトリックを分析します。

サンプル アプリケーションは、NoSQL データベースと対話する Node.js Web API で構成されます。 Web API を Azure App Service Web アプリにデプロイし、データベースとして Azure Cosmos DB を使用します。

このチュートリアルでは、以下の内容を学習します。

  • サンプル アプリをデプロイします。
  • ロード テストを作成して実行します。
  • ロード テストに Azure アプリ コンポーネントを追加します。
  • ロード テスト ダッシュボードを使用して、パフォーマンスのボトルネックを特定します。

[前提条件]

  • アクティブなサブスクリプションを持つ Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • ご利用のローカル コンピューターに Azure CLI がインストールされていること。
  • Azure CLI バージョン 2.2.0 以降。 az --versionを実行して、コンピューターにインストールされているバージョンを見つけます。 Azure CLI をインストールまたはアップグレードする必要がある場合は、「Azure CLI をインストールする方法」を参照してください。
  • Visual Studio Code。 お持ちでない場合は、ダウンロードしてインストールしてください。
  • Git。 お持ちでない場合は、ダウンロードしてインストールしてください。

前提条件の確認

開始する前に、環境を検証します。

サンプル アプリケーションをデプロイする

このチュートリアルでは、Azure App Service にデプロイするサンプル Web アプリケーションに対する負荷を生成します。 Azure CLI コマンド、Git コマンド、PowerShell コマンドを使用して、Azure サブスクリプションにサンプル アプリケーションをデプロイします。

  1. Windows PowerShell を開き、Azure にサインインして、サブスクリプションを設定します。

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. サンプル アプリケーションのソース リポジトリを複製します。

    git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
    

    サンプル アプリケーションは、Azure App Service Web コンポーネントと Azure Cosmos DB データベースで構成される Node.js アプリです。 リポジトリには、サンプル アプリを Azure サブスクリプションにデプロイする PowerShell スクリプトが含まれています。 また、後の手順で使用する Apache JMeter スクリプトもあります。

  3. Node.js アプリのディレクトリに移動し、次の PowerShell スクリプトを使用してサンプル アプリをデプロイします。

    cd nodejs-appsvc-cosmosdb-bottleneck
    .\deploymentscript.ps1
    

    ヒント

    PowerShell は Linux/WSL または macOS にインストールできます。

    インストールした後は、前のコマンドを pwsh ./deploymentscript.ps1として実行できます。

  4. プロンプトで、次の情報を入力します。

    • Azure のサブスクリプション ID。
    • Web アプリの一意の名前。
    • ある場所。 既定では、場所は eastus です。 Get-AzLocation コマンドを実行すると、リージョン コードを取得できます。

    Von Bedeutung

    Web アプリの名前には、小文字と数字のみを使用します。 スペースや特殊文字は使用しないでください。

  5. デプロイが完了したら、ブラウザー ウィンドウで https://<yourappname>.azurewebsites.net を開いて、実行中のサンプル アプリケーションに移動します。

サンプル アプリケーションをデプロイして実行したら、Azure ロード テスト リソースとロード テストを作成できます。

ロード テストの作成

このチュートリアルでは、JMeter テスト スクリプト (jmx ファイル) をアップロードして、Azure CLI でロード テストを作成します。 サンプル アプリケーション リポジトリには、ロード テスト構成ファイルと JMeter テスト スクリプトが既に含まれています。

Azure portal を使用してロード テストを作成するには、「 クイック スタート: JMeter スクリプトを使用してロード テストを作成する」の手順に従います。

Azure CLI を使用して Azure ロード テスト リソースとロード テストを作成するには、次の手順に従います。

  1. ターミナル ウィンドウを開き、次のコマンドを入力して Azure サブスクリプションにサインインします。

    az login
    
  2. サンプル アプリケーション ディレクトリに移動します。

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. Azure ロード テスト リソースのリソース グループを作成します。

    必要に応じて、前にデプロイしたサンプル アプリケーションのリソース グループを再利用することもできます。

    <load-testing-resource-group-name> テキスト プレースホルダーをリソース グループの名前に置き換えます。

    resourceGroup="<load-testing-resource-group-name>"
    ___location="East US"
    
    az group create --name $resourceGroup --___location $___location
    
  4. az load create コマンドを使用して Azure ロード テスト リソースを作成します。

    <load-testing-resource-name> テキスト プレースホルダーをロード テスト リソースの名前に置き換えます。

    # This script requires the following Azure CLI extensions:
    # - load
    
    loadTestResource="<load-testing-resource-name>"
    
    az load create --name $loadTestResource --resource-group $resourceGroup --___location $___location
    
  5. az load test create コマンドを使用して、サンプル アプリケーションに対する負荷をシミュレートするためのロード テストを作成します。

    <web-app-hostname> テキスト プレースホルダーを、サンプル アプリケーションの App Service ホスト名に置き換えます。 この値は、 myapp.azurewebsites.net形式です。 URL の https:// 部分は含めないでください。

    testId="sample-app-test"
    webappHostname="<web-app-hostname>"
    
    az load test create --test-id $testId --load-test-resource $loadTestResource --resource-group $resourceGroup --load-test-config-file SampleApp.yaml --env webapp=$webappHostname
    

    このコマンドは、SampleApp.jmx JMeter テスト スクリプトを参照するSampleapp.yamlロード テスト構成ファイルを使用します。 コマンドライン パラメーターを使用して、サンプル アプリケーションのホスト名をロード テストに渡します。

Azure サブスクリプションのサンプル Web アプリケーションに対して負荷を生成するための Azure ロード テスト リソースとロード テストが作成されました。

Azure アプリ コンポーネントを追加してアプリケーションを監視する

Azure Load Testing を使用すると、アプリケーションの Azure コンポーネントのリソース メトリックを監視できます。 これらの サーバー側メトリックを分析することで、Azure Load Testing ダッシュボードから直接、アプリケーションのパフォーマンスと安定性の問題を特定できます。

このチュートリアルでは、アプリ サービス、Cosmos DB アカウントなど、Azure にデプロイしたサンプル アプリケーションの Azure コンポーネントを追加します。

サンプル アプリケーションの Azure アプリ コンポーネントをロード テストに追加するには:

  1. Azure portal で Azure ロード テスト リソースに移動します。

  2. 左側のウィンドウで、[ テスト ] を選択してロード テストの一覧を表示します

  3. ロード テストの横にあるチェック ボックスをオンにし、[ 編集] を選択します。

    Azure portal のロード テストの一覧を示すスクリーンショット。一覧からテストを選択する方法と、[編集] ボタンを強調表示してロード テストの構成を変更します。

  4. [ 監視 ] タブに移動し、[ 追加/変更] を選択します。

  5. 前にデプロイしたサンプル アプリケーションのチェック ボックスをオンにし、[ 適用] を選択します。

    Azure portal でロード テストにアプリ コンポーネントを追加する方法を示すスクリーンショット。

    ヒント

    リソース グループ フィルターを使用すると、サンプル アプリケーション リソース グループ内の Azure リソースのみを表示できます。

  6. [ 適用] を選択して、変更をロード テスト構成に保存します。

ロード テストの実行中にサーバー側メトリックの監視を有効にするために、サンプル アプリケーションの Azure アプリ コンポーネントをロード テストに正常に追加しました。

ロード テストを実行する

ロード テストを実行して、Azure サブスクリプションにデプロイしたサンプル アプリケーションに対する負荷をシミュレートできるようになりました。 このチュートリアルでは、Azure portal 内からロード テストを実行します。 または、 ロード テストを実行するように CI/CD ワークフローを構成することもできます。

Azure portal でロード テストを実行するには:

  1. Azure portal で Azure ロード テスト リソースに移動します。

  2. 左側のウィンドウで、[ テスト ] を選択してロード テストの一覧を表示します

  3. 一覧からロード テストを選択して、テストの詳細とテストの実行の一覧を表示します。

  4. [ 実行] を選択し、もう一度 実行 してロード テストを開始します。

    必要に応じて、テスト実行の説明を入力できます。

    Azure portal でロード テストを開始する方法を示すスクリーンショット。

    ロード テストを実行すると、Azure Load Testing によって JMeter テスト スクリプトと追加のファイルがテスト エンジン インスタンスにデプロイされ、ロード テストが開始されます。

  5. ロード テストが開始されると、ロード テスト ダッシュボードが表示されます。

    ダッシュボードが表示されない場合は、[最新の情報に 更新 ] を選択し、一覧からテストの実行を選択できます。

    ロード テスト ダッシュボードには、クライアント側のメトリックやサーバー側のアプリケーション メトリックなどのテスト実行の詳細が表示されます。 ダッシュボードのグラフが自動的に更新されます。

    Azure portal のロード テスト ダッシュボードのクライアント側メトリック グラフを示すスクリーンショット。

    複数のフィルターを適用したり、結果を異なるパーセンタイルに集計してグラフをカスタマイズしたりできます。

    ヒント

    [停止] を選択すると、Azure portal からいつでもロード テストを 停止できます。

ロード テストが完全に完了するまで待ってから、次のセクションに進みます。

サーバー側メトリックを使用してパフォーマンスのボトルネックを特定する

このセクションでは、ロード テストの結果を分析して、アプリケーションのパフォーマンスのボトルネックを特定します。 クライアント側とサーバー側の両方のメトリックを調べて、問題の根本原因を特定します。

  1. まず、クライアント側のメトリックを確認します。 addおよびget API 要求の応答時間メトリックの 90 パーセンタイルが、lasttimestamp API の場合よりも大きいことがわかります。

    クライアント側のメトリックを示すスクリーンショット。

    エラーのパターンも似ていますが、lasttimestamp API のエラー数は他の API よりも少なくなります。

    エラー グラフを示すスクリーンショット。

    add API と get API の結果は似ていますが、lasttimestamp API の動作は異なります。 add API とget API の両方にデータベース アクセスが含まれているため、データベースに関連する原因が考えられます。

  2. このボトルネックをさらに詳しく調査するには、[ サーバー側メトリック ダッシュボード] セクションまで下にスクロールします。

    サーバー側のメトリックは、Azure アプリケーション コンポーネント (Azure App Service プラン、Azure App Service Web アプリ、Azure Cosmos DB) に関する詳細情報を示します。

    Azure App Service プランのメトリックを示すスクリーンショット。

    Azure App Service プランのメトリックでは、 CPU の割合メモリの割合 のメトリックが許容範囲内にあることがわかります。

  3. 次に、Azure Cosmos DB のサーバー側メトリックを確認します。

    Azure Cosmos DB メトリックを示すスクリーンショット。

    正規化された RU 消費量メトリックは、リソース使用率が 100% でデータベースが迅速に実行されたことを示していることに注意してください。 リソース使用率が高い場合は、データベース調整エラーが発生する可能性があります。 また、 add および get Web API の応答時間が長くなる可能性もあります。

    また、Azure Cosmos DB インスタンスの プロビジョニング済みスループット メトリックの最大スループットは 400 RU であることがわかります。 データベースのプロビジョニング済みスループットを増やすと、パフォーマンスの問題が解決する可能性があります。

データベースのスループットを向上させる

このセクションでは、パフォーマンスのボトルネックを解決するために、データベースにより多くのリソースを割り当てます。

Azure Cosmos DB の場合は、データベースの RU スケール設定を増やします。

  1. サンプル アプリケーションのデプロイの一部としてプロビジョニングした Azure Cosmos DB リソースに移動します。

  2. [ データ エクスプローラー ] タブを選択します。

    [データ エクスプローラー] タブを示すスクリーンショット。

  3. [ スケールと設定] を選択し、スループット値を 1200 に更新します。

    更新された Azure Cosmos DB スケール設定を示すスクリーンショット。

  4. 変更を確認するには 保存 を選択します。

パフォーマンスの向上を検証する

データベースのスループットを向上させたので、ロード テストを再実行し、パフォーマンスの結果が向上したことを確認します。

  1. テスト実行ダッシュボードで、[再実行] を選択し、[テストの再実行] ウィンドウで [再実行] を選択します。

    ロード テストを実行するための選択を示すスクリーンショット。

    [プロビジョニング]、[実行中]、[完了] の各状態を循環する状態列を含む新しいテスト実行エントリを確認できます。 いつでもテストの実行を選択して、ロード テストの進行状況を監視します。

  2. ロード テストが完了したら、 応答時間 の結果とクライアント側メトリックの エラー 結果を確認します。

  3. Azure Cosmos DB のサーバー側メトリックを確認し、パフォーマンスが向上していることを確認します。

    スケール設定の更新後の Azure Cosmos DB クライアント側メトリックを示すスクリーンショット。

    Azure Cosmos DB の正規化された RU 消費量 の値は、100%を大きく下回りました。

データベースのスケール設定を更新すると、次のことがわかります。

  • add API と get API の応答時間が改善されました。
  • 正規化された RU 消費量は、制限を十分に超えています。

その結果、アプリケーションの全体的なパフォーマンスが向上しました。

リソースをクリーンアップする

Von Bedeutung

作成した Azure Load Testing リソースは、他の Azure Load Testing チュートリアルおよびハウツー記事で再利用できます。

作成したどのリソースも使用する予定がない場合は、追加の課金が発生しないように削除します。 別のリソース グループにサンプル アプリケーションをデプロイした場合は、次の手順を繰り返します。

Azure portal を使用してリソースを削除するには、次のようにします。

  1. 左上隅にあるメニュー ボタンを選択して、[リソース グループ] を選択します。

  2. 一覧から、作成したリソース グループを選択します。

  3. [リソース グループの削除] を選択します。 Azure portal でリソース グループの削除を選択する画面のスクリーンショット。

  4. リソース グループ名を入力します。 次に、 [削除] を選択します。

Azure CLI を使用してリソースを削除するには、次のコマンドを入力します。

az group delete --name <yourresourcegroup>

リソース グループを削除すると、そのグループに含まれるすべてのリソースが削除されるので注意してください。