metrics: allow extra labels on HTTP request/response Prometheus metrics (#31530)

This commit is contained in:
Sam Shleifer
2026-07-19 00:57:26 +08:00
committed by GitHub
parent 5609f8e509
commit d86ae51fcf
+15 -7
View File
@@ -2329,25 +2329,30 @@ class RefCountedGauge:
self._gauge.dec() self._gauge.dec()
def add_prometheus_track_response_middleware(app): def add_prometheus_track_response_middleware(
app, extra_labels: Optional[Dict[str, str]] = None
):
from prometheus_client import Counter, Gauge from prometheus_client import Counter, Gauge
extra_labels = extra_labels or {}
extra_label_names = list(extra_labels.keys())
http_request_counter = Counter( http_request_counter = Counter(
name="sglang:http_requests_total", name="sglang:http_requests_total",
documentation="Total number of HTTP requests by endpoint and method", documentation="Total number of HTTP requests by endpoint and method",
labelnames=["endpoint", "method"], labelnames=extra_label_names + ["endpoint", "method"],
) )
http_response_counter = Counter( http_response_counter = Counter(
name="sglang:http_responses_total", name="sglang:http_responses_total",
documentation="Total number of HTTP responses by endpoint and status code", documentation="Total number of HTTP responses by endpoint and status code",
labelnames=["endpoint", "status_code", "method"], labelnames=extra_label_names + ["endpoint", "status_code", "method"],
) )
http_requests_active = Gauge( http_requests_active = Gauge(
name="sglang:http_requests_active", name="sglang:http_requests_active",
documentation="Number of currently active HTTP requests", documentation="Number of currently active HTTP requests",
labelnames=["endpoint", "method"], labelnames=extra_label_names + ["endpoint", "method"],
multiprocess_mode="livesum", multiprocess_mode="livesum",
) )
@@ -2373,8 +2378,8 @@ def add_prometheus_track_response_middleware(app):
method = request.method method = request.method
routing_key = request.headers.get("x-smg-routing-key") routing_key = request.headers.get("x-smg-routing-key")
http_request_counter.labels(endpoint=path, method=method).inc() http_request_counter.labels(**extra_labels, endpoint=path, method=method).inc()
http_requests_active.labels(endpoint=path, method=method).inc() http_requests_active.labels(**extra_labels, endpoint=path, method=method).inc()
if routing_key: if routing_key:
routing_keys_active.inc(routing_key) routing_keys_active.inc(routing_key)
@@ -2382,6 +2387,7 @@ def add_prometheus_track_response_middleware(app):
response = await call_next(request) response = await call_next(request)
http_response_counter.labels( http_response_counter.labels(
**extra_labels,
endpoint=path, endpoint=path,
method=method, method=method,
status_code=str(response.status_code), status_code=str(response.status_code),
@@ -2389,7 +2395,9 @@ def add_prometheus_track_response_middleware(app):
return response return response
finally: finally:
http_requests_active.labels(endpoint=path, method=method).dec() http_requests_active.labels(
**extra_labels, endpoint=path, method=method
).dec()
if routing_key: if routing_key:
routing_keys_active.dec(routing_key) routing_keys_active.dec(routing_key)