diff --git a/example/otel-collector/README.md b/example/otel-collector/README.md index 64e3d84c7..6636def30 100644 --- a/example/otel-collector/README.md +++ b/example/otel-collector/README.md @@ -1,21 +1,25 @@ # OpenTelemetry Collector Traces Example -This example illustrates how to export traces from the otel-go sdk to the Open Telemetry Collector, and from there to a Jaeger instance. +This example illustrates how to export traces from the OpenTelemetry-Go SDK to the OpenTelemetry Collector, and from there to a Jaeger instance. The complete flow is: `otel-collector-demo -> otel-collector -> Jaeger` # Prerequisites -The demo assumes you already have both OpenTelemetry Collector and Jaeger up and running. For setting these up, please follow the corresponding documentations: +The demo assumes you already have both an instance of the OpenTelemetry Collector and Jaeger up and running. +For information about how to set these up, please follow the corresponding documentation: + * Jaeger: https://www.jaegertracing.io/docs/1.17/getting-started/ * OpenTelemetry Collector: https://opentelemetry.io/docs/collector/about/ -Moreover, this demo is build against a microk8s cluster running both the OpenTelemetry Collector, and Jaeger. Therefor, the OpenTelemetry Collector configuration illustrated is a K8S ConfigurationMap. But the gist of it is there, so it shouldn't matter too much. +Moreover, this demo is built on a Kubernetes cluster running both the OpenTelemetry Collector, and Jaeger. +Therefore, the included OpenTelemetry Collector configuration is a Kubernetes `ConfigMap`. +However, the main concepts should be transferable to any other platform you want to run this demo on. # Configuring the OTEL Collector -In order to enable our application to send traces to the OpenTelemetry Collector, we need to first open up the OTLP receiver: +In order to enable our application to send traces to the OpenTelemetry Collector, we need to first configure the OTLP receiver: ```yml receivers: @@ -24,6 +28,7 @@ receivers: This will create the receiver on the Collector side, and open up port `55680` for receiving traces. The rest of the configuration is quite standard, with the only mention that we need to create the Jaeger exporter: + ```yml exporters: jaeger: @@ -31,7 +36,9 @@ exporters: endpoint: ":14250" ``` -After this, apply the configuration to your OpenTelemetry Collector instance (with `k apply -f otel-controller-config.yaml` for k8s users). You should see that the Collector creates the otlp receiver: +After this, apply the configuration to your OpenTelemetry Collector instance (with `kubectl apply -f otel-controller-config.yaml` for k8s users). +You should see that the Collector creates the otlp receiver: + ```json {"level":"info","ts":1589184143.206609,"caller":"builder/receivers_builder.go:79","msg":"Receiver started.","component_kind":"receiver","component_type":"otlp","component_name":"otlp"} ``` @@ -53,11 +60,14 @@ defer func() { _ = exp.Stop() }() ``` -This will initialize the exporter with the default configuration. In this configuration, it will try to connect to an otlp receiver at the address `localhost:55680`. If your OpenTelemetry Collector is running at a different address, use the [otlp.WithAddress](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp?tab=doc#WithAddress) function to change the default address. +This will initialize the exporter with the default configuration. +In this configuration, it will try to connect to an OTLP receiver at the address `localhost:55680`. +If your OpenTelemetry Collector is running at a different address, use the [`otlp.WithAddress`](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp?tab=doc#WithAddress) function to change the default address. -Feel free to remove the blocking operation, but it might come in handy when testing the connection. Also, make sure to close the exporter before the app exits. +Feel free to remove the blocking operation, but it might come in handy when testing the connection. +Also, make sure to close the exporter before the app exits. -The next steps are the same as for all other otel-go sdk uses: +The next steps are the same as for all other OpenTelemetry-Go SDK uses: 1) Create a trace provider from the `otlp` exporter: ```go tp, _ := sdktrace.NewProvider( diff --git a/example/otel-collector/main.go b/example/otel-collector/main.go index b9397f975..e1220615a 100644 --- a/example/otel-collector/main.go +++ b/example/otel-collector/main.go @@ -37,10 +37,13 @@ func main() { log.Fatalf("Failed to create the collector exporter: %v", err) } defer func() { - _ = exp.Stop() + err := exp.Stop() + if err != nil { + log.Fatalf("Failed to stop the exporter: %v", err) + } }() - tp, _ := sdktrace.NewProvider( + tp, err := sdktrace.NewProvider( sdktrace.WithConfig(sdktrace.Config{DefaultSampler: sdktrace.AlwaysSample()}), sdktrace.WithResourceAttributes( core.Key(conventions.AttributeServiceName).String("test-service"),