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

[instrumentation] - Suppress tracing using environment variables #20776

Merged
merged 13 commits into from
Mar 15, 2022

Conversation

maorleger
Copy link
Member

@maorleger maorleger commented Mar 10, 2022

Packages impacted by this PR

@azure/opentelemetry-instrumentation-azure-sdk

Issues associated with this PR

Resolves #17969

Describe the problem that is addressed by this PR

In order to mitigate duplication of AZ SDK HTTP spans with auto-instrumentation
HTTP spans, the tracing feature crew would like to add the
AZURE_HTTP_TRACING_DISABLED environment variable to disable any dowstream
HTTP spans from being created.

In addition, I realized that when migrating off-of createSpan we did not
migrate the logic to suppress all tracing using AZURE_TRACING_DISABLED
environment variable.

This PR fixes both of these issues.

What are the possible designs available to address the problem? If there are more than one possible design, why was the one in this PR chosen?

The alternatives really were:

  • Add this logic in core-tracing for global suppression
  • Add this logic in tracingPolicy for HTTP span suppression

Since we use a no-op instrumenter by default there's no reason to add additional
logic to core-tracing. Further, using it in the OTel package allows us to take
advantage of OTel provided APIs which will be honored downstream as well.

Quick summary of requirements here:

  • When AZURE_TRACING_DISABLED is set, we want to suppress our Azure SDK spans from being recorded
  • When AZURE_HTTP_TRACING_DISABLED is set, we want to suppress any children of our SDK's HTTP spans from being recorded, this avoids the HTTP span duplication problem while OTel works out a solution on their end
  • Finally, if both are set, we suppress our Azure SDK spans from being recorded, but not suppress any children of our HTTP spans (since there's no duplication)

Are there test cases added in this PR? (If not, why?)

Yes

Provide a list of related PRs (if any)

Command used to generate this PR: (Applicable only to SDK release request PRs)

Checklists

  • Added impacted package name to the issue description.
  • Does this PR need any fixes in the SDK Generator?** (If so, create an Issue in the Autorest/typescript repository and link it here.)
  • Added a changelog (if necessary).

@check-enforcer
Copy link

This pull request is protected by Check Enforcer.

What is Check Enforcer?

Check Enforcer helps ensure all pull requests are covered by at least one check-run (typically an Azure Pipeline). When all check-runs associated with this pull request pass then Check Enforcer itself will pass.

Why am I getting this message?

You are getting this message because Check Enforcer did not detect any check-runs being associated with this pull request within five minutes. This may indicate that your pull request is not covered by any pipelines and so Check Enforcer is correctly blocking the pull request being merged.

What should I do now?

If the check-enforcer check-run is not passing and all other check-runs associated with this PR are passing (excluding license-cla) then you could try telling Check Enforcer to evaluate your pull request again. You can do this by adding a comment to this pull request as follows:
/check-enforcer evaluate
Typically evaulation only takes a few seconds. If you know that your pull request is not covered by a pipeline and this is expected you can override Check Enforcer using the following command:
/check-enforcer override
Note that using the override command triggers alerts so that follow-up investigations can occur (PRs still need to be approved as normal).

What if I am onboarding a new service?

Often, new services do not have validation pipelines associated with them, in order to bootstrap pipelines for a new service, you can issue the following command as a pull request comment:
/azp run prepare-pipelines
This will run a pipeline that analyzes the source tree and creates the pipelines necessary to build and validate your pull request. Once the pipeline has been created you can trigger the pipeline using the following comment:
/azp run js - [service] - ci

@maorleger maorleger marked this pull request as ready for review March 10, 2022 21:29
@maorleger maorleger requested a review from joheredi as a code owner March 10, 2022 21:29
@maorleger maorleger requested review from lmolkova and xirzec March 10, 2022 21:29
@maorleger maorleger marked this pull request as draft March 10, 2022 22:27
Copy link
Member

@lmolkova lmolkova left a comment

Choose a reason for hiding this comment

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

Left a couple of comments on reading env vars on the hot path. Caching them will probably cause some complications for tests, but seems important. Otherwise, looks great!

@maorleger maorleger marked this pull request as ready for review March 11, 2022 20:03
Copy link
Member

@xirzec xirzec left a comment

Choose a reason for hiding this comment

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

A few minor comments

@maorleger maorleger merged commit 5caf03e into Azure:main Mar 15, 2022
WeiJun428 pushed a commit to WeiJun428/azure-sdk-for-js that referenced this pull request Mar 20, 2022
…re#20776)

### Packages impacted by this PR
@azure/opentelemetry-instrumentation-azure-sdk

### Issues associated with this PR
Resolves Azure#17969

### Describe the problem that is addressed by this PR
In order to mitigate duplication of AZ SDK HTTP spans with auto-instrumentation
HTTP spans, the tracing feature crew would like to add the
AZURE_HTTP_TRACING_DISABLED environment variable to disable any dowstream
 HTTP spans from being created. 

In addition, I realized that when migrating off-of `createSpan` we did not
migrate the logic to suppress _all_ tracing using AZURE_TRACING_DISABLED
environment variable.

This PR fixes both of these issues.

### What are the possible designs available to address the problem? If there are more than one possible design, why was the one in this PR chosen?
The alternatives really were:
- Add this logic in core-tracing for global suppression
- Add this logic in tracingPolicy for HTTP span suppression

Since we use a no-op instrumenter by default there's no reason to add additional
logic to core-tracing. Further, using it in the OTel package allows us to take
advantage of OTel provided APIs which will be honored downstream as well.

Quick summary of requirements here:
- When AZURE_TRACING_DISABLED is set, we want to suppress our Azure SDK spans from being recorded
- When AZURE_HTTP_TRACING_DISABLED is set, we want to suppress any children of our SDK's HTTP spans from being recorded, this avoids the HTTP span duplication problem while OTel works out a solution on their end
- Finally, if _both_ are set, we suppress our Azure SDK spans from being recorded, but _not_ suppress any children of our HTTP spans (since there's no duplication)
WeiJun428 pushed a commit to WeiJun428/azure-sdk-for-js that referenced this pull request Mar 20, 2022
…re#20776)

### Packages impacted by this PR
@azure/opentelemetry-instrumentation-azure-sdk

### Issues associated with this PR
Resolves Azure#17969

### Describe the problem that is addressed by this PR
In order to mitigate duplication of AZ SDK HTTP spans with auto-instrumentation
HTTP spans, the tracing feature crew would like to add the
AZURE_HTTP_TRACING_DISABLED environment variable to disable any dowstream
 HTTP spans from being created. 

In addition, I realized that when migrating off-of `createSpan` we did not
migrate the logic to suppress _all_ tracing using AZURE_TRACING_DISABLED
environment variable.

This PR fixes both of these issues.

### What are the possible designs available to address the problem? If there are more than one possible design, why was the one in this PR chosen?
The alternatives really were:
- Add this logic in core-tracing for global suppression
- Add this logic in tracingPolicy for HTTP span suppression

Since we use a no-op instrumenter by default there's no reason to add additional
logic to core-tracing. Further, using it in the OTel package allows us to take
advantage of OTel provided APIs which will be honored downstream as well.

Quick summary of requirements here:
- When AZURE_TRACING_DISABLED is set, we want to suppress our Azure SDK spans from being recorded
- When AZURE_HTTP_TRACING_DISABLED is set, we want to suppress any children of our SDK's HTTP spans from being recorded, this avoids the HTTP span duplication problem while OTel works out a solution on their end
- Finally, if _both_ are set, we suppress our Azure SDK spans from being recorded, but _not_ suppress any children of our HTTP spans (since there's no duplication)
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.

Add environment variable to suppress HTTP span creation
4 participants