Support HTTP response status code prometheus metrics (#14710)

This commit is contained in:
fzyzcjy
2025-12-10 22:28:57 +08:00
committed by GitHub
parent d7f6320bb8
commit 5eccaf7737
2 changed files with 29 additions and 0 deletions

View File

@@ -122,6 +122,7 @@ from sglang.srt.server_args import PortArgs, ServerArgs
from sglang.srt.utils import (
add_api_key_middleware,
add_prometheus_middleware,
add_prometheus_track_response_middleware,
delete_directory,
get_bool_env_var,
kill_process_tree,
@@ -1397,6 +1398,9 @@ def launch_server(
)
)
if server_args.enable_metrics:
add_prometheus_track_response_middleware(app)
# Pass additional arguments to the lifespan function.
# They will be used for additional initialization setups.
if server_args.tokenizer_worker_num == 1:

View File

@@ -1502,6 +1502,31 @@ def add_prometheus_middleware(app):
app.routes.append(metrics_route)
def add_prometheus_track_response_middleware(app):
from prometheus_client import Counter
http_response_status_counter = Counter(
name="sglang:http_responses_total",
documentation="Total number of HTTP responses by endpoint and status code",
labelnames=["endpoint", "status_code", "method"],
)
@app.middleware("http")
async def track_http_status_code(request, call_next):
response = await call_next(request)
route = request.scope.get("route")
endpoint = route.path if route else "Unknown"
http_response_status_counter.labels(
endpoint=endpoint,
status_code=str(response.status_code),
method=request.method,
).inc()
return response
def bind_port(port):
"""Bind to a specific port, assuming it's available."""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)