API Bandwidth & Throughput Dashboard
Overview
The API Bandwidth & Throughput Dashboard provides comprehensive monitoring of data transfer patterns for your API. This dashboard focuses on request and response payload sizes, bandwidth usage, and throughput metrics. It helps identify endpoints with large payloads, track bandwidth consumption, and understand data transfer patterns across your API infrastructure.
Key Features
- Bandwidth Monitoring: Track total bandwidth usage (request + response bytes)
- Payload Size Analysis: Monitor request and response sizes with percentiles
- Endpoint-Level Insights: Identify which endpoints transfer the most data
- Method Analysis: Track bandwidth usage by HTTP method
- Throughput Metrics: Bytes per second for requests and responses
- Real-time Monitoring: Live metrics updated continuously from Prometheus
Dashboard Structure
The dashboard is organized into two main sections:
- Summary Stats - Key bandwidth metrics at a glance (4 stat panels)
- Bandwidth & Throughput - Detailed time-series analysis (5 time-series panels)
Summary Stats
The Summary Stats section provides four critical bandwidth metrics for quick assessment.

Total Bandwidth
Description: Total bandwidth usage combining both request and response bytes per second.
Metrics:
- Total bytes per second (Bps)
- Sum of request bandwidth + response bandwidth
Query:
sum(rate(http_server_request_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m])) + sum(rate(http_server_response_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m]))
Use Cases:
- Monitor total bandwidth consumption
- Capacity planning
Interpretation:
- Total data transfer rate across all endpoints
Avg Request Size
Description: Average size of incoming request payloads in bytes.
Metrics:
- Mean request size (bytes)
- Calculated across all requests
Query:
sum(rate(http_server_request_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m])) / sum(rate(http_server_request_size_bytes_count{job="otel-collector", namespace="dynamoai"}[1m]))
Use Cases:
- Identify endpoints with large request payloads
- Monitor request size patterns
Interpretation:
- Average incoming payload size
Avg Response Size
Description: Average size of outgoing response payloads in bytes.
Metrics:
- Mean response size (bytes)
- Calculated across all responses
Query:
sum(rate(http_server_response_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m])) / sum(rate(http_server_response_size_count{job="otel-collector", namespace="dynamoai"}[1m]))
Use Cases:
- Identify endpoints with large response payloads
- Monitor response size patterns
Interpretation:
- Average outgoing payload size
Request Bandwidth
Description: Total incoming bandwidth (request bytes per second).
Metrics:
- Request bytes per second (Bps)
- Incoming data transfer rate
Query:
sum(rate(http_server_request_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m]))
Use Cases:
- Monitor incoming data transfer rate
- Capacity planning
Interpretation:
- Rate of incoming data
Bandwidth & Throughput
This section provides detailed time-series analysis of bandwidth usage and payload sizes.

Total Bandwidth Usage
Description: Stacked time-series graph showing both request and response bandwidth over time.
Metrics:
- Request Bandwidth: Incoming bytes per second
- Response Bandwidth: Outgoing bytes per second
- Total: Sum of both (visualized as stacked)
Queries:
# Request Bandwidth
sum(rate(http_server_request_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m]))
# Response Bandwidth
sum(rate(http_server_response_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m]))
Use Cases:
- Monitor bandwidth usage over time
- Identify bandwidth spikes
- Capacity planning
Visualization: Stacked line graph with two series (Request and Response)
Interpretation:
- Stack height shows total bandwidth (request + response)
Average Payload Sizes
Description: Time-series graph showing average request and response payload sizes over time.
Metrics:
- Avg Request Size: Mean incoming payload size (bytes)
- Avg Response Size: Mean outgoing payload size (bytes)
Queries:
# Avg Request Size
sum(rate(http_server_request_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m])) / sum(rate(http_server_request_size_bytes_count{job="otel-collector", namespace="dynamoai"}[1m]))
# Avg Response Size
sum(rate(http_server_response_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m])) / sum(rate(http_server_response_size_bytes_count{job="otel-collector", namespace="dynamoai"}[1m]))
Use Cases:
- Track payload size trends
- Compare request vs response sizes
- Optimization targeting
Visualization: Two-line graph with request and response sizes
Interpretation:
- Payload size trends over time
Payload Size Percentiles (Request & Response)
Description: Comprehensive payload size distribution showing multiple percentiles for both requests and responses.
Metrics:
- Request P50, P90, P95, P99: Percentiles for request payload sizes
- Response P50, P90, P95, P99: Percentiles for response payload sizes
Queries:
# Request Percentiles
histogram_quantile(0.50, sum by(le) (rate(http_server_request_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
histogram_quantile(0.90, sum by(le) (rate(http_server_request_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
histogram_quantile(0.95, sum by(le) (rate(http_server_request_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
histogram_quantile(0.99, sum by(le) (rate(http_server_request_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
# Response Percentiles
histogram_quantile(0.50, sum by(le) (rate(http_server_response_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
histogram_quantile(0.90, sum by(le) (rate(http_server_response_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
histogram_quantile(0.95, sum by(le) (rate(http_server_response_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
histogram_quantile(0.99, sum by(le) (rate(http_server_response_size_bytes_bucket{job="otel-collector", namespace="dynamoai"}[5m])))
Use Cases:
- Identify tail payload sizes (P90, P95, P99)
- Compare request vs response distributions
Visualization: Multi-line graph with eight series (4 for requests, 4 for responses)
Interpretation:
- P50: median, P90/P95/P99: tail payload sizes
Bandwidth by Endpoint
Description: Total bandwidth usage (request + response) broken down by individual API endpoints.
Metrics:
- Total bandwidth per endpoint (bytes per second)
- Sum of request and response bandwidth for each path
Query:
sum by (path) (rate(http_server_request_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m]) + rate(http_server_response_size_bytes_sum{job="otel-collector", namespace="dynamoai"}[1m]))
Use Cases:
- Identify high-bandwidth endpoints
- Prioritize optimization efforts
Visualization: Multi-line graph with one line per endpoint, sorted by max bandwidth
Interpretation:
- Total bandwidth per endpoint (request + response)
Technical Details
Metric Details
All metrics are collected via OpenTelemetry instrumentation using nestjs-otel:
Histogram Metrics (for payload sizes):
http_server_request_size_bytes_sum: Total request bytes sumhttp_server_request_size_bytes_count: Total request counthttp_server_request_size_bytes_bucket: Histogram buckets for percentileshttp_server_response_size_bytes_sum: Total response bytes sumhttp_server_response_size_bytes_count: Total response counthttp_server_response_size_bytes_bucket: Histogram buckets for percentiles
Labels Available:
method: HTTP method (GET, POST, PUT, DELETE, etc.)path: API endpoint pathstatus: HTTP status codenamespace: Kubernetes namespace (dynamoai)job: Prometheus job label (otel-collector)
Last Updated: [24/11/2025]