@@ -130,7 +130,9 @@ def client_response_hook(span: Span, message: dict):
130130
131131from opentelemetry .instrumentation .asgi import OpenTelemetryMiddleware
132132from opentelemetry .instrumentation .asgi .package import _instruments
133+ from opentelemetry .instrumentation .starlette .version import __version__
133134from opentelemetry .instrumentation .instrumentor import BaseInstrumentor
135+ from opentelemetry .metrics import get_meter
134136from opentelemetry .semconv .trace import SpanAttributes
135137from opentelemetry .trace import Span
136138from opentelemetry .util .http import get_excluded_urls
@@ -156,9 +158,11 @@ def instrument_app(
156158 server_request_hook : _ServerRequestHookT = None ,
157159 client_request_hook : _ClientRequestHookT = None ,
158160 client_response_hook : _ClientResponseHookT = None ,
161+ meter_provider = None ,
159162 tracer_provider = None ,
160163 ):
161164 """Instrument an uninstrumented Starlette application."""
165+ meter = get_meter (__name__ , __version__ , meter_provider )
162166 if not getattr (app , "is_instrumented_by_opentelemetry" , False ):
163167 app .add_middleware (
164168 OpenTelemetryMiddleware ,
@@ -168,6 +172,7 @@ def instrument_app(
168172 client_request_hook = client_request_hook ,
169173 client_response_hook = client_response_hook ,
170174 tracer_provider = tracer_provider ,
175+ meter = meter ,
171176 )
172177 app .is_instrumented_by_opentelemetry = True
173178
@@ -186,6 +191,9 @@ def _instrument(self, **kwargs):
186191 _InstrumentedStarlette ._client_response_hook = kwargs .get (
187192 "client_response_hook"
188193 )
194+ _InstrumentedStarlette ._meter_provider = kwargs .get (
195+ "_meter_provider"
196+ )
189197 applications .Starlette = _InstrumentedStarlette
190198
191199 def _uninstrument (self , ** kwargs ):
@@ -194,12 +202,16 @@ def _uninstrument(self, **kwargs):
194202
195203class _InstrumentedStarlette (applications .Starlette ):
196204 _tracer_provider = None
205+ _meter_provider = None
197206 _server_request_hook : _ServerRequestHookT = None
198207 _client_request_hook : _ClientRequestHookT = None
199208 _client_response_hook : _ClientResponseHookT = None
200209
201210 def __init__ (self , * args , ** kwargs ):
202211 super ().__init__ (* args , ** kwargs )
212+ meter = get_meter (
213+ __name__ , __version__ , _InstrumentedStarlette ._meter_provider
214+ )
203215 self .add_middleware (
204216 OpenTelemetryMiddleware ,
205217 excluded_urls = _excluded_urls ,
@@ -208,6 +220,7 @@ def __init__(self, *args, **kwargs):
208220 client_request_hook = _InstrumentedStarlette ._client_request_hook ,
209221 client_response_hook = _InstrumentedStarlette ._client_response_hook ,
210222 tracer_provider = _InstrumentedStarlette ._tracer_provider ,
223+ meter = meter ,
211224 )
212225
213226
0 commit comments