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
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.
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