diff --git a/apis/v1alpha1/instrumentation_types.go b/apis/v1alpha1/instrumentation_types.go
index 37e2592546..e682146e21 100644
--- a/apis/v1alpha1/instrumentation_types.go
+++ b/apis/v1alpha1/instrumentation_types.go
@@ -37,7 +37,9 @@ type InstrumentationSpec struct {
// +optional
Sampler `json:"sampler,omitempty"`
- // Env defines env vars.
+ // Env defines common env vars. There are four layers for env vars' definitions and
+ // precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`
+ // If the former var had been defined, then the other vars would be ignored.
// +optional
Env []corev1.EnvVar `json:"env,omitempty"`
@@ -94,7 +96,9 @@ type Java struct {
// +optional
Image string `json:"image,omitempty"`
- // Env defines env vars.
+ // Env defines java specific env vars. There are four layers for env vars' definitions and
+ // precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`
+ // If the former var had been defined, then the other vars would be ignored.
// +optional
Env []corev1.EnvVar `json:"env,omitempty"`
}
@@ -105,7 +109,9 @@ type NodeJS struct {
// +optional
Image string `json:"image,omitempty"`
- // Env defines env vars.
+ // Env defines nodejs specific env vars. There are four layers for env vars' definitions and
+ // precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`
+ // If the former var had been defined, then the other vars would be ignored.
// +optional
Env []corev1.EnvVar `json:"env,omitempty"`
}
@@ -116,7 +122,9 @@ type Python struct {
// +optional
Image string `json:"image,omitempty"`
- // Env defines env vars.
+ // Env defines python specific env vars. There are four layers for env vars' definitions and
+ // precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`
+ // If the former var had been defined, then the other vars would be ignored.
// +optional
Env []corev1.EnvVar `json:"env,omitempty"`
}
diff --git a/apis/v1alpha1/instrumentation_webhook.go b/apis/v1alpha1/instrumentation_webhook.go
index 800e8d1781..1a977ee192 100644
--- a/apis/v1alpha1/instrumentation_webhook.go
+++ b/apis/v1alpha1/instrumentation_webhook.go
@@ -16,10 +16,10 @@ package v1alpha1
import (
"fmt"
- corev1 "k8s.io/api/core/v1"
"strconv"
"strings"
+ corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
logf "sigs.k8s.io/controller-runtime/pkg/log"
@@ -129,11 +129,9 @@ func (in *Instrumentation) validate() error {
}
func (in *Instrumentation) validateEnv(envs []corev1.EnvVar) error {
- if len(envs) > 0 {
- for _, env := range envs {
- if !strings.HasPrefix(env.Name, envPrefix) {
- return fmt.Errorf("env name should start with \"OTEL_\": %s", env.Name)
- }
+ for _, env := range envs {
+ if !strings.HasPrefix(env.Name, envPrefix) {
+ return fmt.Errorf("env name should start with \"OTEL_\": %s", env.Name)
}
}
return nil
diff --git a/config/crd/bases/opentelemetry.io_instrumentations.yaml b/config/crd/bases/opentelemetry.io_instrumentations.yaml
index 2a5789397e..0fcc3cc159 100644
--- a/config/crd/bases/opentelemetry.io_instrumentations.yaml
+++ b/config/crd/bases/opentelemetry.io_instrumentations.yaml
@@ -45,7 +45,11 @@ spec:
SDK and instrumentation.
properties:
env:
- description: Env defines env vars.
+ description: 'Env defines common env vars. There are four layers for
+ env vars'' definitions and precedence order is: `original container
+ env vars` > `language specific env vars` > `common env vars` > `instrument
+ spec configs'' vars` If the former var had been defined, then the
+ other vars would be ignored.'
items:
description: EnvVar represents an environment variable present in
a Container.
@@ -160,7 +164,11 @@ spec:
description: Java defines configuration for java auto-instrumentation.
properties:
env:
- description: Env defines env vars.
+ description: 'Env defines java specific env vars. There are four
+ layers for env vars'' definitions and precedence order is: `original
+ container env vars` > `language specific env vars` > `common
+ env vars` > `instrument spec configs'' vars` If the former var
+ had been defined, then the other vars would be ignored.'
items:
description: EnvVar represents an environment variable present
in a Container.
@@ -278,7 +286,11 @@ spec:
description: NodeJS defines configuration for nodejs auto-instrumentation.
properties:
env:
- description: Env defines env vars.
+ description: 'Env defines nodejs specific env vars. There are
+ four layers for env vars'' definitions and precedence order
+ is: `original container env vars` > `language specific env vars`
+ > `common env vars` > `instrument spec configs'' vars` If the
+ former var had been defined, then the other vars would be ignored.'
items:
description: EnvVar represents an environment variable present
in a Container.
@@ -411,7 +423,11 @@ spec:
description: Python defines configuration for python auto-instrumentation.
properties:
env:
- description: Env defines env vars.
+ description: 'Env defines python specific env vars. There are
+ four layers for env vars'' definitions and precedence order
+ is: `original container env vars` > `language specific env vars`
+ > `common env vars` > `instrument spec configs'' vars` If the
+ former var had been defined, then the other vars would be ignored.'
items:
description: EnvVar represents an environment variable present
in a Container.
diff --git a/docs/api.md b/docs/api.md
index 9d35c0bce8..86ad531765 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -89,7 +89,7 @@ InstrumentationSpec defines the desired state of OpenTelemetry SDK and instrumen
env |
[]object |
- Env defines env vars.
+ Env defines common env vars. There are four layers for env vars' definitions and precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars` If the former var had been defined, then the other vars would be ignored.
|
false |
@@ -438,7 +438,7 @@ Java defines configuration for java auto-instrumentation.
env |
[]object |
- Env defines env vars.
+ Env defines java specific env vars. There are four layers for env vars' definitions and precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars` If the former var had been defined, then the other vars would be ignored.
|
false |
@@ -718,7 +718,7 @@ NodeJS defines configuration for nodejs auto-instrumentation.
env |
[]object |
- Env defines env vars.
+ Env defines nodejs specific env vars. There are four layers for env vars' definitions and precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars` If the former var had been defined, then the other vars would be ignored.
|
false |
@@ -998,7 +998,7 @@ Python defines configuration for python auto-instrumentation.
env |
[]object |
- Env defines env vars.
+ Env defines python specific env vars. There are four layers for env vars' definitions and precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars` If the former var had been defined, then the other vars would be ignored.
|
false |
diff --git a/tests/e2e/instrumentation-java/00-install-instrumentation.yaml b/tests/e2e/instrumentation-java/00-install-instrumentation.yaml
index 6c1347b139..793f5a87f7 100644
--- a/tests/e2e/instrumentation-java/00-install-instrumentation.yaml
+++ b/tests/e2e/instrumentation-java/00-install-instrumentation.yaml
@@ -3,6 +3,17 @@ kind: Instrumentation
metadata:
name: java
spec:
+ env:
+ - name: OTEL_TRACES_EXPORTER
+ value: otlp
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://localhost:4317
+ - name: OTEL_EXPORTER_OTLP_TIMEOUT
+ value: "20"
+ - name: OTEL_TRACES_SAMPLER
+ value: parentbased_traceidratio
+ - name: OTEL_TRACES_SAMPLER_ARG
+ value: "0.85"
exporter:
endpoint: http://localhost:4317
propagators:
@@ -11,3 +22,9 @@ spec:
sampler:
type: parentbased_traceidratio
argument: "0.25"
+ java:
+ env:
+ - name: OTEL_JAVAAGENT_DEBUG
+ value: "true"
+ - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
+ value: "false"
diff --git a/tests/e2e/instrumentation-java/01-assert.yaml b/tests/e2e/instrumentation-java/01-assert.yaml
index 63b4bd8330..cdc33dcc36 100644
--- a/tests/e2e/instrumentation-java/01-assert.yaml
+++ b/tests/e2e/instrumentation-java/01-assert.yaml
@@ -10,21 +10,29 @@ spec:
containers:
- name: myapp
env:
- - name: OTEL_SERVICE_NAME
- value: my-deployment-with-sidecar
+ - name: OTEL_JAVAAGENT_DEBUG
+ value: "true"
+ - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
+ value: "false"
+ - name: JAVA_TOOL_OPTIONS
+ value: " -javaagent:/otel-auto-instrumentation/javaagent.jar"
+ - name: OTEL_TRACES_EXPORTER
+ value: otlp
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://localhost:4317
+ - name: OTEL_EXPORTER_OTLP_TIMEOUT
+ value: "20"
+ - name: OTEL_TRACES_SAMPLER
+ value: parentbased_traceidratio
+ - name: OTEL_TRACES_SAMPLER_ARG
+ value: "0.85"
+ - name: OTEL_SERVICE_NAME
+ value: my-deployment-with-sidecar
- name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME
- name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
- name: OTEL_RESOURCE_ATTRIBUTES
- name: OTEL_PROPAGATORS
value: jaeger,b3
- - name: OTEL_TRACES_SAMPLER
- value: parentbased_traceidratio
- - name: OTEL_TRACES_SAMPLER_ARG
- value: "0.25"
- - name: JAVA_TOOL_OPTIONS
- value: " -javaagent:/otel-auto-instrumentation/javaagent.jar"
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
- mountPath: /otel-auto-instrumentation
diff --git a/tests/e2e/instrumentation-nodejs/00-install-instrumentation.yaml b/tests/e2e/instrumentation-nodejs/00-install-instrumentation.yaml
index 9ea4358b9b..40459f483a 100644
--- a/tests/e2e/instrumentation-nodejs/00-install-instrumentation.yaml
+++ b/tests/e2e/instrumentation-nodejs/00-install-instrumentation.yaml
@@ -3,8 +3,27 @@ kind: Instrumentation
metadata:
name: nodejs
spec:
+ env:
+ - name: OTEL_TRACES_EXPORTER
+ value: otlp
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://localhost:4317
+ - name: OTEL_EXPORTER_OTLP_TIMEOUT
+ value: "20"
+ - name: OTEL_TRACES_SAMPLER
+ value: parentbased_traceidratio
+ - name: OTEL_TRACES_SAMPLER_ARG
+ value: "0.85"
exporter:
endpoint: http://localhost:4317
propagators:
- jaeger
- b3
+ sampler:
+ type: parentbased_traceidratio
+ argument: "0.25"
+ nodejs:
+ env:
+ - name: OTEL_NODEJS_DEBUG
+ value: "true"
+
diff --git a/tests/e2e/instrumentation-nodejs/01-assert.yaml b/tests/e2e/instrumentation-nodejs/01-assert.yaml
index b796a5b8e5..d327e85962 100644
--- a/tests/e2e/instrumentation-nodejs/01-assert.yaml
+++ b/tests/e2e/instrumentation-nodejs/01-assert.yaml
@@ -10,17 +10,27 @@ spec:
containers:
- name: myapp
env:
- - name: OTEL_SERVICE_NAME
- value: my-deployment-with-sidecar
+ - name: OTEL_NODEJS_DEBUG
+ value: "true"
+ - name: NODE_OPTIONS
+ value: " --require /otel-auto-instrumentation/autoinstrumentation.js"
+ - name: OTEL_TRACES_EXPORTER
+ value: otlp
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://localhost:4317
+ - name: OTEL_EXPORTER_OTLP_TIMEOUT
+ value: "20"
+ - name: OTEL_TRACES_SAMPLER
+ value: parentbased_traceidratio
+ - name: OTEL_TRACES_SAMPLER_ARG
+ value: "0.85"
+ - name: OTEL_SERVICE_NAME
+ value: my-deployment-with-sidecar
- name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME
- name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
- name: OTEL_RESOURCE_ATTRIBUTES
- name: OTEL_PROPAGATORS
value: jaeger,b3
- - name: NODE_OPTIONS
- value: " --require /otel-auto-instrumentation/autoinstrumentation.js"
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
- mountPath: /otel-auto-instrumentation
diff --git a/tests/e2e/instrumentation-python/00-install-instrumentation.yaml b/tests/e2e/instrumentation-python/00-install-instrumentation.yaml
index d41827bf8f..fa1fff2353 100644
--- a/tests/e2e/instrumentation-python/00-install-instrumentation.yaml
+++ b/tests/e2e/instrumentation-python/00-install-instrumentation.yaml
@@ -3,8 +3,26 @@ kind: Instrumentation
metadata:
name: python
spec:
+ env:
+ - name: OTEL_EXPORTER_OTLP_TIMEOUT
+ value: "20"
+ - name: OTEL_TRACES_SAMPLER
+ value: parentbased_traceidratio
+ - name: OTEL_TRACES_SAMPLER_ARG
+ value: "0.85"
exporter:
- endpoint: http://localhost:4318/v1/traces
+ endpoint: http://localhost:4317
propagators:
- jaeger
- b3
+ sampler:
+ type: parentbased_traceidratio
+ argument: "0.25"
+ python:
+ env:
+ - name: OTEL_LOG_LEVEL
+ value: "debug"
+ - name: OTEL_TRACES_EXPORTER
+ value: otlp_proto_http
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://localhost:4317
\ No newline at end of file
diff --git a/tests/e2e/instrumentation-python/01-assert.yaml b/tests/e2e/instrumentation-python/01-assert.yaml
index 35ea2acb80..105cfd30cd 100644
--- a/tests/e2e/instrumentation-python/01-assert.yaml
+++ b/tests/e2e/instrumentation-python/01-assert.yaml
@@ -10,19 +10,27 @@ spec:
containers:
- name: myapp
env:
+ - name: OTEL_LOG_LEVEL
+ value: "debug"
+ - name: OTEL_TRACES_EXPORTER
+ value: otlp_proto_http
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: http://localhost:4317
+ - name: PYTHONPATH
+ value: "/otel-auto-instrumentation/opentelemetry/instrumentation/auto_instrumentation:/otel-auto-instrumentation"
+ - name: OTEL_EXPORTER_OTLP_TIMEOUT
+ value: "20"
+ - name: OTEL_TRACES_SAMPLER
+ value: parentbased_traceidratio
+ - name: OTEL_TRACES_SAMPLER_ARG
+ value: "0.85"
- name: OTEL_SERVICE_NAME
value: my-deployment-with-sidecar
- - name: OTEL_EXPORTER_OTLP_ENDPOINT
- value: http://localhost:4318/v1/traces
- name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME
- name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
- name: OTEL_RESOURCE_ATTRIBUTES
- name: OTEL_PROPAGATORS
value: jaeger,b3
- - name: PYTHONPATH
- value: "/otel-auto-instrumentation/opentelemetry/instrumentation/auto_instrumentation:/otel-auto-instrumentation"
- - name: OTEL_TRACES_EXPORTER
- value: otlp_proto_http
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
- mountPath: /otel-auto-instrumentation