initOTel initializes OpenTelemetry with stdout exporters for both tracing and metrics.
()
| 113 | |
| 114 | // initOTel initializes OpenTelemetry with stdout exporters for both tracing and metrics. |
| 115 | func initOTel() func() { |
| 116 | ctx := context.Background() |
| 117 | |
| 118 | // Create resource with service info |
| 119 | res, _ := resource.Merge( |
| 120 | resource.Default(), |
| 121 | resource.NewWithAttributes( |
| 122 | semconv.SchemaURL, |
| 123 | semconv.ServiceName("elasticsearch-example"), |
| 124 | ), |
| 125 | ) |
| 126 | |
| 127 | // Initialize trace exporter (stdout with pretty print) |
| 128 | traceExporter, err := stdouttrace.New(stdouttrace.WithPrettyPrint()) |
| 129 | if err != nil { |
| 130 | panic(err) |
| 131 | } |
| 132 | |
| 133 | // Initialize tracer provider |
| 134 | tracerProvider := sdktrace.NewTracerProvider( |
| 135 | sdktrace.WithResource(res), |
| 136 | sdktrace.WithSyncer(traceExporter), // Use Syncer for immediate output |
| 137 | ) |
| 138 | otel.SetTracerProvider(tracerProvider) |
| 139 | |
| 140 | // Initialize metric exporter (stdout) |
| 141 | metricExporter, err := stdoutmetric.New(stdoutmetric.WithPrettyPrint()) |
| 142 | if err != nil { |
| 143 | panic(err) |
| 144 | } |
| 145 | |
| 146 | // Initialize meter provider with periodic reader |
| 147 | meterProvider := sdkmetric.NewMeterProvider( |
| 148 | sdkmetric.WithResource(res), |
| 149 | sdkmetric.WithReader(sdkmetric.NewPeriodicReader(metricExporter, sdkmetric.WithInterval(time.Second))), |
| 150 | ) |
| 151 | otel.SetMeterProvider(meterProvider) |
| 152 | |
| 153 | // Return shutdown function |
| 154 | return func() { |
| 155 | _ = tracerProvider.Shutdown(ctx) |
| 156 | _ = meterProvider.Shutdown(ctx) |
| 157 | } |
| 158 | } |
| 159 | |
| 160 | // LoggingInterceptor creates an interceptor that logs request and response details. |
| 161 | func LoggingInterceptor() elastictransport.InterceptorFunc { |
no test coverage detected