Skip to content

Commit 4f66183

Browse files
authored
Set schema_url on all tracers and meters (#1977)
1 parent eb6024c commit 4f66183

File tree

49 files changed

+504
-128
lines changed
  • instrumentation
    • opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika
    • opentelemetry-instrumentation-aiohttp-client
    • opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi
    • opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg
    • opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda
    • opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto
    • opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs
    • opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore
    • opentelemetry-instrumentation-cassandra
    • opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery
    • opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka
    • opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi
    • opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django
    • opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch
    • opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon
    • opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi
    • opentelemetry-instrumentation-flask
    • opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc
    • opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx
    • opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2
    • opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka
    • opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika
    • opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache
    • opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo
    • opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid
    • opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis
    • opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade
    • opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests
    • opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn
    • opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy
    • opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette
    • opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics
    • opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado
    • opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm
    • opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib
    • opentelemetry-instrumentation-urllib3
    • opentelemetry-instrumentation-wsgi
  • resource/opentelemetry-resource-detector-azure
  • util/opentelemetry-util-http

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+504
-128
lines changed

CHANGELOG.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
([#1800](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1800))
1212

1313
### Added
14+
1415
- `opentelemetry-instrumentation-botocore` Include SNS topic ARN as a span attribute with name `messaging.destination.name` to uniquely identify the SNS topic
1516
([#1995](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1995))
1617
- `opentelemetry-instrumentation-system-metrics` Add support for collecting process metrics
1718
([#1948](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1948))
19+
- Added schema_url (`"https://opentelemetry.io/schemas/1.11.0"`) to all metrics and traces
20+
([#1977](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1977))
1821

1922
### Fixed
2023

@@ -61,7 +64,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6164
([#1744](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1744))
6265
- Fix async redis clients not being traced correctly
6366
([#1830](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1830))
64-
- Make Flask request span attributes available for `start_span`.
67+
- Make Flask request span attributes available for `start_span`.
6568
([#1784](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1784))
6669
- Fix falcon instrumentation's usage of Span Status to only set the description if the status code is ERROR.
6770
([#1840](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1840))

instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/aio_pika_instrumentor.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ async def wrapper(wrapped, instance, args, kwargs):
6464
def _instrument(self, **kwargs):
6565
tracer_provider = kwargs.get("tracer_provider", None)
6666
tracer = trace.get_tracer(
67-
_INSTRUMENTATION_MODULE_NAME, __version__, tracer_provider
67+
_INSTRUMENTATION_MODULE_NAME,
68+
__version__,
69+
tracer_provider,
70+
schema_url="https://opentelemetry.io/schemas/1.11.0",
6871
)
6972
self._instrument_queue(tracer)
7073
self._instrument_exchange(tracer)

instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,12 @@ def create_trace_config(
163163
# Explicitly specify the type for the `request_hook` and `response_hook` param and rtype to work
164164
# around this issue.
165165

166-
tracer = get_tracer(__name__, __version__, tracer_provider)
166+
tracer = get_tracer(
167+
__name__,
168+
__version__,
169+
tracer_provider,
170+
schema_url="https://opentelemetry.io/schemas/1.11.0",
171+
)
167172

168173
def _end_trace(trace_config_ctx: types.SimpleNamespace):
169174
context_api.detach(trace_config_ctx.token)

instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/test_aiohttp_client_integration.py

+15
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,21 @@ def test_status_codes(self):
134134

135135
self.memory_exporter.clear()
136136

137+
def test_schema_url(self):
138+
with self.subTest(status_code=200):
139+
host, port = self._http_request(
140+
trace_config=aiohttp_client.create_trace_config(),
141+
url="/test-path?query=param#foobar",
142+
status_code=200,
143+
)
144+
145+
span = self.memory_exporter.get_finished_spans()[0]
146+
self.assertEqual(
147+
span.instrumentation_info.schema_url,
148+
"https://opentelemetry.io/schemas/1.11.0",
149+
)
150+
self.memory_exporter.clear()
151+
137152
def test_not_recording(self):
138153
mock_tracer = mock.Mock()
139154
mock_span = mock.Mock()

instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -495,9 +495,19 @@ def __init__(
495495
meter=None,
496496
):
497497
self.app = guarantee_single_callable(app)
498-
self.tracer = trace.get_tracer(__name__, __version__, tracer_provider)
498+
self.tracer = trace.get_tracer(
499+
__name__,
500+
__version__,
501+
tracer_provider,
502+
schema_url="https://opentelemetry.io/schemas/1.11.0",
503+
)
499504
self.meter = (
500-
get_meter(__name__, __version__, meter_provider)
505+
get_meter(
506+
__name__,
507+
__version__,
508+
meter_provider,
509+
schema_url="https://opentelemetry.io/schemas/1.11.0",
510+
)
501511
if meter is None
502512
else meter
503513
)

instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,12 @@ def instrumentation_dependencies(self) -> Collection[str]:
107107

108108
def _instrument(self, **kwargs):
109109
tracer_provider = kwargs.get("tracer_provider")
110-
self._tracer = trace.get_tracer(__name__, __version__, tracer_provider)
110+
self._tracer = trace.get_tracer(
111+
__name__,
112+
__version__,
113+
tracer_provider,
114+
schema_url="https://opentelemetry.io/schemas/1.11.0",
115+
)
111116

112117
for method in [
113118
"Connection.execute",

instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,12 @@ def _instrumented_lambda_handler_call( # noqa pylint: disable=too-many-branches
321321
except (IndexError, KeyError, TypeError):
322322
span_kind = SpanKind.SERVER
323323

324-
tracer = get_tracer(__name__, __version__, tracer_provider)
324+
tracer = get_tracer(
325+
__name__,
326+
__version__,
327+
tracer_provider,
328+
schema_url="https://opentelemetry.io/schemas/1.11.0",
329+
)
325330

326331
with tracer.start_as_current_span(
327332
name=orig_handler_name,

instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@ def _instrument(self, **kwargs):
9191

9292
# pylint: disable=attribute-defined-outside-init
9393
self._tracer = get_tracer(
94-
__name__, __version__, kwargs.get("tracer_provider")
94+
__name__,
95+
__version__,
96+
kwargs.get("tracer_provider"),
97+
schema_url="https://opentelemetry.io/schemas/1.11.0",
9598
)
9699

97100
wrap_function_wrapper(

instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/__init__.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,10 @@ def _instrument(self, **kwargs: Dict[str, Any]) -> None:
422422
"tracer_provider"
423423
)
424424
self._tracer: Tracer = trace.get_tracer(
425-
__name__, __version__, self._tracer_provider
425+
__name__,
426+
__version__,
427+
self._tracer_provider,
428+
schema_url="https://opentelemetry.io/schemas/1.11.0",
426429
)
427430
self._wrap_client_creation()
428431

instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ def instrumentation_dependencies(self) -> Collection[str]:
127127
def _instrument(self, **kwargs):
128128
# pylint: disable=attribute-defined-outside-init
129129
self._tracer = get_tracer(
130-
__name__, __version__, kwargs.get("tracer_provider")
130+
__name__,
131+
__version__,
132+
kwargs.get("tracer_provider"),
133+
schema_url="https://opentelemetry.io/schemas/1.11.0",
131134
)
132135

133136
self.request_hook = kwargs.get("request_hook")

instrumentation/opentelemetry-instrumentation-cassandra/src/opentelemetry/instrumentation/cassandra/__init__.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,12 @@ def _instrument(tracer_provider, include_db_statement=False):
5555
5656
Wraps cassandra.cluster.Session.execute_async().
5757
"""
58-
tracer = trace.get_tracer(__name__, __version__, tracer_provider)
58+
tracer = trace.get_tracer(
59+
__name__,
60+
__version__,
61+
tracer_provider,
62+
schema_url="https://opentelemetry.io/schemas/1.11.0",
63+
)
5964
name = "Cassandra"
6065

6166
def _traced_execute_async(func, instance, args, kwargs):
@@ -65,7 +70,10 @@ def _traced_execute_async(func, instance, args, kwargs):
6570
if span.is_recording():
6671
span.set_attribute(SpanAttributes.DB_NAME, instance.keyspace)
6772
span.set_attribute(SpanAttributes.DB_SYSTEM, "cassandra")
68-
span.set_attribute(SpanAttributes.NET_PEER_NAME, instance.cluster.contact_points)
73+
span.set_attribute(
74+
SpanAttributes.NET_PEER_NAME,
75+
instance.cluster.contact_points,
76+
)
6977

7078
if include_db_statement:
7179
query = args[0]
@@ -74,7 +82,9 @@ def _traced_execute_async(func, instance, args, kwargs):
7482
response = func(*args, **kwargs)
7583
return response
7684

77-
wrap_function_wrapper("cassandra.cluster", "Session.execute_async", _traced_execute_async)
85+
wrap_function_wrapper(
86+
"cassandra.cluster", "Session.execute_async", _traced_execute_async
87+
)
7888

7989

8090
class CassandraInstrumentor(BaseInstrumentor):

instrumentation/opentelemetry-instrumentation-cassandra/tests/test_cassandra_integration.py

+19-5
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,25 @@ def tearDown(self):
4646
def test_instrument_uninstrument(self):
4747
instrumentation = CassandraInstrumentor()
4848
instrumentation.instrument()
49-
self.assertTrue(isinstance(cassandra.cluster.Session.execute_async, BoundFunctionWrapper))
49+
self.assertTrue(
50+
isinstance(
51+
cassandra.cluster.Session.execute_async, BoundFunctionWrapper
52+
)
53+
)
5054

5155
instrumentation.uninstrument()
52-
self.assertFalse(isinstance(cassandra.cluster.Session.execute_async, BoundFunctionWrapper))
56+
self.assertFalse(
57+
isinstance(
58+
cassandra.cluster.Session.execute_async, BoundFunctionWrapper
59+
)
60+
)
5361

5462
@mock.patch("cassandra.cluster.Cluster.connect")
5563
@mock.patch("cassandra.cluster.Session.__init__")
5664
@mock.patch("cassandra.cluster.Session._create_response_future")
57-
def test_instrumentor(self, mock_create_response_future, mock_session_init, mock_connect):
65+
def test_instrumentor(
66+
self, mock_create_response_future, mock_session_init, mock_connect
67+
):
5868
mock_create_response_future.return_value = mock.Mock()
5969
mock_session_init.return_value = None
6070
mock_connect.return_value = cassandra.cluster.Session()
@@ -85,7 +95,9 @@ def test_instrumentor(self, mock_create_response_future, mock_session_init, mock
8595
@mock.patch("cassandra.cluster.Cluster.connect")
8696
@mock.patch("cassandra.cluster.Session.__init__")
8797
@mock.patch("cassandra.cluster.Session._create_response_future")
88-
def test_custom_tracer_provider(self, mock_create_response_future, mock_session_init, mock_connect):
98+
def test_custom_tracer_provider(
99+
self, mock_create_response_future, mock_session_init, mock_connect
100+
):
89101
mock_create_response_future.return_value = mock.Mock()
90102
mock_session_init.return_value = None
91103
mock_connect.return_value = cassandra.cluster.Session()
@@ -107,7 +119,9 @@ def test_custom_tracer_provider(self, mock_create_response_future, mock_session_
107119
@mock.patch("cassandra.cluster.Cluster.connect")
108120
@mock.patch("cassandra.cluster.Session.__init__")
109121
@mock.patch("cassandra.cluster.Session._create_response_future")
110-
def test_instrument_connection_no_op_tracer_provider(self, mock_create_response_future, mock_session_init, mock_connect):
122+
def test_instrument_connection_no_op_tracer_provider(
123+
self, mock_create_response_future, mock_session_init, mock_connect
124+
):
111125
mock_create_response_future.return_value = mock.Mock()
112126
mock_session_init.return_value = None
113127
mock_connect.return_value = cassandra.cluster.Session()

instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,20 @@ def _instrument(self, **kwargs):
126126
tracer_provider = kwargs.get("tracer_provider")
127127

128128
# pylint: disable=attribute-defined-outside-init
129-
self._tracer = trace.get_tracer(__name__, __version__, tracer_provider)
129+
self._tracer = trace.get_tracer(
130+
__name__,
131+
__version__,
132+
tracer_provider,
133+
schema_url="https://opentelemetry.io/schemas/1.11.0",
134+
)
130135

131136
meter_provider = kwargs.get("meter_provider")
132-
meter = get_meter(__name__, __version__, meter_provider)
137+
meter = get_meter(
138+
__name__,
139+
__version__,
140+
meter_provider,
141+
schema_url="https://opentelemetry.io/schemas/1.11.0",
142+
)
133143

134144
self.create_celery_metrics(meter)
135145

instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/__init__.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,10 @@ def instrument_producer(
229229
producer: Producer, tracer_provider=None
230230
) -> ProxiedProducer:
231231
tracer = trace.get_tracer(
232-
__name__, __version__, tracer_provider=tracer_provider
232+
__name__,
233+
__version__,
234+
tracer_provider=tracer_provider,
235+
schema_url="https://opentelemetry.io/schemas/1.11.0",
233236
)
234237

235238
manual_producer = ProxiedProducer(producer, tracer)
@@ -241,7 +244,10 @@ def instrument_consumer(
241244
consumer: Consumer, tracer_provider=None
242245
) -> ProxiedConsumer:
243246
tracer = trace.get_tracer(
244-
__name__, __version__, tracer_provider=tracer_provider
247+
__name__,
248+
__version__,
249+
tracer_provider=tracer_provider,
250+
schema_url="https://opentelemetry.io/schemas/1.11.0",
245251
)
246252

247253
manual_consumer = ProxiedConsumer(consumer, tracer)
@@ -272,7 +278,10 @@ def _instrument(self, **kwargs):
272278

273279
tracer_provider = kwargs.get("tracer_provider")
274280
tracer = trace.get_tracer(
275-
__name__, __version__, tracer_provider=tracer_provider
281+
__name__,
282+
__version__,
283+
tracer_provider=tracer_provider,
284+
schema_url="https://opentelemetry.io/schemas/1.11.0",
276285
)
277286

278287
self._tracer = tracer

instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ def __init__(
264264
self._name,
265265
instrumenting_library_version=self._version,
266266
tracer_provider=tracer_provider,
267+
schema_url="https://opentelemetry.io/schemas/1.11.0",
267268
)
268269
self.capture_parameters = capture_parameters
269270
self.enable_commenter = enable_commenter

instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,14 @@ def _instrument(self, **kwargs):
300300
__name__,
301301
__version__,
302302
tracer_provider=tracer_provider,
303+
schema_url="https://opentelemetry.io/schemas/1.11.0",
304+
)
305+
meter = get_meter(
306+
__name__,
307+
__version__,
308+
meter_provider=meter_provider,
309+
schema_url="https://opentelemetry.io/schemas/1.11.0",
303310
)
304-
meter = get_meter(__name__, __version__, meter_provider=meter_provider)
305311
_DjangoMiddleware._tracer = tracer
306312
_DjangoMiddleware._meter = meter
307313
_DjangoMiddleware._excluded_urls = (

instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,12 @@ def _instrument(self, **kwargs):
140140
Instruments Elasticsearch module
141141
"""
142142
tracer_provider = kwargs.get("tracer_provider")
143-
tracer = get_tracer(__name__, __version__, tracer_provider)
143+
tracer = get_tracer(
144+
__name__,
145+
__version__,
146+
tracer_provider,
147+
schema_url="https://opentelemetry.io/schemas/1.11.0",
148+
)
144149
request_hook = kwargs.get("request_hook")
145150
response_hook = kwargs.get("response_hook")
146151
if es_transport_split:

instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/__init__.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,17 @@ def __init__(self, *args, **kwargs):
254254
self._middlewares_list = [self._middlewares_list]
255255

256256
self._otel_tracer = trace.get_tracer(
257-
__name__, __version__, tracer_provider
257+
__name__,
258+
__version__,
259+
tracer_provider,
260+
schema_url="https://opentelemetry.io/schemas/1.11.0",
261+
)
262+
self._otel_meter = get_meter(
263+
__name__,
264+
__version__,
265+
meter_provider,
266+
schema_url="https://opentelemetry.io/schemas/1.11.0",
258267
)
259-
self._otel_meter = get_meter(__name__, __version__, meter_provider)
260268
self.duration_histogram = self._otel_meter.create_histogram(
261269
name=MetricInstruments.HTTP_SERVER_DURATION,
262270
unit="ms",

instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,12 @@ def instrument_app(
222222
excluded_urls = _excluded_urls_from_env
223223
else:
224224
excluded_urls = parse_excluded_urls(excluded_urls)
225-
meter = get_meter(__name__, __version__, meter_provider)
225+
meter = get_meter(
226+
__name__,
227+
__version__,
228+
meter_provider,
229+
schema_url="https://opentelemetry.io/schemas/1.11.0",
230+
)
226231

227232
app.add_middleware(
228233
OpenTelemetryMiddleware,
@@ -295,7 +300,10 @@ class _InstrumentedFastAPI(fastapi.FastAPI):
295300
def __init__(self, *args, **kwargs):
296301
super().__init__(*args, **kwargs)
297302
meter = get_meter(
298-
__name__, __version__, _InstrumentedFastAPI._meter_provider
303+
__name__,
304+
__version__,
305+
_InstrumentedFastAPI._meter_provider,
306+
schema_url="https://opentelemetry.io/schemas/1.11.0",
299307
)
300308
self.add_middleware(
301309
OpenTelemetryMiddleware,

0 commit comments

Comments
 (0)