Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions examples/features/opentelemetry/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

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

## Try it

Expand Down
13 changes: 11 additions & 2 deletions examples/features/opentelemetry/client/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,18 @@ func main() {
traceProvider := sdktrace.NewTracerProvider(sdktrace.WithBatcher(traceExporter), sdktrace.WithResource(otelresource.NewWithAttributes(semconv.SchemaURL, semconv.ServiceName("grpc-client"))))
// Configure W3C Trace Context Propagator for traces
textMapPropagator := otelpropagation.TraceContext{}
// These are example experimental gRPC metrics, which are disabled by default
// and must be explicitly enabled. For the full, up-to-date list of metrics,
// see: https://grpc.io/docs/guides/opentelemetry-metrics/#instruments
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move these comments to the line just above Metrics: .

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

do := opentelemetry.DialOption(opentelemetry.Options{
MetricsOptions: opentelemetry.MetricsOptions{MeterProvider: meterProvider},
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator},
MetricsOptions: opentelemetry.MetricsOptions{
MeterProvider: meterProvider,
Metrics: opentelemetry.DefaultMetrics().Add(
"grpc.client.attempt.started",
"grpc.client.attempt.duration",
),
},
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator},
})

go http.ListenAndServe(*prometheusEndpoint, promhttp.Handler())
Expand Down
13 changes: 11 additions & 2 deletions examples/features/opentelemetry/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,18 @@ func main() {
traceProvider := sdktrace.NewTracerProvider(sdktrace.WithBatcher(traceExporter), sdktrace.WithResource(otelresource.NewWithAttributes(semconv.SchemaURL, semconv.ServiceName("grpc-server"))))
// Configure W3C Trace Context Propagator for traces
textMapPropagator := otelpropagation.TraceContext{}
// These are example experimental gRPC metrics, which are disabled by default
// and must be explicitly enabled. For the full, up-to-date list of metrics,
// see: https://grpc.io/docs/guides/opentelemetry-metrics/#instruments
so := opentelemetry.ServerOption(opentelemetry.Options{
MetricsOptions: opentelemetry.MetricsOptions{MeterProvider: meterProvider},
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator}})
MetricsOptions: opentelemetry.MetricsOptions{
MeterProvider: meterProvider,
Metrics: opentelemetry.DefaultMetrics().Add(
"grpc.server.call.started",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are we adding these in default? These are already part of default metric set

defaultPerCallMetrics = stats.NewMetricSet(ClientAttemptStartedMetricName, ClientAttemptDurationMetricName, ClientAttemptSentCompressedTotalMessageSizeMetricName, ClientAttemptRcvdCompressedTotalMessageSizeMetricName, ClientCallDurationMetricName, ServerCallStartedMetricName, ServerCallSentCompressedTotalMessageSizeMetricName, ServerCallRcvdCompressedTotalMessageSizeMetricName, ServerCallDurationMetricName)
.

"grpc.server.call.duration",
),
},
TraceOptions: oteltracing.TraceOptions{TracerProvider: traceProvider, TextMapPropagator: textMapPropagator}})

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

Expand Down
24 changes: 22 additions & 2 deletions stats/opentelemetry/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
"go.opentelemetry.io/otel/sdk/metric"
)

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

func Example_serverOption() {
func ExampleServerOption_methodFilter() {
reader := metric.NewManualReader()
provider := metric.NewMeterProvider(metric.WithReader(reader))
opts := opentelemetry.Options{
Expand Down Expand Up @@ -128,3 +128,23 @@ func ExampleMetrics_enableSome() {
}
defer cc.Close()
}

func ExampleOptions_addExperimentalMetrics() {
// These are example experimental gRPC metrics, which are disabled by default
// and must be explicitly enabled. For the full, up-to-date list of metrics,
// see: https://grpc.io/docs/guides/opentelemetry-metrics/#instruments
opts := opentelemetry.Options{
MetricsOptions: opentelemetry.MetricsOptions{
Metrics: opentelemetry.DefaultMetrics().Add(
"grpc.client.attempt.started",
"grpc.client.attempt.duration",
),
},
}
do := opentelemetry.DialOption(opts)
cc, err := grpc.NewClient("<target string>", do, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
// Handle error.
}
defer cc.Close()
}
Loading