-
-
Notifications
You must be signed in to change notification settings - Fork 18
Netzbremse Sidecar
Netzbremse is a campaign by AKVorrat/Epicenter.Works that measures peering bottlenecks at German ISPs. Their headless measurement tool runs automated speed tests through Cloudflare endpoints to detect artificial throttling at ISP peering points.
While DOCSight does not currently have a dedicated netzbremse module, running the netzbremse container alongside DOCSight gives you an additional data source for documenting peering issues -- complementing DOCSight's DOCSIS signal monitoring and Speedtest Tracker integration.
Note: Netzbremse currently focuses on Deutsche Telekom peering. Vodafone support has been requested but is not yet available.
Netzbremse tests download/upload speed, latency, jitter, and loaded latency through multiple Cloudflare endpoints. This specifically measures peering performance -- a different layer than what Speedtest Tracker or DOCSight's DOCSIS monitoring covers:
| Tool | What it measures |
|---|---|
| DOCSight | Physical layer -- DOCSIS signal quality (power, SNR, errors) |
| Speedtest Tracker | General speed -- nearest Ookla server |
| Netzbremse | Peering performance -- Cloudflare endpoints across ISP boundaries |
| Connection Monitor | Latency/loss -- continuous ICMP/TCP probing |
Add the netzbremse container to your existing docker-compose.yml:
services:
# ... your existing docsight service ...
netzbremse:
image: ghcr.io/akvorrat/netzbremse-measurement:latest
container_name: netzbremse
restart: unless-stopped
environment:
NB_SPEEDTEST_ACCEPT_POLICY: "true"
NB_SPEEDTEST_INTERVAL: "21600" # Every 6 hours (recommended)
NB_SPEEDTEST_JSON_OUT_DIR: "./json-results"
volumes:
- ./netzbremse-results:/app/json-results
deploy:
resources:
limits:
memory: 1G
cpus: "1"You must read the privacy policy at netzbremse.de/speed and the Cloudflare terms before setting NB_SPEEDTEST_ACCEPT_POLICY: "true".
docker compose up -dView results:
docker compose logs -f netzbremse| Variable | Default | Description |
|---|---|---|
NB_SPEEDTEST_ACCEPT_POLICY |
- |
Required. Set to "true" after reading the privacy policy. |
NB_SPEEDTEST_INTERVAL |
3600 (1h) |
Seconds between tests. See bandwidth note below. |
NB_SPEEDTEST_TIMEOUT |
3600 |
Max duration per test in seconds. |
NB_SPEEDTEST_RETRY_INTERVAL |
900 (15min) |
Delay between retries after failures. |
NB_SPEEDTEST_RETRY_COUNT |
3 |
Max consecutive failures before exit. |
NB_SPEEDTEST_JSON_OUT_DIR |
- | Directory for JSON result files. |
NB_SPEEDTEST_INTERVAL=0 |
- | Oneshot mode: run once and exit. |
Each netzbremse test run uses 500-800 MB of bandwidth (headless Chromium, multi-endpoint). At the default 1-hour interval, that is 12-19 GB/day.
Recommended intervals:
| Interval | Daily traffic | Use case |
|---|---|---|
| 1 hour (default) | ~12-19 GB | Maximum data points, metered connections beware |
| 6 hours (recommended) | ~2-3 GB | Good balance for long-term peering trends |
| 12 hours | ~1-1.5 GB | Minimal footprint |
| 24 hours | ~0.5-0.8 GB | Daily snapshot only |
If you also run Speedtest Tracker, keep total bandwidth in mind. Netzbremse measures peering trends over weeks/months -- frequent tests are less important than consistency.
Netzbremse writes JSON result files to the configured output directory. You can view these with:
The netzbremse-dashboard by @lwndp provides a Streamlit-based visualization. Add to your compose setup:
netzbremse-dashboard:
image: ghcr.io/lwndp/netzbremse-dashboard:latest
container_name: netzbremse-dashboard
restart: unless-stopped
environment:
REFRESH_INTERVAL_SECONDS: 3600
volumes:
- ./netzbremse-results:/data:ro
ports:
- "8501:8501"
deploy:
resources:
limits:
memory: 256M
cpus: "0.5"Dashboard available at http://<your-host>:8501.
Each result file contains:
{
"sessionID": "...",
"endpoint": "https://custom-t2.speed.cloudflare.com",
"success": true,
"result": {
"download": 88206020,
"upload": 11636039,
"latency": 49.8,
"jitter": 2.3,
"downLoadedLatency": 62.5,
"downLoadedJitter": 3.1,
"upLoadedLatency": 45.2,
"upLoadedJitter": 1.8
}
}Download/upload values are in bytes/second (divide by 1,000,000 for Mbps).
If your DOCSight DOCSIS signals look healthy but netzbremse shows speed degradation to Cloudflare, that is evidence of a peering problem -- not a last-mile issue. This distinction is critical for ISP complaints and BNetzA filings:
- DOCSIS signals OK + Speedtest OK + Netzbremse slow = Peering bottleneck
- DOCSIS signals OK + Speedtest slow + Netzbremse slow = General ISP congestion
- DOCSIS signals bad + everything slow = Last-mile problem (your connection)
Home | Quick Start | Configuration | API Reference | GitHub
- Quick Start
- Installation
- Running without Docker
- Podman Quadlet
- Configuration
- Reverse Proxy
- Example Compose Stacks
- Dashboard
- Connection Monitor
- Signal Trends
- Before/After Comparison
- Channel Timeline & Compare
- Event Log
- Smart Capture
- Gaming Quality Index
- Modulation Performance
- Cable Segment Utilization
- In-App Glossary
- Speedtest Tracker
- BNetzA Breitbandmessung
- ThinkBroadband BQM
- Smokeping
- Weather
- Netzbremse (Peering)
- Home Assistant (MQTT)
- Prometheus Metrics