{"record":{"id":"536e9ae9e917cadb","repo":"vllm-project/vllm","slug":"collect-detailed-traces-requires-otlp-traces-en","errorCode":null,"errorMessage":"collect_detailed_traces requires `--otlp-traces-endpoint` to be set.","messagePattern":"collect_detailed_traces requires `--otlp-traces-endpoint` to be set\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"vllm/config/observability.py","lineNumber":156,"sourceCode":"                    f\"installed. Original error:\\n{otel_import_error_traceback}\"\n                )\n        return value\n\n    @field_validator(\"collect_detailed_traces\")\n    @classmethod\n    def _validate_collect_detailed_traces(\n        cls, value: list[DetailedTraceModules] | None\n    ) -> list[DetailedTraceModules] | None:\n        \"\"\"Handle the legacy case where users might provide a comma-separated\n        string instead of a list of strings.\"\"\"\n        if value is not None and len(value) == 1 and \",\" in value[0]:\n            value = cast(list[DetailedTraceModules], value[0].split(\",\"))\n        return value\n\n    @model_validator(mode=\"after\")\n    def _validate_tracing_config(self):\n        if self.collect_detailed_traces and not self.otlp_traces_endpoint:\n            raise ValueError(\n                \"collect_detailed_traces requires `--otlp-traces-endpoint` to be set.\"\n            )\n        return self\n","sourceCodeStart":138,"sourceCodeEnd":160,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/vllm/config/observability.py#L138-L160","documentation":"A model validator on ObservabilityConfig requires otlp_traces_endpoint to be set whenever collect_detailed_traces is non-empty. Detailed tracing (per-module latency instrumentation) is exported through OTLP, so requesting it without an endpoint has nowhere to send data and is rejected.","triggerScenarios":"Passing --collect-detailed-traces model,worker,framework (or the legacy comma-string form) without --otlp-traces-endpoint; programmatically ObservabilityConfig(collect_detailed_traces=[\"model\"]) with no endpoint.","commonSituations":"Copy-pasting a tracing section from docs but trimming 'unneeded' OTLP flags; enabling detailed traces for local debugging without standing up a collector.","solutions":["Set an OTLP endpoint: --otlp-traces-endpoint http://localhost:4317 (or your collector's URL).","If you do not have a collector, remove --collect-detailed-traces entirely.","Ensure the OTel packages are installed too, or error 268 fires next."],"exampleFix":"# before\nvllm serve model --collect-detailed-traces model\n\n# after\nvllm serve model --otlp-traces-endpoint http://localhost:4317 --collect-detailed-traces model","handlingStrategy":"validation","validationCode":"def check_tracing_pair(collect: list[str] | None, endpoint: str | None) -> None:\n    if collect and not endpoint:\n        raise SystemExit(\"--collect-detailed-traces requires --otlp-traces-endpoint\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ship --otlp-traces-endpoint and --collect-detailed-traces as one inseparable flag group in templates.","Local profiling without a collector: use VLLM_LOGGING_LEVEL / other debug knobs instead of detailed traces."],"tags":["vllm","config","observability","tracing","validation"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}