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

Incorporate an OTel-wide maturity matrix #290

Merged
merged 6 commits into from
Feb 11, 2020
Merged

Conversation

bhs
Copy link
Contributor

@bhs bhs commented Jan 26, 2020

Per the header comment for the file under review here:

OpenTelemetry is a complex project with many moving parts. Thankfully, we strive to keep those parts loosely coupled where we can (this has been a goal since the very announcement of OpenTelemetry, per this blog post: https://medium.com/opentracing/merging-opentracing-and-opencensus-f0fe9c7ca6f0)

This file describes the structure of the project and its sub-components, definitions of API and stability maturity levels, and finally records the current maturity of each component. We maintain this file as YAML in order to make it easier to automate scripts (e.g., for the website) that present the data to OpenTelemetry end-users.

This PR stems from the most recent technical and governance committee meetings. cc @mtwo who is doing a survey about blockers to a beta release in 5 languages for Kubecon EMEA.

All comments welcome, but especially those about the actual schema (formatting, repo location, naming, etc will be easy to change and I'm very flexible on those fronts!).

Per the header comment for the file under review here:

  OpenTelemetry is a complex project with many moving parts. Thankfully,
  we strive to keep those parts loosely coupled where we can (this has
  been a goal since the very announcement of OpenTelemetry, per this blog
  post: https://medium.com/opentracing/merging-opentracing-and-opencensus-f0fe9c7ca6f0)

  This file describes the structure of the project and its
  sub-components, definitions of API and stability maturity levels, and
  finally records the current maturity of each component. We maintain
  this file as YAML in order to make it easier to automate scripts
  (e.g., for the website) that present the data to OpenTelemetry
  end-users.
add golang status, add additional states.
@lizthegrey
Copy link
Member

Fixed some typoes, updated golang status, added "unimplemented" as a state in addition to "alpha".

we currently do not release major versions on breaking changes while we're in alpha for golang, as a FYI. our goal is to release major/minor versions corresponding to spec major/minor versions rather than incrementing in unpredictable ways that slew from the spec major/minor versions.

Copy link
Contributor Author

@bhs bhs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fixes, Liz!

maturity-matrix.yaml Show resolved Hide resolved
maturity-matrix.yaml Show resolved Hide resolved
@tedsuo
Copy link
Contributor

tedsuo commented Jan 27, 2020

CC @austinlparker

We’ve been trying to track this via github milestones, and automatically scrape that data to update the status page on the website. Would be great if we could continue to have an automated process for keeping the website up to date.

@bhs
Copy link
Contributor Author

bhs commented Jan 27, 2020

@tedsuo @austinlparker yes, agree – I like the idea of using repo metadata (milestones, tags, whatever) to track status. And also agree about the website. My goal with this PR is primarily to debate "the schema" for what we're telling end-users about maturity. If we figure that out, I am personally flexible about the mechanics as long as they allow for automation and don't require some crazy amount of upfront work.

@austinlparker
Copy link
Member

Once we've got the schema sorted out then it should be pretty easy to add some tags or whatever to auto-populate the website.

@lizthegrey
Copy link
Member

Agree, the main change here is moving off of one-dimensional v0.1->v0.4 versioning to tagging each maturity stage per category and project.

- traceSDK
- metricsSDK
- contextSDK
- automaticInstrumentation
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should the integrations and exporters be also tracked? Zipking and Jaeger exporters, integrations like SpringBoot, etc.?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO we should focus solely on SDK/API for trace/metric/context here and allow exporters and integrations to simply reference their stability or maturity against the lower level components.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some integrations and exporters are the baseline for the stability as you cannot use API/SDK without ability to export it. Similar for integrations. I'm not sure how automaticInstrumentation here is different than integrations?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, that's a good point, although I don't know how to square it. Automatic instrumentation does seem to require integrations.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1, I think that end-users expect at least some of these (OT exporter, Jaeger exporter, Prometheus exporter, basic HTTP integrations) to be tracked

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not want to suggest that we try to maintain a full compatibility matrix with framework-level things like Spring. The "registry" seems like the right place to track that sort of thing.

By "automaticInstrumentation", I meant specifically the idea of "no-code" (literally) installation of the OpenTelemetry instrumentation. This is an important requirement for many brownfield services that are no longer actively maintained but nevertheless participate in transactions. As such, I would not like to extend the definition to "1-line code changes" that nevertheless require recompilation.

@SergeyKanzhelev re your comment:

some integrations and exporters are the baseline for the stability

I disagree – they may be the baseline for "usefulness", but not for stability.

Given the possibly large diversity of exporters in the future, I would personally prefer that we:

  1. Adopt the API and production maturity levels for exporters, and
  2. Track exporter maturity via the registry

Remember that we're not debating how this information is displayed on a website at the moment, we're just debating what should be considered "internal" to OpenTelemetry rather than a plugin/etc. The website can absolutely bring in the maturity levels for popular exporters in designated languages.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to avoid situation when OT is only usable with the specific vendor exporter. This is why I think we should declare some baseline exporters here. It may be minimum functionality and not scalable, but must be reliable and stable.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder about the 'diversity of exporters' -- Yuri could probably weigh in here, but I suspect that many "vendors", both OSS and commercial, would like to simply accept OTel data format natively and thus not require an exporter at all.

With that in mind, this feels like a transient issue; Yes, there'll be maturity levels for exporters but over time those exporters simply won't matter since your backend will accept the data with no translation.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suspect that many "vendors", both OSS and commercial, would like to simply accept OTel data format natively and thus not require an exporter at all.

Not immediately. It may take a while

With that in mind, this feels like a transient issue; Yes, there'll be maturity levels for exporters but over time those exporters simply won't matter since your backend will accept the data with no translation.

Yes, but if we intent to track progress towards 1.0 I'd suggest to include tracking of this transient issue

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@SergeyKanzhelev I'm going to continue to push back on this... if I want to use Jaeger's exporter and it's the only thing that's mature for my given language, IMO that's fine. Now, whether the SIGs would feel comfortable marking their APIs as "stable" (or even "beta") with zero or one exporter implemented is a different question.

golang:
traceAPI:
api: beta
production: beta
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest to include the link to the issues query on GitHub showing what's left for this area. It may be an optional attribute

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a little hesitant to do this since in the early stages, that list will have lots of errors of omission and could lead to a false sense of security...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we declare it as optional so I can use it for .NET?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO it'd be good to have a URL field in the schema that points to the repo.

@bhs
Copy link
Contributor Author

bhs commented Feb 6, 2020

Hi folks... I've updated the PR here in two ways:

  • I removed the auto-instrumentation stuff until it's more fully-baked (it can go in the brand-new registry in the meantime)
  • I added a blurb about "beta" APIs requiring multiple impls, with at least one being a major OSS project

Can reviewers either approve or request further changes? I can then fill in the gaps in other languages, potentially as follow-on PRs. cc @lizthegrey @SergeyKanzhelev @austinlparker @mtwo @tedsuo (who've all provided comments earlier – thanks).

@bhs
Copy link
Contributor Author

bhs commented Feb 9, 2020

One more ping on this – still looking for an approval from an approver!

@bhs
Copy link
Contributor Author

bhs commented Feb 9, 2020

@lizthegrey thanks.

All: I'll merge this tomorrow or Tuesday if there are no further concerns.

As mentioned on the most recent Gov Committee call, I'll also make a very crude sketch of how we could represent this on the marketing site and submit an issue to track that. (I don't think I'll have the cycles to actually implement the marketing site piece, though)

(edit: here's that sketch for the otel.io website: open-telemetry/opentelemetry.io#109)

Copy link
Member

@mtwo mtwo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @bhs!

@bhs
Copy link
Contributor Author

bhs commented Feb 11, 2020

Thanks, all... Happy to take PRs on this file as we bring it into sync with the various per-language SIGs that are presently left as TODOs, etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants