負荷テストを行うときには、各サーバのデータを残しておく必要があります。テスト条件のエビデンスとなる設定ファイル、テスト時のサーバ状況を確認するためのアクセスログやsarファイルなどです。場合によっては、定期的にプロセス状況などの確認コマンドの実行結果などもあります。
負荷テスト対象サーバは複数台あることが多いため、1台1台対応していると非常に手間がかかります。そこで、JMeterマスタを起点に、各サーバへscpやsshを行うことで効率化を図りたくなります。
SSHポートフォワードを利用することで、構成別の取得方法の差異を吸収することができるため、この記事では、構成別のデータ取得方法を紹介します。
構成別テストデータの取得方法
グローバルIP経由
図のように、対象サーバがグローバルIPを持っており直接アクセス可能な場合は大きな問題はありません。ファイアウォールで接続許可を入れ、JMeterから直接sshやscpの実行を行います。
踏み台サーバ経由
グローバルIPを持っておらず、踏み台サーバ経由でしかアクセスできない場合は少し困った状況になります。JMeterマスタから直接アクセスできないため、踏み台サーバにログインし、そこからデータ取得を行います。
データは踏み台サーバにたまっていくので、最終的にはJMeterマスタへ再度データ転送を行うことになります。データ転送が2度手間になり、手順も煩雑になるためあまり好ましくありません。
踏み台サーバへ保存してもよいですが、踏み台サーバ有無によって管理方法が変更になるのはいまいちです。
踏み台サーバ経由 SSHポートフォワード利用
SSHポートフォワードを使うことで、踏み台サーバを意識する必要がなくなります。JMeterからターゲットサーバへ直接scpやsshが可能になるのです。
SSHポートフォワード設定
実際にSSHポートフォワードの設定方法の確認をしていきます。
ターゲット(WEB)サーバの設定
ターゲットサーバへは、接続元からsshをするために公開鍵の設定を行います。接続元で作成した公開鍵をターゲットサーバへ登録します。
mkdir ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
--------------------------
接続元の公開鍵を追加
--------------------------
chmod 600 ~/.ssh/authorized_keys
ここで設定する公開鍵は踏み台のものではなく、接続元のものを設定します。
踏み台サーバの設定
踏み台サーバにも、接続元からsshをするために公開鍵の設定を行います。接続元で作成した公開鍵をターゲットサーバへ登録します。
mkdir ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
--------------------------
接続元の公開鍵を追加
--------------------------
chmod 600 ~/.ssh/authorized_keys
接続元(JMeter)の設定
今回はシンプルに「ssh bastion」で踏み台サーバへ、「ssh target」でターゲットサーバへログインさせてみます。
~/.ssh/config の設定
「~/.ssh/config」へ設定を加えます。これを入れることで、接続時にユーザーやポートの指定が不要になります。
また、踏み台サーバへログインしたさいに、ターゲットサーバへのポートフォワードを行うような設定を記載しておきます。
vi ~/.ssh/config
Host bastion
HostName 踏み台のIPアドレス
User 踏み台への接続ユーザ
Port 22
IdentityFile ~/.ssh/id_rsa
LocalForward 10022 ターゲットのIPアドレス:22
Host target
HostName localhost
User ターゲットへの接続ユーザ
Port 10022
IdentityFile ~/.ssh/id_rsa
踏み台サーバへの接続確認
下記コマンドで踏み台サーバへ接続可能か確認します。
ssh bastion
接続できない場合は、これまでの設定の見直しをしてください。
ターゲットサーバへの接続確認
次に踏み台サーバへの接続は維持したまま、別のプロンプトを開きターゲットサーバへ接続してみます。
ssh target
ssh: connect to host localhost port 10022: Connection refused
のようなエラーが出た場合は、ポートフォワードがうまくいっていません。踏み台サーバへログインしているかを確認しましょう。
ポートフォワード設定
今までの方法では、踏み台サーバからログアウトすると、ターゲットサーバからも強制的にログアウトしてしまいます。別窓を開く必要もあるので、踏み台サーバへのログインをバックグラウンドで実行させましょう。
ssh -fN4 bastion
正常に実行できたら、ターゲットサーバへ接続してみましょう。
ssh target
接続できれば、「ssh target 'コマンド'」や「scp target:/tmp/ファイル /tmp/」のように、ssh経由のコマンド実行やscpが実行が可能になります。
まとめ
この記事では、構成別のテストデータ取得方法についてまとめました。
SSHポートフォワードを利用することで、踏み台サーバの有無にかかわらず、同一の方法でデータの取得が可能になります。負荷テストデータの取得は重要なタスクになってくるので、ご活用ください。