Support HTTP response status code prometheus metrics (#14710)
This commit is contained in:
@@ -122,6 +122,7 @@ from sglang.srt.server_args import PortArgs, ServerArgs
|
|||||||
from sglang.srt.utils import (
|
from sglang.srt.utils import (
|
||||||
add_api_key_middleware,
|
add_api_key_middleware,
|
||||||
add_prometheus_middleware,
|
add_prometheus_middleware,
|
||||||
|
add_prometheus_track_response_middleware,
|
||||||
delete_directory,
|
delete_directory,
|
||||||
get_bool_env_var,
|
get_bool_env_var,
|
||||||
kill_process_tree,
|
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.
|
# Pass additional arguments to the lifespan function.
|
||||||
# They will be used for additional initialization setups.
|
# They will be used for additional initialization setups.
|
||||||
if server_args.tokenizer_worker_num == 1:
|
if server_args.tokenizer_worker_num == 1:
|
||||||
|
|||||||
@@ -1502,6 +1502,31 @@ def add_prometheus_middleware(app):
|
|||||||
app.routes.append(metrics_route)
|
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):
|
def bind_port(port):
|
||||||
"""Bind to a specific port, assuming it's available."""
|
"""Bind to a specific port, assuming it's available."""
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
|||||||
Reference in New Issue
Block a user