Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/references/production_request_trace.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This section explains how to configure the request tracing and export the trace
pip install -e "python[tracing]"

# or manually install the dependencies using pip
pip install opentelemetry-sdk opentelemetry-api opentelemetry-exporter-otlp opentelemetry-exporter-otlp-proto-grpc
pip install opentelemetry-sdk opentelemetry-api opentelemetry-exporter-otlp opentelemetry-exporter-otlp-proto-grpc opentelemetry-instrumentation-fastapi
```

2. launch opentelemetry collector and jaeger
Expand Down
1 change: 1 addition & 0 deletions python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ tracing = [
"opentelemetry-api",
"opentelemetry-exporter-otlp",
"opentelemetry-exporter-otlp-proto-grpc",
"opentelemetry-instrumentation-fastapi",
]
all = ["sglang[test]", "sglang[decord]"]
blackwell = ["sglang[test]", "sglang[decord]"]
Expand Down
9 changes: 8 additions & 1 deletion python/sglang/srt/entrypoints/http_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@
from http import HTTPStatus
from typing import Any, AsyncIterator, Callable, Dict, List, Optional, Union

from sglang.srt.tracing.trace import process_tracing_init, trace_set_thread_info
from sglang.srt.tracing.trace import (
instrument_fastapi,
process_tracing_init,
trace_set_thread_info,
)

# Fix a bug of Python threading
setattr(threading, "_register_atexit", lambda *args, **kwargs: None)
Expand Down Expand Up @@ -1183,6 +1187,9 @@ async def vertex_generate(vertex_req: VertexGenerateReqInput, raw_request: Reque
return ORJSONResponse({"predictions": ret})


instrument_fastapi(app)


def _update_weight_version_if_provided(weight_version: Optional[str]) -> None:
"""Update weight version if provided."""
if weight_version is not None:
Expand Down
10 changes: 10 additions & 0 deletions python/sglang/srt/tracing/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@
from dataclasses import dataclass
from typing import Any, Dict, List, Optional

from fastapi import FastAPI

logger = logging.getLogger(__name__)
opentelemetry_imported = False
tracing_enabled = False

try:
from opentelemetry import context, propagate, trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.sdk.trace import TracerProvider, id_generator
from opentelemetry.sdk.trace.export import BatchSpanProcessor
Expand Down Expand Up @@ -550,3 +553,10 @@ def trace_slice_add_attr(rid: str, attrs: Dict[str, Any]):

slice_info = thread_context.cur_slice_stack[-1]
slice_info.span.set_attributes(attrs)


def instrument_fastapi(app: FastAPI):
if not opentelemetry_imported:
return

FastAPIInstrumentor.instrument_app(app)
Loading