A utility for arming (creating) many bees (micro EC2 instances) to attack (load test) targets (web applications).
Also, retribution for this shameful act against a proud hive.
- Python 2.6
- boto
- paramiko
- csvkit
Preferred:
pip install beeswithmachineguns
or, if you must:
easy_install beeswithmachineguns
git clone git://github.com/newsapps/beeswithmachineguns.git cd beeswithmachineguns mkvirtualenv --no-site-packages bees easy_install pip pip install -r requirements.txt
Bees uses boto to communicate with EC2 and thus supports all the same methods of storing credentials that it does. These include declaring environment variables, machine-global configuration files, and per-user configuration files. You can read more about these options on boto’s configuration page.
A typical bees session looks something like this:
bees up -s 4 -g public -k frakkingtoasters bees attack -n 10000 -c 250 -u http://www.ournewwebbyhotness.com/ bees down
This spins up 4 servers in security group ‘public’ using the EC2 keypair ‘frakkingtoasters’, whose private key is expected to reside at ~/.ssh/frakkingtoasters.pem.
Note: the default EC2 security group is called ‘default’ and by default it locks out SSH access. I recommend creating a ‘public’ security group for use with the bees and explicitly opening port 22 on that group.
Note 2: Always include a trailing slash when testing a root domain. The underlying load-testing tool (ab) doesn’t support raw domains.
It then uses those 4 servers to send 10,000 requests, 250 at a time, to attack OurNewWebbyHotness.com.
Lastly, it spins down the 4 servers. Please remember to do this—we aren’t responsible for your EC2 bills.
bees up -s 5 -g public -k frakkingtoasters -z us-west-1a -i ami-aabbccdd -l ubuntu for i in `seq 200 200 1000` do echo "---- $i -----" bees attack -t 900 -c $i -p query.dat -u http://www.ournewwebbyhotness.com/ --stats-file 15_Min_200_step.csv --non-200-is-failure --testname $i done bees down gnuplot -e "filename='15_Min_200_step'" examples/LoadTest.gpi
This spins up 5 servers in the us-west-1a AZ from the specified AMI in security group ‘public’ using the EC2 keypair ‘frakkingtoasters’, whose private key is expected to reside at ~/.ssh/frakkingtoasters.pem.
It then runs a series of 15 minute tests (which in this case are a post of some query.dat file) with an increasing number of concurrent users, all the while collecting all the resulting statistics in the 15_Min_200_step.csv file. Note that in this test non 200 responses are considered as errors.
Next, the bees are spun down.
Finally, a graph is created from the csv using gnuplot (an example gnuplot script can be found in the examples dir).
For complete options type:
bees -h
(The following was cribbed from our original blog post about the bees.)
If you decide to use the Bees, please keep in mind the following important caveat: they are, more-or-less a distributed denial-of-service attack in a fancy package and, therefore, if you point them at any server you don’t own you will behaving unethically, have your Amazon Web Services account locked-out, and be liable in a court of law for any downtime you cause.
You have been warned.
Please log your bugs on the Github issues tracker.
The bees are a creation of the News Applications team at the Chicago Tribune—visit our blog and read our original post about the project.
Initial refactoring code and inspiration from Jeff Larson.
Thanks to everyone who reported bugs against the alpha release.
MIT.