パフォーマンス測定・負荷テストツールのApache JMeterをBOSHを用いて構築し、テストを実施する。Apache JMeter自体は通常のアプリケーションなので、Windows, Mac, Linux等にインストールして実行することができる。また、複数台で並列実行することで高負荷を発生させることができる。
複数台でJMeterを実行する方法も多く紹介されているが、今回はJMeterをBOSHで構築・管理する。BOSH環境の構築にはやや手間がかかるものの、既にCloud FoundryやKubernetesなどをBOSHで運用している場合は、デプロイメントを一つ追加するだけなので、それほどの手間ではない。BOSHであれば、ワーカーのスケールアップ・スケールアウトが簡単なので、JMeterサーバ側のスペックで悩む必要がなくなる。
Tornado for Apache JMeter(TM)
PivotalのエンジニアブログでApache JMeterをBOSHで使用する方法が紹介されている。
テストの実行は以下の二つのモードが用意されている。
Storm Mode: シナリオを実行する。
Tornado Mode: 負荷をかけ続ける。
設定項目
設定項目および設定例はこちらにある通り。GET, POSTやヘッダなど、基本的なHTTPの設定ができる。
今回はBOSH-Liteでの簡易な試験しかできないので、以下の設定とする。(Storm Mode)
$ cat jmeter.yml --- name: jmeter releases: - name: jmeter-tornado version: "2.1.1" url: https://bosh.io/d/github.com/jamlo/jmeter-bosh-release?v=2.1.1 sha1: c47ae7cd0094c5d9275ec083a8cdeef894f0064a stemcells: - alias: default os: ubuntu-xenial version: latest update: canaries: 50 max_in_flight: 50 canary_watch_time: 5000-60000 update_watch_time: 5000-60000 instance_groups: - name: storm-workers azs: [z1] instances: 5 jobs: - name: jmeter_storm_worker release: jmeter-tornado properties: jvm: xms: 512m xmx: 512m vm_type: default stemcell: default networks: - name: default - name: storm lifecycle: errand azs: [z1] instances: 1 jobs: - name: jmeter_storm release: jmeter-tornado properties: wizard: configuration: users: 20 ramp_time: 120 duration: 180 simple_delay: 1000 #gaussian_random_timer: # constant_delay_offset: 1000 # deviation: 1000 targets: - name: Nginx Test url: "http://nginx.bosh.local" http_method: GET vm_type: default stemcell: default networks: - name: default
デプロイする。
$ bosh deploy -d jmeter jmeter.yml ... $ bosh vms Using environment '192.168.1.222' as client 'admin' Deployment 'jmeter' Instance Process State AZ IPs VM CID VM Type Active storm-workers/9a400bab-8dc4-4546-8726-e78c4628f976 running z1 10.244.0.7 91a376fb-e39b-4516-5f02-9ffd6a1c11ea default true storm-workers/9eb08734-5212-46bf-89b3-9a2a31bd6697 running z1 10.244.0.6 5cc877b6-dd9e-46ed-6c2f-c3c374ee2114 default true storm-workers/c4e6ad6e-6c41-44a7-a9a9-4dd531890680 running z1 10.244.0.8 740e7621-18a3-4039-7ec4-5a63656e0149 default true storm-workers/d6872c84-9208-4192-961e-3b8474a9abdf running z1 10.244.0.9 df3ad346-032e-4bd6-6045-c7f50d205199 default true storm-workers/e8064360-e316-4abb-a9be-ad320be887f0 running z1 10.244.0.10 2c3b6e4a-4a62-4b37-4d41-b47f010d895a default true 5 vms
テストの実行はErrandを実行する。--keep-alive
しておくとErrand VMの再作成の時間が省ける。
$ bosh run-errand -d jmeter storm --download-logs --keep-alive Using environment '192.168.1.222' as client 'admin' Using deployment 'jmeter' Task 32 Task 32 | 10:41:45 | Preparing deployment: Preparing deployment Task 32 | 10:41:46 | Preparing package compilation: Finding packages to compile (00:00:00) Task 32 | 10:41:46 | Preparing deployment: Preparing deployment (00:00:01) Task 32 | 10:41:46 | Creating missing vms: storm/e5b0dc90-139c-4827-9525-0311f919670d (0) (00:00:15) Task 32 | 10:42:01 | Updating instance storm: storm/e5b0dc90-139c-4827-9525-0311f919670d (0) (canary) (00:00:33) Task 32 | 10:42:34 | Running errand: storm/e5b0dc90-139c-4827-9525-0311f919670d (0) (00:03:52) Task 32 | 10:46:27 | Fetching logs for storm/e5b0dc90-139c-4827-9525-0311f919670d (0): Finding and packing log files (00:00:04) Task 32 Started Sat Jan 19 10:41:45 UTC 2019 Task 32 Finished Sat Jan 19 10:46:31 UTC 2019 Task 32 Duration 00:04:46 Task 32 done Instance storm/e5b0dc90-139c-4827-9525-0311f919670d Exit Code 0 Stdout /var/vcap/packages/jmeter/bin /var/vcap/bosh Stderr - 1 errand(s) Downloading resource 'b69ca9dc-adfb-4f06-65c2-cd6fd084c3a1' to '/Users/daichi703n/project/bosh-deployment/vbox/storm-20190121-011418-556246.tgz'... ############################### 49.32% 7.02 MiB/s Succeeded
Errand(テスト)が終了すると、手元にログファイルが転送される。
$ ls -l -rw------- 1 3088938 1 19 20:18 storm-20190121-011418-556246.tgz
解凍すると結果が参照できる。
$ tar zxf ./storm-20190121-011418-556246.tgz -C ./logs $ open ./logs/jmeter_storm/dashboard/index.html
Tornado Mode
Tornadoモードで実行する場合は、instance_groupsで以下のようにノードを作成する。負荷の増減は、instancesを増やした上で、bosh start
, bosh stop
により起動台数を変更する。
- name: tornado-launcher azs: [z1] instances: 1 jobs: - name: jmeter_tornado release: jmeter-tornado properties: wizard: configuration: users: 20 ramp_time: 120 simple_delay: 1000 targets: - name: Nginx Test url: "http://nginx.bosh.local" http_method: GET
Tornadoモードではログやダッシュボードは生成されないため、別の方法で負荷状況等を確認する必要がある。
設定サンプル
test配下の一式が設定サンプルとして参考になる。
https://github.com/jamlo/jmeter-bosh-release/tree/master/test/assets/ops
要確認点
Dashboardのgranularity(粒度) (追記)Property追加してPull Request上げた https://github.com/jamlo/jmeter-bosh-release/pull/17
事前作成のJMXファイルでの実行
まとめ - Tornado for Apache JMeterでBOSH環境で負荷試験する
Tornado for Apache JMeterをBOSH環境にデプロイして負荷試験の環境を構築した。シンプルなHTTPであれば、デプロイYAMLの中のシンプルな定義で試験することができる。