Switch the otlp profiles root element to be ProfilesData#648
Switch the otlp profiles root element to be ProfilesData#648dmathieu wants to merge 1 commit intoopen-telemetry:mainfrom
Conversation
|
This deviates from how the other signals work. To make it consistent we could duplicate all tables into ExportProfilesServiceRequest but that seems too much duplication. I am not sure if there is a better way, so probably we should accept that ExportProfilesServiceRequest is not going to be consistent with other Request messages. |
|
Would it make more sense to keep the |
|
We made |
|
We can move the lookup tables into |
| // The ProfilesData. | ||
| // For data coming from a single resource this object will typically contain | ||
| // one element resource profiles. Intermediary nodes (such as OpenTelemetry | ||
| // Collector) that receive data from multiple origins typically batch the | ||
| // data before forwarding further and in that case there will be multiple | ||
| // resources. |
There was a problem hiding this comment.
Can we add some of text from the proto here (in light of recent changes):
| // The ProfilesData. | |
| // For data coming from a single resource this object will typically contain | |
| // one element resource profiles. Intermediary nodes (such as OpenTelemetry | |
| // Collector) that receive data from multiple origins typically batch the | |
| // data before forwarding further and in that case there will be multiple | |
| // resources. | |
| // The ProfilesData which contains an array of ResourceProfiles. | |
| // For data coming from an SDK profiler, this array will typically contain one | |
| // element. Host-level profilers will usually create one ResourceProfile per | |
| // container, as well as one additional ResourceProfile grouping all samples | |
| // from non-containerized processes. Intermediary nodes (such as OpenTelemetry | |
| // Collector) that receive data from multiple origins typically batch the | |
| // data before forwarding further and in that case there will also be multiple | |
| // ResourceProfiles. |
Moving the lookup tables into It looks like the current design constraints are:
The options appear to be:
|
|
I'm inclined towards Alexey's #3 option... Whilst I think we have good reasons for wanting profiles to deviate from the way other signal types work, I also think there are reusable patterns in our work that may flow back into future refinement of those older signal types or development of new ones. I'd like to find a clean way to express a pattern for more portability. For example Any signal which may benefit from the space savings of shared reference data may define a signal-specific bundle of lookup tables as a message and if desired retrofit it in a backwards compatible manner to its existing Treating the reference tables as a separate building block may also allow for more abstract handling in tools or pipelines that wish to e.g. reduce a stream of (tables,datapoints),(tables,datapoints),... tuples by merging the tables and recomputing-in-place the datapoints to point to the unified tables, which seems likely to be a common and desirable space saving task, particularly for back-end ingest. Scope creep is a thing, but framing the change thus as an optional, flexible and compatible space saving addition to the existing Data/ExportRequest structures rather than a redefinition/repurposing/(polluting?) of them is perhaps a more interesting way of considering the proposal, particularly at TC level. |
Pulling out all lookup tables into a separate message makes sense. As a naming-is-hard note: the proposal uses both "reference" and "lookup" terms, we should pick one and standardize on it across all signals. I think "reference" has too many other meanings, something like "lookup" or "dictionary" could be cleaner. But naming is hard of course. |
+1. |
|
This is superseded by #650. |
The OTLP profiles endpoint takes a
ResourceProfilesas its root slice. However, the data model wants aProfilesData.See https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/profiles/v1development/profiles.proto#L46-L66
This was unseen until now because ProfilesData only held ResourceProfiles.
But now that we have the various index maps in there, we need to handle this properly.