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

Consideration when using OTel SDK (and maybe collector) with non-OTLP backend #823

Open
anuraaga opened this issue Aug 18, 2020 · 6 comments
Labels
area:sdk Related to the SDK release:after-ga Not required before GA release, and not going to work on before GA spec:miscellaneous For issues that don't match any other spec label

Comments

@anuraaga
Copy link
Contributor

anuraaga commented Aug 18, 2020

OpenTelemetry by default collects a lot of information, and backends that speak OTLP natively will generally be equipped to deal with this. But I worry we don't have a good story right now for connecting to non-OTLP backends like Zipkin (I will use Zipkin as the example since I'm most familiar with it, I wouldn't be surprised if other systems can have similar issues with storage). Zipkin instrumentation generally defaults to collecting less information since users run their own backends and pay significant cost for data. But currently, in the specification exporters are required to convert almost all information in OTLP. For example, library info and all the attributes which given the breadth of semantic conventions can be a lot. Resource hasn't been specced yet but with this pattern I expect it to also end up populating a lot of information for resources because the current stance is to preserve data during conversion

#800 (comment)

I think the goal of preserving all data is a nice goal but it could provide challenges to organizations using the opentelemetry sdk with a zipkin backend. We can imagine a software development team that switches their instrumentation to opentelemetry, and when they release the new version, their metrics look fine and they go to prod, taking down the entire tracing infrastructure due to an explosion in data that may provide low value given the backend doesn't natively recognize it. We can expect tracing infrastructure to have count-based ingestion controls, but I think size-based controls are less common and this would be very hard to deal with.

One piece we have that can help is the collector's attribute processor. It can be used to filter out attributes. This is a nice start, but we may need to consider improvements

  • Prebaked configuration or at least an example of how to configure it to get a result that is similar to what most Zipkin users have to effect a low impact on the backend

  • Support an allow mode instead of only deletion which would allow new otel conventions to be opt-in.

There are two problems with the collector - they require using the collector while many will want to export directly, and it only operates on attributes. A significant piece of the size explosion is library info, and there doesn't seem to be any way currently to filter these out, period. We may be able to extend the attributes processor to support these non-attribute protocol level information, but for the non-collector case, we probably need a way to filter data, either as opt-in or opt-out, at the SDK level too. Perhaps it's in the form of only code examples, though that is less compelling for auto instrumentation users and we may need native support for such filtering.

@anuraaga anuraaga added the spec:trace Related to the specification/trace directory label Aug 18, 2020
@arminru arminru added area:sdk Related to the SDK spec:miscellaneous For issues that don't match any other spec label and removed spec:trace Related to the specification/trace directory labels Aug 19, 2020
@andrewhsu
Copy link
Member

talked about this at the spec issue triage mtg today, assigning to @bogdandrutu to make a decision about whether this is before or after ga requirement

@andrewhsu andrewhsu added the release:after-ga Not required before GA release, and not going to work on before GA label Sep 18, 2020
@andrewhsu
Copy link
Member

from the spec issue triage mtg today, talked with @mtwo and @reyang and from their input putting this after GA, but medium priority.

@anuraaga
Copy link
Contributor Author

I was looking through some exporters in opentelemetry-collector-contrib, and noticed that at least newrelicexporter and datadogexporter seem to have a similar data model as Zipkin, and therefore seem to add all resource tags to all spans. Just curious, are there any strategies being taken into account to deal with potential information overload? Recommended configurations for dropping attributes in resourceprocessor, for example? Want to understand how people may be dealing with this issue to be able to provide recommendations :) // @tylerbenson @MrAlias (randomly pinging a couple handles I know for those :P)

@jkwatson
Copy link
Contributor

I happen to know a lot about how the New Relic backend works, and it's fine with pretty much any number of attributes on spans...I think the limit is like 256 attributes per span?

@trask
Copy link
Member

trask commented Nov 26, 2020

Azure Monitor pricing is per GB and so customers tend to care a lot about this issue. In our exporters we are mapping over semantic attributes that our backend needs for default experiences and just dropping the rest (looking at prefix, e.g. net., to differentiate between semantic attributes and user attributes). Also planning to let users allowlist semantic attributes that they want to keep.

@anuraaga
Copy link
Contributor Author

An idea came up in open-telemetry/opentelemetry-java#3009 to have an option to specify what resource attributes to copy in. Could be a good approach.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:sdk Related to the SDK release:after-ga Not required before GA release, and not going to work on before GA spec:miscellaneous For issues that don't match any other spec label
Projects
None yet
Development

No branches or pull requests

6 participants