Skip to content

Commit 2aa00d5

Browse files
authored
[CI/Build] Pin OpenTelemetry versions and make errors clearer (vllm-project#7266)
[CI/Build] Pin OpenTelemetry versions and make a availability errors clearer (vllm-project#7266)
1 parent c42590f commit 2aa00d5

File tree

4 files changed

+31
-19
lines changed

4 files changed

+31
-19
lines changed

.buildkite/test-pipeline.yaml

+4-4
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@ steps:
111111
commands:
112112
- pytest -v -s metrics
113113
- "pip install \
114-
opentelemetry-sdk \
115-
opentelemetry-api \
116-
opentelemetry-exporter-otlp \
117-
opentelemetry-semantic-conventions-ai"
114+
'opentelemetry-sdk>=1.26.0,<1.27.0' \
115+
'opentelemetry-api>=1.26.0,<1.27.0' \
116+
'opentelemetry-exporter-otlp>=1.26.0,<1.27.0' \
117+
'opentelemetry-semantic-conventions-ai>=0.4.1,<0.5.0'"
118118
- pytest -v -s tracing
119119

120120
##### fast check tests #####

examples/production_monitoring/Otel.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
1. Install OpenTelemetry packages:
44
```
55
pip install \
6-
opentelemetry-sdk \
7-
opentelemetry-api \
8-
opentelemetry-exporter-otlp \
9-
opentelemetry-semantic-conventions-ai
6+
'opentelemetry-sdk>=1.26.0,<1.27.0' \
7+
'opentelemetry-api>=1.26.0,<1.27.0' \
8+
'opentelemetry-exporter-otlp>=1.26.0,<1.27.0' \
9+
'opentelemetry-semantic-conventions-ai>=0.4.1,<0.5.0'
1010
```
1111
1212
1. Start Jaeger in a docker container:

vllm/config.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from vllm.model_executor.layers.quantization import QUANTIZATION_METHODS
1313
from vllm.model_executor.models import ModelRegistry
1414
from vllm.platforms import current_platform
15-
from vllm.tracing import is_otel_installed
15+
from vllm.tracing import is_otel_available, otel_import_error_traceback
1616
from vllm.transformers_utils.config import get_config, get_hf_text_config
1717
from vllm.utils import (STR_NOT_IMPL_ENC_DEC_CUDAGRAPH, GiB_bytes,
1818
cuda_device_count_stateless, get_cpu_memory, is_cpu,
@@ -1721,9 +1721,11 @@ class ObservabilityConfig:
17211721
collect_model_execute_time: bool = False
17221722

17231723
def __post_init__(self):
1724-
if not is_otel_installed() and self.otlp_traces_endpoint is not None:
1725-
raise ValueError("OpenTelemetry packages must be installed before "
1726-
"configuring 'otlp_traces_endpoint'")
1724+
if not is_otel_available() and self.otlp_traces_endpoint is not None:
1725+
raise ValueError(
1726+
"OpenTelemetry is not available. Unable to configure "
1727+
"'otlp_traces_endpoint'. Ensure OpenTelemetry packages are "
1728+
f"installed. Original error:\n{otel_import_error_traceback}")
17271729

17281730
if ((self.collect_model_forward_time
17291731
or self.collect_model_execute_time)

vllm/tracing.py

+17-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88

99
logger = init_logger(__name__)
1010

11-
_is_otel_installed = False
11+
_is_otel_imported = False
12+
otel_import_error_traceback: Optional[str] = None
1213
try:
1314
from opentelemetry.context.context import Context
1415
from opentelemetry.sdk.environment_variables import (
@@ -19,8 +20,14 @@
1920
from opentelemetry.trace import SpanKind, Tracer, set_tracer_provider
2021
from opentelemetry.trace.propagation.tracecontext import (
2122
TraceContextTextMapPropagator)
22-
_is_otel_installed = True
23+
_is_otel_imported = True
2324
except ImportError:
25+
# Capture and format traceback to provide detailed context for the import
26+
# error. Only the string representation of the error is retained to avoid
27+
# memory leaks.
28+
# See https://github.com/vllm-project/vllm/pull/7266#discussion_r1707395458
29+
import traceback
30+
otel_import_error_traceback = traceback.format_exc()
2431

2532
class Context: # type: ignore
2633
pass
@@ -35,14 +42,17 @@ class Tracer: # type: ignore
3542
pass
3643

3744

38-
def is_otel_installed() -> bool:
39-
return _is_otel_installed
45+
def is_otel_available() -> bool:
46+
return _is_otel_imported
4047

4148

4249
def init_tracer(instrumenting_module_name: str,
4350
otlp_traces_endpoint: str) -> Optional[Tracer]:
44-
assert is_otel_installed(), ("OpenTelemetry packages must be installed "
45-
"prior to initializing a tracer")
51+
if not is_otel_available():
52+
raise ValueError(
53+
"OpenTelemetry is not available. Unable to initialize "
54+
"a tracer. Ensure OpenTelemetry packages are installed. "
55+
f"Original error:\n{otel_import_error_traceback}")
4656
trace_provider = TracerProvider()
4757

4858
span_exporter = get_span_exporter(otlp_traces_endpoint)
@@ -70,7 +80,7 @@ def get_span_exporter(endpoint):
7080

7181
def extract_trace_context(
7282
headers: Optional[Mapping[str, str]]) -> Optional[Context]:
73-
if is_otel_installed():
83+
if is_otel_available():
7484
headers = headers or {}
7585
return TraceContextTextMapPropagator().extract(headers)
7686
else:

0 commit comments

Comments
 (0)