Skip to content

Commit bdbe6a2

Browse files
examples/opentelemetry: demonstrate enabling experimental metrics (#8388)
1 parent 0100d21 commit bdbe6a2

File tree

4 files changed

+49
-6
lines changed

4 files changed

+49
-6
lines changed

examples/features/opentelemetry/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
This example shows how to configure OpenTelemetry on a client and server, and
44
shows what type of telemetry data it can produce for certain RPCs.
5+
This example shows how to enable experimental gRPC metrics, which are disabled
6+
by default and must be explicitly configured on the client and/or server.
57

68
## Try it
79

examples/features/opentelemetry/client/main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,18 @@ func main() {
6363
// Configure W3C Trace Context Propagator for traces
6464
textMapPropagator := otelpropagation.TraceContext{}
6565
do := opentelemetry.DialOption(opentelemetry.Options{
66-
MetricsOptions: opentelemetry.MetricsOptions{MeterProvider: meterProvider},
67-
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator},
66+
MetricsOptions: opentelemetry.MetricsOptions{
67+
MeterProvider: meterProvider,
68+
// These are example experimental gRPC metrics, which are disabled
69+
// by default and must be explicitly enabled. For the full,
70+
// up-to-date list of metrics, see:
71+
// https://grpc.io/docs/guides/opentelemetry-metrics/#instruments
72+
Metrics: opentelemetry.DefaultMetrics().Add(
73+
"grpc.client.attempt.started",
74+
"grpc.client.attempt.duration",
75+
),
76+
},
77+
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator},
6878
})
6979

7080
go http.ListenAndServe(*prometheusEndpoint, promhttp.Handler())

examples/features/opentelemetry/server/main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,18 @@ func main() {
7171
// Configure W3C Trace Context Propagator for traces
7272
textMapPropagator := otelpropagation.TraceContext{}
7373
so := opentelemetry.ServerOption(opentelemetry.Options{
74-
MetricsOptions: opentelemetry.MetricsOptions{MeterProvider: meterProvider},
75-
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator}})
74+
MetricsOptions: opentelemetry.MetricsOptions{
75+
MeterProvider: meterProvider,
76+
// These are example experimental gRPC metrics, which are disabled
77+
// by default and must be explicitly enabled. For the full,
78+
// up-to-date list of metrics, see:
79+
// https://grpc.io/docs/guides/opentelemetry-metrics/#instruments
80+
Metrics: opentelemetry.DefaultMetrics().Add(
81+
"grpc.server.call.started",
82+
"grpc.server.call.duration",
83+
),
84+
},
85+
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator}})
7686

7787
go http.ListenAndServe(*prometheusEndpoint, promhttp.Handler())
7888

stats/opentelemetry/example_test.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525
"go.opentelemetry.io/otel/sdk/metric"
2626
)
2727

28-
func Example_dialOption() {
28+
func ExampleDialOption_basic() {
2929
// This is setting default bounds for a view. Setting these bounds through
3030
// meter provider from SDK is recommended, as API calls in this module
3131
// provide default bounds, but these calls are not guaranteed to be stable
@@ -64,7 +64,7 @@ func Example_dialOption() {
6464
defer cc.Close()
6565
}
6666

67-
func Example_serverOption() {
67+
func ExampleServerOption_methodFilter() {
6868
reader := metric.NewManualReader()
6969
provider := metric.NewMeterProvider(metric.WithReader(reader))
7070
opts := opentelemetry.Options{
@@ -128,3 +128,24 @@ func ExampleMetrics_enableSome() {
128128
}
129129
defer cc.Close()
130130
}
131+
132+
func ExampleOptions_addExperimentalMetrics() {
133+
opts := opentelemetry.Options{
134+
MetricsOptions: opentelemetry.MetricsOptions{
135+
// These are example experimental gRPC metrics, which are disabled
136+
// by default and must be explicitly enabled. For the full,
137+
// up-to-date list of metrics, see:
138+
// https://grpc.io/docs/guides/opentelemetry-metrics/#instruments
139+
Metrics: opentelemetry.DefaultMetrics().Add(
140+
"grpc.client.attempt.started",
141+
"grpc.client.attempt.duration",
142+
),
143+
},
144+
}
145+
do := opentelemetry.DialOption(opts)
146+
cc, err := grpc.NewClient("<target string>", do, grpc.WithTransportCredentials(insecure.NewCredentials()))
147+
if err != nil {
148+
// Handle error.
149+
}
150+
defer cc.Close()
151+
}

0 commit comments

Comments
 (0)