open-telemetry / opentelemetry-go-instrumentation

OpenTelemetry Auto Instrumentation using eBPF
https://opentelemetry.io
Apache License 2.0
484 stars 73 forks source link

Go auto-instrumentation error ' support for Go auto instrumentation is not enabled' #906

Open AzusaZzzz opened 2 months ago

AzusaZzzz commented 2 months ago

I try to have a test for the go auto-instrumentation, when I applied my application, I got the error messeage in the operator log .

{"level":"ERROR","timestamp":"2024-07-03T09:36:55Z","message":"support for Go auto instrumentation is not enabled","namespace":"demo","name":"","stacktrace":"github.com/open-telemetry/opentelemetry-operator/pkg/instrumentation.(instPodMutator).Mutate\n\t/home/runner/work/opentelemetry-operator/opentelemetry-operator/pkg/instrumentation/podmutator.go:283\ngithub.com/open-telemetry/opentelemetry-operator/internal/webhook/podmutation.(podMutationWebhook).Handle\n\t/home/runner/work/opentelemetry-operator/opentelemetry-operator/internal/webhook/podmutation/webhookhandler.go:93\nsigs.k8s.io/controller-runtime/pkg/webhook/admission.(Webhook).Handle\n\t/home/runner/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.17.3/pkg/webhook/admission/webhook.go:169\nsigs.k8s.io/controller-runtime/pkg/webhook/admission.(Webhook).ServeHTTP\n\t/home/runner/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.17.3/pkg/webhook/admission/http.go:119\nsigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics.InstrumentedHook.InstrumentHandlerInFlight.func1\n\t/home/runner/go/pkg/mod/github.com/prometheus/client_golang@v1.19.1/prometheus/promhttp/instrument_server.go:60\nnet/http.HandlerFunc.ServeHTTP\n\t/opt/hostedtoolcache/go/1.21.10/x64/src/net/http/server.go:2136\ngithub.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerCounter.func1\n\t/home/runner/go/pkg/mod/github.com/prometheus/client_golang@v1.19.1/prometheus/promhttp/instrument_server.go:147\nnet/http.HandlerFunc.ServeHTTP\n\t/opt/hostedtoolcache/go/1.21.10/x64/src/net/http/server.go:2136\ngithub.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerDuration.func2\n\t/home/runner/go/pkg/mod/github.com/prometheus/client_golang@v1.19.1/prometheus/promhttp/instrument_server.go:109\nnet/http.HandlerFunc.ServeHTTP\n\t/opt/hostedtoolcache/go/1.21.10/x64/src/net/http/server.go:2136\nnet/http.(ServeMux).ServeHTTP\n\t/opt/hostedtoolcache/go/1.21.10/x64/src/net/http/server.go:2514\nnet/http.serverHandler.ServeHTTP\n\t/opt/hostedtoolcache/go/1.21.10/x64/src/net/http/server.go:2938\nnet/http.(conn).serve\n\t/opt/hostedtoolcache/go/1.21.10/x64/src/net/http/server.go:2009"}

my instrumentation yaml :

1 apiVersion: opentelemetry.io/v1alpha1 2 kind: Instrumentation 3 metadata: 4 name: instrumentation-demo 5 spec: 6 propagators: 7 - tracecontext 8 - baggage 9 - b3 10 sampler: 11 type: parentbased_traceidratio 12 argument: "1" 13 env: 14 - name: OTEL_EXPORTER_OTLP_ENDPOINT 15 value: my-collector-collector.opentelemetry:4318 16 go: 17 env: 18 # Required if endpoint is set to 4317. 19 # Go autoinstrumentation uses http/proto by default 20 # so data must be sent to 4318 instead of 4317. 21 - name: OTEL_EXPORTER_OTLP_ENDPOINT 22 value: http://my-collector-collector.opentelemetry:4318 23 - name: OTEL_LOGS_EXPORTER 24 value: otlp

my application deployment yaml

1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: go-demo-svc 5 spec: 6 type: NodePort 7 selector: 8 app: go-demo-app 9 ports: 10 - name: http 11 protocol: TCP 12 port: 8067 13 targetPort: 8067 14 15 16 --- 17 apiVersion: apps/v1 18 kind: Deployment 19 metadata: 20 name: go-demo 21 labels: 22 app: go-demo-app 23 spec: 24 replicas: 1 25 selector: 26 matchLabels: 27 app: go-demo-app 28 template: 29 metadata: 30 labels: 31 app: go-demo-app 32 annotations: 33 #instrumentation.opentelemetry.io/inject-sdk: "true" 34 instrumentation.opentelemetry.io/inject-go: "true" 35 instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/root/hello" 36 sidecar.opentelemetry.io/inject: 'true' 37 spec: 38 containers: 39 - name: go-demo-app 40 image: otel-demo-go:v1.0.0 41 ports: 42 - containerPort: 8067

iblancasa commented 1 month ago

This is not an error in the OpenTelemetry Go Instrumentation. You need to enable the Golang instrumentation support with --enable-go-instrumentation=true in the operator.