Suppress botocore downstream instrumentation like urllib3 (#563)

This commit is contained in:
(Eliseo) Nathaniel Ruiz Nowell
2021-07-14 12:27:28 -07:00
committed by GitHub
parent 3a1746a3bf
commit 7e8b5bb178
2 changed files with 15 additions and 0 deletions

View File

@ -45,6 +45,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#562](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/562))
- `opentelemetry-instrumentation-django` Fix AttributeError: ResolverMatch object has no attribute route
([#581](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/581))
- `opentelemetry-instrumentation-botocore` Suppress botocore downstream instrumentation like urllib3
([#563](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/563))
### Added
- `opentelemetry-instrumentation-httpx` Add `httpx` instrumentation

View File

@ -68,6 +68,13 @@ from opentelemetry.trace import SpanKind, get_tracer
logger = logging.getLogger(__name__)
# A key to a context variable to avoid creating duplicate spans when instrumenting
# both botocore.client and urllib3.connectionpool.HTTPConnectionPool.urlopen since
# botocore calls urlopen
_SUPPRESS_HTTP_INSTRUMENTATION_KEY = context_api.create_key(
"suppress_http_instrumentation"
)
# pylint: disable=unused-argument
def _patched_endpoint_prepare_request(wrapped, instance, args, kwargs):
@ -161,10 +168,16 @@ class BotocoreInstrumentor(BaseInstrumentor):
"aws.table_name", api_params["TableName"]
)
token = context_api.attach(
context_api.set_value(_SUPPRESS_HTTP_INSTRUMENTATION_KEY, True)
)
try:
result = original_func(*args, **kwargs)
except ClientError as ex:
error = ex
finally:
context_api.detach(token)
if error:
result = error.response