A network performance testing tool that measures download speeds, connection timings, and network metrics using aria2c.
- Download Speed Testing: Measure download speeds with configurable iterations
- Connection Metrics: Track DNS lookup, TCP connection, and SSL handshake timings
- Statistical Analysis: Calculate percentiles (P50, P95, P99), standard deviation, and aggregate metrics
- StatsD Export: Export metrics to StatsD for monitoring and visualization
- Grafana Dashboard: Pre-configured dashboard for visualizing network performance
- Multiple Deployment Options: Docker, Kubernetes, systemd, and more
docker run --rm ghcr.io/anonc0der/speedbench:latest \
--url https://example.com/test-file.bin \
--times 5 \
--source "my-server" \
--target "cdn-1"# Build locally
make build-local
# Run
./bin/speedbench --url https://example.com/test-file.bin --times 5- Go 1.25.4 or later (for building from source)
- aria2c (automatically included in Docker image)
- Docker (optional, for containerized usage)
The official Docker image is available on GitHub Container Registry:
docker pull ghcr.io/anonc0der/speedbench:latest# Clone the repository
git clone https://github.com/AnonC0DER/SpeedBench.git
cd SpeedBench
# Build locally
make build-local
# Or build Docker image
make build| Option | Description | Default |
|---|---|---|
--url |
Download URL (required) | - |
--target |
Target name for metrics | unknown |
--source |
Source name for metrics | unknown |
--times |
Number of iterations to run | 3 |
--sleep |
Seconds to sleep after completion | 300 |
--delay |
Seconds to delay between iterations | 0 |
--log-type |
Log type: file or console |
console |
--split |
Number of splits per download | 5 |
--max-connections |
Max connections per server | 1 |
--log-file |
Output log file path | output/aria2c_logs.txt |
--metrics-file |
Output metrics file | output/metrics.statsd |
--statsd-host |
StatsD host (optional) | - |
--statsd-port |
StatsD port | 8125 |
--statsd-protocol |
StatsD protocol: tcp or udp |
udp |
./bin/speedbench --url https://example.com/test-file.bin./bin/speedbench \
--url https://example.com/test-file.bin \
--times 10 \
--delay 5 \
--source "datacenter-1" \
--target "cdn-1" \
--statsd-host statsd.example.com \
--statsd-port 8125./bin/speedbench \
--url https://example.com/test-file.bin \
--times 5 \
--metrics-file /tmp/speedbench-metrics.statsdSee the examples directory for deployment configurations:
- Kubernetes: CronJob examples for scheduled network testing
- Docker Compose: Simple docker-compose setup
- systemd: Service file for Linux systems
- Shell Scripts: Simple bash scripts for automation
SpeedBench exports the following metrics to StatsD:
speedbench.total_iterations: Total number of test iterationsspeedbench.successful_downloads: Number of successful downloadsspeedbench.failed_downloads: Number of failed downloadsspeedbench.success_rate: Success rate percentagespeedbench.speed.avg/min/max/p50/p95/p99/stddev: Download speed statisticsspeedbench.duration.avg/min/max: Download duration statisticsspeedbench.bytes_downloaded: Total bytes downloadedspeedbench.connection.dns_lookup.avg_ms/min_ms/max_ms: DNS lookup timingspeedbench.connection.connect.avg_ms/min_ms/max_ms: TCP connection timingspeedbench.connection.ssl_handshake.avg_ms/min_ms/max_ms: SSL handshake timingspeedbench.connection.total.avg_ms/min_ms/max_ms: Total connection timing
speedbench.iteration.speed: Speed for each iterationspeedbench.iteration.duration: Duration for each iterationspeedbench.iteration.bytes: Bytes downloaded per iterationspeedbench.iteration.connection.*: Connection timings per iteration
The monitoring/statsd_exporter.yml file contains mappings for converting StatsD metrics to Prometheus format. Use this with statsd_exporter to expose metrics to Prometheus.
Import the dashboard from monitoring/dashboard.json into your Grafana instance to visualize network performance metrics.
The dashboard includes:
- Success rate gauges
- Speed statistics (avg, min, max, percentiles)
- Connection timing breakdowns
- Download duration trends
- Success vs failure rates
# Install dependencies
go mod download
# Install pre-commit hooks
pip install pre-commit
pre-commit installThe project uses pre-commit hooks that automatically:
- Format code with
go fmt - Run static analysis with
go vet - Clean up dependencies with
go mod tidy - Check for trailing whitespace and other issues
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with aria2c for download functionality
- Uses StatsD for metrics export
- Compatible with Prometheus via statsd_exporter