@@ -67,8 +67,13 @@ def run():
67
67
68
68
import grpc
69
69
70
- from opentelemetry import trace
70
+ from opentelemetry import metrics, trace
71
71
from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer
72
+ from opentelemetry.sdk.metrics import MeterProvider
73
+ from opentelemetry.sdk.metrics.export import (
74
+ ConsoleMetricExporter,
75
+ PeriodicExportingMetricReader,
76
+ )
72
77
from opentelemetry.sdk.trace import TracerProvider
73
78
from opentelemetry.sdk.trace.export import (
74
79
ConsoleSpanExporter,
@@ -80,6 +85,12 @@ def run():
80
85
except ImportError:
81
86
from gen import helloworld_pb2, helloworld_pb2_grpc
82
87
88
+ exporter = ConsoleMetricExporter()
89
+ reader = PeriodicExportingMetricReader(exporter)
90
+ metrics.set_meter_provider(
91
+ MeterProvider(metric_readers=[reader])
92
+ )
93
+
83
94
trace.set_tracer_provider(TracerProvider())
84
95
trace.get_tracer_provider().add_span_processor(
85
96
SimpleSpanProcessor(ConsoleSpanExporter())
@@ -123,7 +134,7 @@ def serve():
123
134
import grpc # pylint:disable=import-self
124
135
from wrapt import wrap_function_wrapper as _wrap
125
136
126
- from opentelemetry import trace
137
+ from opentelemetry import metrics , trace
127
138
from opentelemetry .instrumentation .grpc .grpcext import intercept_channel
128
139
from opentelemetry .instrumentation .grpc .package import _instruments
129
140
from opentelemetry .instrumentation .grpc .version import __version__
@@ -153,17 +164,24 @@ def instrumentation_dependencies(self) -> Collection[str]:
153
164
154
165
def _instrument (self , ** kwargs ):
155
166
self ._original_func = grpc .server
167
+ meter_provider = kwargs .get ("meter_provider" )
156
168
tracer_provider = kwargs .get ("tracer_provider" )
157
169
158
170
def server (* args , ** kwargs ):
159
171
if "interceptors" in kwargs :
160
172
# add our interceptor as the first
161
173
kwargs ["interceptors" ].insert (
162
- 0 , server_interceptor (tracer_provider = tracer_provider )
174
+ 0 , server_interceptor (
175
+ meter_provider = meter_provider ,
176
+ tracer_provider = tracer_provider
177
+ )
163
178
)
164
179
else :
165
180
kwargs ["interceptors" ] = [
166
- server_interceptor (tracer_provider = tracer_provider )
181
+ server_interceptor (
182
+ meter_provider = meter_provider ,
183
+ tracer_provider = tracer_provider
184
+ )
167
185
]
168
186
return self ._original_func (* args , ** kwargs )
169
187
@@ -240,17 +258,19 @@ def client_interceptor(tracer_provider=None):
240
258
return _client .OpenTelemetryClientInterceptor (tracer )
241
259
242
260
243
- def server_interceptor (tracer_provider = None ):
261
+ def server_interceptor (meter_provider = None , tracer_provider = None ):
244
262
"""Create a gRPC server interceptor.
245
263
246
264
Args:
247
- tracer: The tracer to use to create server-side spans.
265
+ meter_provider: The meter provider which allows acess to the meter.
266
+ tracer_provider: The tracer provider which allows acess to the tracer.
248
267
249
268
Returns:
250
269
A service-side interceptor object.
251
270
"""
252
271
from . import _server
253
272
273
+ meter = metrics .get_meter (__name__ , __version__ , meter_provider )
254
274
tracer = trace .get_tracer (__name__ , __version__ , tracer_provider )
255
275
256
- return _server .OpenTelemetryServerInterceptor (tracer )
276
+ return _server .OpenTelemetryServerInterceptor (meter , tracer )
0 commit comments