OpenTelemetry Botocore Integration

Instrument Botocore to trace service requests.

There are two options for instrumenting code. The first option is to use the opentelemetry-instrument executable which will automatically instrument your Botocore client. The second is to programmatically enable instrumentation via the following code:

Usage

from opentelemetry import trace
from opentelemetry.ext.botocore import BotocoreInstrumentor
from opentelemetry.sdk.trace import TracerProvider
import botocore

trace.set_tracer_provider(TracerProvider())

# Instrument Botocore
BotocoreInstrumentor().instrument(
    tracer_provider=trace.get_tracer_provider()
)

# This will create a span with Botocore-specific attributes
session = botocore.session.get_session()
session.set_credentials(
    access_key="access-key", secret_key="secret-key"
)
ec2 = self.session.create_client("ec2", region_name="us-west-2")
ec2.describe_instances()

API

class opentelemetry.ext.botocore.BotocoreInstrumentor[source]

Bases: opentelemetry.instrumentation.instrumentor.BaseInstrumentor

A instrumentor for Botocore

See BaseInstrumentor

opentelemetry.ext.botocore.unwrap(obj, attr)[source]
opentelemetry.ext.botocore.add_span_arg_tags(span, endpoint_name, args, args_names, args_traced)[source]
opentelemetry.ext.botocore.flatten_dict(dict_, sep='.', prefix='')[source]

Returns a normalized dict of depth 1 with keys in order of embedding

opentelemetry.ext.botocore.deep_getattr(obj, attr_string, default=None)[source]

Returns the attribute of obj at the dotted path given by attr_string, if no such attribute is reachable, returns default.

>>> deep_getattr(cass, "cluster")
<cassandra.cluster.Cluster object at 0xa20c350
>>> deep_getattr(cass, "cluster.metadata.partitioner")
u"org.apache.cassandra.dht.Murmur3Partitioner"
>>> deep_getattr(cass, "i.dont.exist", default="default")
"default"