Found while reviewing #335.
In OTLP mode (PYROSCOPE_FORMAT=otlp), PYROSCOPE_APPLICATION_NAME, static labels, PYROSCOPE_LABELS, and dynamic labels from Pyroscope.LabelsWrapper are all silently ignored. PyroscopeExporter sends the raw async-profiler OTLP payload, which does not include service.name, so profiles land under service_name="unknown_service". This is currently acknowledged only in a comment inside the integration test.
Suggested improvements:
- Document this limitation in the README's OTLP section.
- Log a warning at startup when an application name or labels are configured together with
PYROSCOPE_FORMAT=otlp, so users aren't left wondering where their data went.
- Relatedly,
AsyncProfilerDelegate.dumpImpl still calls Pyroscope.LabelsWrapper.dump() in OTLP mode and the result is discarded. If draining the label state is intentional, fine; otherwise it is wasted work.
cc @arnabnandy7
Found while reviewing #335.
In OTLP mode (
PYROSCOPE_FORMAT=otlp),PYROSCOPE_APPLICATION_NAME, static labels,PYROSCOPE_LABELS, and dynamic labels fromPyroscope.LabelsWrapperare all silently ignored.PyroscopeExportersends the raw async-profiler OTLP payload, which does not includeservice.name, so profiles land underservice_name="unknown_service". This is currently acknowledged only in a comment inside the integration test.Suggested improvements:
PYROSCOPE_FORMAT=otlp, so users aren't left wondering where their data went.AsyncProfilerDelegate.dumpImplstill callsPyroscope.LabelsWrapper.dump()in OTLP mode and the result is discarded. If draining the label state is intentional, fine; otherwise it is wasted work.cc @arnabnandy7