本記事は IDCF Cloud Advent Calendar 2016 に参加しています。
初めてQiitaに記事書きました。noriko3 と申します。
モフモフしたもの、特に猫が好きです。赤いリボンした白猫なんかもうかわいくて仕方ないですね。
それは置いといて。
時々仕事で負荷試験っぽいものをしたりするんですが、いちいち環境作ってやるのはめんどくさいしなーとか思ってたら、ec2-bench というものがあるということを知ったのですが、abした結果も欲しいしなぁ、もっと大量にアクセスしたいんじゃあああ!となり、ec2-ab-bench というものを作ったんですが、
これって別にどこのクラウドでもよくない?っていうか、AWSはネットワーク料金怖いからIDCFクラウドでやったらちょっと安心出来ないかしら?というわけで、idcf-ab-bench というものを作ってみました。
cloudstack-api を叩いて、ssh で ab コマンドを投げるだけといういたってシンプルなものです。
とりあえず使い方なんぞを解説したいと思います。
まず、cloudstack-api を使えるようにする。
参考: http://docs.idcf.jp/cloud/introduction/
python3系だとエラーが出て色々面倒そうだたったので結局2系使いました。
ここで結構時間とられました。pythonとか随分触ってないので追う気力が(
このスクリプトのために、テンプレートを公開していますので、リージョンは東日本リージョン2を使って下さい。
idcf-ab-bench.conf を設定する
サービスオファーリング(service_offering_id)
cloudstack-api listServiceOfferings -t id,name,displaytext
好きなのを選んでください。
テンプレートID(template_id)
dc91e704-c03d-45c2-8353-4247846de388
公開テンプレートをご利用ください。
デフォルトのは ab 入ってないし ulimit -n が 1024 だったのでその辺ちょっと手を入れた程度ですが。
# というか他の人もちゃんと使える・・・よね?!
ゾーンID(zone_id)
e8ebfccb-eb38-43ed-8abf-80b5f37c3aa9
waber 有効にしてください
SSHのキー(keypair)
ここに記載されたキー名でSSHします。
ない場合はポータルから作成してください。
秘密鍵は $HOME/.ssh/${keypair}
という名前にして 600 で置いてください。
IPアドレスのID(ipaddress_id)
cloudstack-api listPublicIpAddresses -t id,ipaddress
IPアドレス(ipaddress)
↑で取得したものを記載
VM作成数(count)
作成するVM数を指定します
ab -n ココ(request_number) -c ココ(client_number)
はじめは少なめで
10000とか指定したい場合は、スペック高めのタイプにするといいかも
これで多分準備は完了です。
やってみる
norikos-MacBook-Air-3:idcf-ab-bench noriko$ sh idcf-ab-bench.sh http://example.com/asdf
work_dir: /Users/noriko/tmp/idcf-ab/1220-2325
destroy command:
cloudstack-api destroyVirtualMachine --id a88543fc-0e14-4f61-b03a-7636c24beff4
cloudstack-api destroyVirtualMachine --id d1b7fcc4-2be5-4f7a-8a53-89b8fd609910
norikos-MacBook-Air-3:idcf-ab-bench noriko$
削除コマンドを表示していますので、不要でしたらコマンド実行して削除してください。
work_dir の中に ab-数字.log というファイルが作成されていて、そこに ab の実行結果が入っています。
よしなに調理してください。
いろいろ仕組みとかなんとか
ssh するポート
1つのIPを使いまわしたかったので(新しいIP取るとお金かかるし)、適当なポートを開けて ssh するようにしてあります。コマンド実行時に UNIXTIME の下4桁とって、VM作成毎に ++ していってるだけなんで、時々かぶるかもしれません。
こまめにVMを完全削除すれば多分大丈夫です。
VM名
idcf-ab-bench-月日-時分-n
という感じです。1回やるのに1分はかかるんで、被らない想定。
同名で作成出来たらよかったんだけど、これはこれでいいのかな?
VM1つでだいたい1分使ってる
VM作成して、作成したかどうかのチェックをしないで sleep してます(
ポートフォーワードの設定も同じです。20秒だと時々足らなかったので30秒にしました。
この辺はどうにかしたいというか、VM作成時にネットワークの設定も一緒に出来るといいんですが。
感想
結構たくさん作っちゃいました。
3時間くらいでスクリプト〜記事まで書いたので結構雑です。ご利用は個人の責任でお願いします。
またなんか思いついたら記事書きたいと思います。それではまたーノ
追記
スクリプト書いてあれこれしてかかったお値段は5円でした。公開テンプレートはどうなるんだろう(あとで調べる)