Public | Automated Build

Last pushed: a year ago
Short Description
An Alpine Docker image which runs Apache Bench and parses its results
Full Description

alpine-bench

alpine-bench is useful for running Apache Bench in your cluster to gather
latency metrics from your services. It does this by:

  1. Running Apache Bench using provided options
  2. Parsing the results into a JSON data structure and printing them to stdout

This makes it useful for running from your automation (e.g. CI/CD) and making
decisions based on the results. For example, in a CD pipeline it can be useful
to deploy a new build to dev, measure its latency, and if the result is within
some threshold, proceed to prod rollout.

Usage

Nearly all of ab's options can simply be passed in using Docker's normal cmd
mechnaism, e.g.:

docker run -it --rm -t devth/alpine-bench -n3 http://google.com/

Sample output:

{
  "connect": {
    "max": 154,
    "mean": 69,
    "median": 66,
    "min": 54,
    "stdDev": 18.60000038147
  },
  "percentiles": {
    "100": 340,
    "50": 258,
    "66": 264,
    "75": 269,
    "80": 283,
    "90": 291,
    "95": 296,
    "98": 340,
    "99": 340
  },
  "processing": {
    "max": 274,
    "mean": 196,
    "median": 196,
    "min": 142,
    "stdDev": 18.60000038147
  },
  "total": {
    "max": 340,
    "mean": 266,
    "median": 258,
    "min": 250,
    "stdDev": 18.799999237061
  },
  "waiting": {
    "max": 274,
    "mean": 196,
    "median": 196,
    "min": 141,
    "stdDev": 18.60000038147
  }
}

The output can be parsed by your CI tool to make decisions about whether to
rollout a deployment (or whatever else you might want to do).

Special options

Options which require reading from a file can be passed in via ENV instead.
Internally the contents will be written to a file and the corresponding ab
option will be used.

Example

docker run -e 'POST=post body' -it --rm -t devth/alpine-bench -n3 http://google.com/

Options

ab Option Env Var
-p POST-file POST
-u PUT-file PUT

Unsupported options

Options which cause ab to write to a file are not supported.

  • -e csv-file
  • -g gnuplot-file

They will work, but the resulting file will be lost inside the Docker container
when it terminates.

Get a shell in the container

docker run -it --rm --entrypoint sh devth/alpine-bench

Development

Build the image, obtain your docker machine IP, run an Nginx container to
measure, and run alpine-bench against it:

docker build -t devth/alpine-bench .
export DM_IP=$(dm ip dev)
docker run -p 8080:80 -it --rm nginx:alpine
docker run -it --rm devth/alpine-bench -n3 http://$DM_IP:8080/

Or run it outside of Docker:

POST='post body' go run main.go -n3 http://$DM_IP:8080/

In your nginx logs you'll see something like:

172.17.0.1 - - [14/Jun/2016:20:20:42 +0000] "GET / HTTP/1.0" 200 612 "-" "ApacheBench/2.3" "-"
172.17.0.1 - - [14/Jun/2016:20:20:42 +0000] "GET / HTTP/1.0" 200 612 "-" "ApacheBench/2.3" "-"
172.17.0.1 - - [14/Jun/2016:20:20:42 +0000] "GET / HTTP/1.0" 200 612 "-" "ApacheBench/2.3" "-"

License

Copyright 2016 Trevor C. Hartman. Distributed under the
MIT license.

Docker Pull Command
Owner
devth
Source Repository

Comments (0)