Extensions
Introduction¶
Extensions are designed to override or customize the instrumentation provided by the upstream agent without having to create a new OpenTelemetry distribution or alter the agent code in any way.
Consider an instrumented database client that creates a span per database call and extracts data from the database connection to provide span attributes. The following are sample use cases for that scenario that can be solved by using extensions:
- "I don't want this span at all":
Create an extension to disable selected instrumentation by providing new default settings.
- "I want to edit some attributes that don't depend on any db connection instance":
Create an extension that provide a custom SpanProcessor
.
- "I want to edit some attributes and their values depend on a specific db connection instance":
Create an extension with new instrumentation which injects its own advice into
the same method as the original one. You can use the order
method to ensure
it runs after the original instrumentation and augment the current span with
new information.
- "I want to remove some attributes":
Create an extension with a custom exporter or use the attribute filtering functionality in the OpenTelemetry Collector.
- "I don't like the OTel spans. I want to modify them and their lifecycle":
Create an extension that disables existing instrumentation and replace it with
new one that injects Advice
into the same (or a better) method as the
original instrumentation. You can write your Advice
for this and use the
existing Tracer
directly or extend it. As you have your own Advice
, you
can control which Tracer
you use.
Extension examples¶
To get a demonstration how to create an extension for the OpenTelemetry Java instrumentation agent, build and run the extension project.