Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TraceZ page in opentelemetry-cpp #166

Closed
liadavid opened this issue Jul 9, 2020 · 7 comments
Closed

TraceZ page in opentelemetry-cpp #166

liadavid opened this issue Jul 9, 2020 · 7 comments
Labels
do-not-stale enhancement New feature or request

Comments

@liadavid
Copy link

liadavid commented Jul 9, 2020

Is your feature request related to a problem?

ZPages are web-pages that display general and debugging information on processes. Tracez provides details about the trace spans in the process. Currently there are few WIP projects to add zPages to OpenTelemetry, following the zPages spec/general direction.
We would like to add a Tracez zPage to the OpenTelemetry-CPP package.

Describe the solution you'd like

The tracez page should include:

  • Aggregated statistics about all current Spans.
  • Span samples that provide additional attributes and are chosen based on errors/latency.

Scope and requirements:

  • Render a Tracez page in-proc.
  • Integrate with the current C++ SDK (Specifically through TracerProvider).
  • Code is added under 'ext/'.

High level design
TraceZ architecture is divided into the following components:

  • TraceZSpanProcessor design - is responsible for extracting the spans from the process and propagate them to TracezDataAggregator. Implements SpanProcessor interface.
  • TracezDataAggregator design - this component performs the needed aggregations on the data propagated by the TraceZSpanProcessor. Possible aggregations are: distribution of latencies for each span, number of spans with errors vs. total count of spans (per unit of time). The aggregator will also be responsible for storing additional attributes for a few Span samples.
  • Data rendering logic design(draft) - provides the statistics and aggregations to the developer.

Describe alternatives you've considered

  • Integrate TraceZ directly with API layer instead of SDK.
  • Out of proc data rendering logic.

Both alternatives are good extensions for the MVP defined above.
Another possible extension is to add a Tracez Sampler component that will enable the developer to determine the sampling ratio of traces shown/aggregated in TraceZ.

Additional context

README

Open Questions

  • SpanProcessor interface accepts Recordable. Following the interface, should TraceZSpanProcessor accept Recordable as well? If yes, can we add getter functions to the Recordable interface?
@pyohannes
Copy link
Contributor

SpanProcessor interface accepts Recordable. Following the interface, should TraceZSpanProcessor accept Recordable as well? If yes, can we add getter functions to the Recordable interface?

No, we don't want to add getters to the Recordable interface and force every vendor to implement it. You can either:

  • Use the existing SpanData. It derives from Recordable and has getters. You can then cast from Recordable to SpanData in the processor.
  • Implement your own class deriving from Recordable and implementing getters. You can then cast from Recordable to your derived class in the processor.

@pyohannes pyohannes added the enhancement New feature or request label Jul 9, 2020
@liadavid liadavid closed this as completed Jul 9, 2020
@liadavid
Copy link
Author

liadavid commented Jul 9, 2020

SpanProcessor interface accepts Recordable. Following the interface, should TraceZSpanProcessor accept Recordable as well? If yes, can we add getter functions to the Recordable interface?

No, we don't want to add getters to the Recordable interface and force every vendor to implement it. You can either:

  • Use the existing SpanData. It derives from Recordable and has getters. You can then cast from Recordable to SpanData in the processor.
  • Implement your own class deriving from Recordable and implementing getters. You can then cast from Recordable to your derived class in the processor.

Thanks Johannes for the explanation regarding Recordable.

@liadavid liadavid reopened this Jul 9, 2020
@github-actions
Copy link

github-actions bot commented Dec 3, 2021

This issue was marked as stale due to lack of activity. It will be closed in 7 days if no furthur activity occurs.

@github-actions github-actions bot added the Stale label Dec 3, 2021
@github-actions
Copy link

Closed as inactive. Feel free to reopen if this is still an issue.

@lalitb lalitb reopened this Dec 11, 2021
@lalitb lalitb added do-not-stale and removed Stale labels Dec 11, 2021
@github-actions
Copy link

github-actions bot commented Feb 9, 2022

This issue was marked as stale due to lack of activity. It will be closed in 7 days if no furthur activity occurs.

@github-actions github-actions bot added the Stale label Feb 9, 2022
@github-actions
Copy link

Closed as inactive. Feel free to reopen if this is still an issue.

@marcalff
Copy link
Member

marcalff commented Dec 5, 2023

Closing, as zpages is removed, see #2292

@marcalff marcalff closed this as not planned Won't fix, can't repro, duplicate, stale Dec 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
do-not-stale enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants