
パフォーマンス測定・負荷テストツールの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の中のシンプルな定義で試験することができる。