Apache JMeter™でとても大きな負荷を作り出すためには、何台ものJMeterサーバーを構築し、それをJMeterクライアントから制御することで、JMeterサーバーたちから一気に処理を流すということをやります。
このいくつものJMeterサーバーたちは、基本的に同じ構成でセットアップされていればよいのですが、もしも100台のJMeterサーバーの構築作業を皆さんが担当するとしたら、『どこに』、『どうやって』、『どれくらいの時間をかけて』作りますか?

PCを100台用意する?
vmwareなどの仮想化環境?
それともクラウド?

1台1台OSやJMeterをインストールする?
VMwareやクラウド用の仮想マシンイメージやコンテナイメージを作ってから、それを展開する?

構築後にテスト要件が変更になり、新たなJMeter Pluginの追加やテストデータの追加が必要になったらどうする?
インストールしたPCや作成したイメージのOS(ディストリビューション)やJMeterのアップデートは?
もしかしてイメージの作り直し?

これらの準備をするにはどれくらいの時間がかかりそうでしょうか?

Load Tester (multiple remote servers) Powered by Apache JMeter™を利用することで、何台ものJMeterサーバーとそれを制御するJMeterクライアントを、とても短時間の作業でMicrosoft Azure上に構築することができます。

ここでは、Azure Portalでその構築をする方法を紹介します。

前提

  • Virtual MachineやStorage Accountなどを作成できるMicrosoft Azureのサブスクリプションがあること

手順概要

  1. Azure Portalにアクセス
  2. 仮想ネットワークの作成
  3. Azure MarketplaceからLoad Testerをデプロイ
  4. 動作確認

手順詳細

  1. Azure Portalにアクセス
    Azure Portalにアクセスし、ログインします。
    https://portal.azure.com
  1. 仮想ネットワークの作成
    JMeterクライアントやJMeterサーバーの仮想マシンを配置する仮想ネットワークを作成します。
    JMeterクライアント用とJMeterサーバー用に、2つのサブネットが必要です。
    既存の仮想ネットワークを利用することも可能ですが、その場合はJMeterサーバー用に1つのサブネットはリソースがない空の状態の必要があります。
    仮想ネットワークの作成
    • 特にJMeterサーバーの数を多くする場合、JMeterサーバー用のサブネットにはそれを十分に収容できるアドレス範囲を確保してください。
    • VNet peeringなどでAzureの他のVNetに接続する場合や、VPNやExpressRouteでオンプレミスやほかのクラウドサービスに接続する場合は、アドレス範囲が競合しないようにしてください。
    • 現在Load TesterはIPv6のサブネットには対応していません
  1. Azure MarketplaceからLoad Testerをデプロイ
    1. 「リソースの作成」で「jmeter pnop」で検索
      2つ検索されるので「Load Tester (multiple remote servers) Powerd by ...」を選択
      Marketplace

      以下のurlに直接アクセスすることもできます。
      https://portal.azure.com/#create/pnop.jmeter-multiple-remote-serversjmeter-multiservers

    2. 契約やプラン(価格)などを確認し作成
      Load Tester - 概要Load Tester - プラン

    3. "基本"タブ
      "基本"タブ

      • リソース グループ
        新規作成をするか、既存の空のリソースグループを選択します。
      • リージョン
        JMeterクライアントとJMeterサーバーを作成するリージョンを選択します。
        先ほど作成した仮想ネットワークと同じリージョンを選択してください。
      • Username
        JMeterクライアントとJMeterサーバーの仮想マシンに接続するユーザー名
      • Authentication type
        SSH接続時の認証方式を選択します
      • "パスワード"を選択した場合
        • Password / Confirm password
          JMeterクライアントとJMeterサーバーの仮想マシンに接続するユーザーのパスワード
      • "SSH公開キー"を選択した場合
        • SSH public key
          JMeterクライアントおよびJMeterサーバーへの接続時に利用される公開キー
        • Password for Remote Desktop connection / Confirm password
          JMeterクライアントにリモートデスクトップ接続するユーザーのパスワード
    4. "Networking"タブ
      "Networking"タブ

      • Virtual network
        先ほど作成した仮想ネットワークを選択します。
        ここで新規作成も選択できますが、Azure Marketplaceの不具合により希望の構成の仮想ネットワークを作成できないことがあります。
      • JMeter client subnet
        JMeterクライアントの仮想マシンを配置するサブネットを選択します。
      • JMeter server subnet
        JMeterサーバーの仮想マシンを配置するサブネットを選択します。
        このサブネットにはほかのリソースがない空の必要があります。
    5. "Storage"タブ
      "Storage"タブ

      • File sharing storage account
        JMeterクライアントとJMeterサーバーがマウントするAzure Filesのストレージを新規作成します。
        • 現時点では、既存のストレージアカウントを利用することはできません。
        • 新規作成する場合、アカウントの種類で「Storage (汎用 v1)」を選択することができますが、これは無視され『StorageV2 (汎用 v2)』で作成されます。
    6. "JMeter client"タブ
      "JMeter client"タブ

      • JMeter client virtual machien name
        JMeterクライアントとして作成される仮想マシン名
      • Size
        JMeterクライアント仮想マシンのインスタンスサイズ
        多くのJMeterサーバーでテストを実施する場合、JMeterクライアントにも高いスペックが必要になります。
      • OS disk type
        JMeterクライアント仮想マシンのOSディスクのタイプを選択します。
        Standard SSDをお薦めします。
        ※ 現時点では事情によりPremium SSDを選択することはできません。
      • Public IP
        JMeterクライアントに外部から接続するためのパブリックIPを、新規作成または既存のものから選択します。
      • DNS name label
        JMeterクライアントに外部からサーバー名指定で接続するには、この値を設定します。
        この値には記憶しやすいものを設定することをお薦めします。
        未指定の場合はIPアドレスを指定しての接続となります。
    7. "JMeter servers"タブ
      "JMeter servers"タブ

      • Virtual machine scale set name
        JMeterサーバー群として作成される仮想マシンスケールセット名

      • Instance count
        JMeterサーバーの台数
        多くのJMeterサーバーを作成する場合、サブスクリプションの制限(vCPU数、パブリックIPアドレス数など)に注意してください。

      • Size
        JMeterサーバー仮想マシンのインスタンスサイズ

      • OS disk type
        JMeterサーバー仮想マシンのOSディスクのタイプを選択します。
        Standard SSDをお薦めします。
        ※ 現時点では事情によりPremium SSDを選択することはできません。

      • Public IP address per instance
        JMeterサーバーの仮想マシン個々にパブリックIPアドレスを持たせるか否かを選択します。
        仮想マシン個々にパブリックIPアドレスを持たせる場合はTure、持たせない場合はFalseを選択します。

        この設定は、インターネット上のサーバーに対してテストをする際に有効です。
        個々にパブリックIPアドレスを持たせることで、テスト対象では仮想マシンそれぞれのIPアドレスからリクエストを受信します。
        個々に持たせない場合は、すべてのJMeterサーバーからのリクエストが、1つのIPアドレスからのリクエストとなります。

    8. "確認および作成"タブ
      設定内容を確認して「作成」をクリックします。
      "確認および作成"タブ

      もしも検証に失敗してしまった場合は、エラーを確認してください。
      検証失敗 - 未処理エラー
      この画像のエラーはJMeterサーバーの数が多すぎたためにサブスクリプションの制限を超えてしまったことによるものです。
      このような場合は、JMeterサーバー数を減らすか、Azureサポートに連絡して対象のvCPU数を増やしてもらいます。

    9. 作成
      これで構築のための作業は完了です。
      デプロイ進行中

      とても多くのJMeterサーバーを作る場合などに、すべての環境が出来上がるまでには時間がかかることもありますが、それはのんびり待ちましょう。
      デプロイ完了

  1. Apache JMeter™の起動確認
    1. 接続先サーバー名/IPアドレスの確認
      1. Azure Portalで、Load Testerの作成時に「基本タブ」で作成したリソースグループを表示します。
        リソース グループ
      2. パブリック IP アドレスの詳細表示
        種類が「パブリック IP アドレス」のリソースをクリックします。
        (上の画像では『jmeter-client-ip』)
      3. 「DNS名」または「IPアドレス」を確認
        概要の「DNS名」か「IPアドレス」をメモします。
        パブリックIPアドレス
    2. リモート デスクトップ接続を起動
      • Windows
        スタートメニューなどから「リモート デスクトップ接続」を起動します。
        リモート デスクトップ接続
      • macOS
        Mac用Microsoftリモートデスクトップを利用します。
        インストールしていない場合は、Mac App StoreまたはApp Centerからダウンロードしてください。
    3. 接続先にJMeterクライアントを指定
      「コンピューター」に先ほど確認したパブリックIPアドレスの『DNS名』または『IPアドレス』を指定して接続します。
      リモート デスクトップ接続
    4. 証明書エラーを無視
      証明書に問題がある旨のエラーが表示されますが、無視して接続します。
      証明書エラー
    5. ログイン
      Load Testerの作成時に「基本タブ」で入力したusernameとpasswordでログインします。
      ログイン(xrdp)
    6. Apache JMeterの起動
      デスクトップにある「JMeter」をダブルクリックして起動します。
      JMeter
    7. Apache JMeter™が起動する
      メニューの[Run] > [Remote Start]から、JMeterサーバーが登録されていることが確認できます。
      JMeter - Run > Remote Start
    8. 適当なテストシナリオを作成して、テスト実施してみてください。
  1. セキュリティの向上
    Load Testerのデプロイ直後の状態では、JMeterクライアントに対して、どこからでもsshとリモートデスクトップで接続できる状態です。
    指定した特定のネットワーク以外からの接続はさせないように、Azure Network Security Group(NSG)の設定をしましょう。
    1. Azure Portalにアクセス
      https://portal.azure.com
    2. ネットワーク セキュリティ グループの設定
      1. リソース グループの表示
        Azure Portalで、Load Testerの作成時に「基本タブ」で作成したリソース グループを表示します。
        リソース グループ
      2. ネットワーク セキュリティ グループの詳細表示
        種類が「ネットワーク セキュリティ グループ」のリソースをクリックし、NSGを表示します。
        (上の画像では『jmeter-client-nsg』)
        ネットワーク セキュリティ グループ
      3. ssh接続のアクセス元ネットワークを制限
        「受信セキュリティ規則」の一覧にある「AllowSshInbound」をクリックしssh接続を許可するネットワークだけにソースを制限します。
        インターネットからの1台のPCだけからの接続を許可する場合は、以下のように設定し、「保存」します。
        NSG - AllowSshInbound
        • ソース: 「IP Address」を選択
        • ソース IP アドレス/CIDR範囲
          接続を許可したいPCのグローバルIPアドレス/32 (例: 123.123.123.123/32)
          今利用しているPCのグローバルIPアドレスは、こちらこちらのサイトなどで確認できます。
      4. リモート デスクトップ接続のアクセス元ネットワークを制限
        「受信セキュリティ規則」の一覧にある「AllowRdpInbound」も、先のsshと同様に設定します。
      5. 設定を確認
        「受信セキュリティ規則」の一覧で、AllowSshInboundとAllowRdpInboundが設定した値になっていることを確認します。
        ネットワーク セキュリティ グループ
  1. おまけ
    リモート デスクトップ接続をした場合、キーボードの配列が日本語対応していないかもしれません。
    この対応方法はマニュアルをご確認ください。

今回はここまでです。
Load Tester (multiple remote servers) Powered by Apache JMeter™を利用することで、たくさんのApache JMeter™サーバーでテストする環境を、簡単に短時間の作業で作れることを紹介しました。