# Enhance Applications Non-Intrusively with Operators Currently, only Java, Node.js, Python, .NET, and Golang support non-intrusive integration through the Operator approach. ## Prerequisites Please ensure that the Insight Agent is ready. If not, please refer to [Install insight-agent for data collection](../install/install-agent.md) and make sure the following three items are ready: - Enable trace functionality for Insight Agent - Check if the address and port for trace data are correctly filled - Ensure that the Pods corresponding to deployment/insight-agent-opentelemetry-operator and deployment/insight-agent-opentelemetry-collector are ready ## Install Instrumentation CR !!! tip Starting from Insight v0.22.0, there is no longer a need to manually install the Instrumentation CR. Install it in the insight-system namespace. There are some minor differences between different versions. === "Insight v0.21.x" ```bash K8S_CLUSTER_UID=$(kubectl get namespace kube-system -o jsonpath='{.metadata.uid}') kubectl apply -f - <- ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java command: - cp - /javaagent.jar - /otel-auto-instrumentation/javaagent.jar resources: {} volumeMounts: - name: opentelemetry-auto-instrumentation mountPath: /otel-auto-instrumentation - name: kube-api-access-sp2mz readOnly: true mountPath: /var/run/secrets/kubernetes.io/serviceaccount terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: Always containers: - name: myapp image: ghcr.io/pavolloffay/spring-petclinic:latest env: - name: OTEL_JAVAAGENT_DEBUG value: 'true' - name: OTEL_INSTRUMENTATION_JDBC_ENABLED value: 'true' - name: SPLUNK_PROFILER_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://insight-agent-opentelemetry-collector.svc.cluster.local:4317 - name: OTEL_EXPORTER_OTLP_TIMEOUT value: '20' - name: OTEL_TRACES_SAMPLER value: parentbased_traceidratio - name: OTEL_TRACES_SAMPLER_ARG value: '0.85' - name: SPLUNK_TRACE_RESPONSE_HEADER_ENABLED value: 'true' - name: OTEL_SERVICE_NAME value: my-deployment-with-sidecar - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: OTEL_RESOURCE_ATTRIBUTES_POD_UID valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.uid - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - name: OTEL_RESOURCE_ATTRIBUTES value: >- k8s.container.name=myapp,k8s.deployment.name=my-deployment-with-sidecar,k8s.deployment.uid=8de6929d-dda0-436c-bca1-604e9ca7ea4e,k8s.namespace.name=default,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),k8s.pod.uid=$(OTEL_RESOURCE_ATTRIBUTES_POD_UID),k8s.replicaset.name=my-deployment-with-sidecar-565bd877dd,k8s.replicaset.uid=190d5f6e-ba7f-4794-b2e6-390b5879a6c4 - name: OTEL_PROPAGATORS value: jaeger,b3 resources: {} volumeMounts: - name: kube-api-access-sp2mz readOnly: true mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: opentelemetry-auto-instrumentation mountPath: /otel-auto-instrumentation terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: Always restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst serviceAccountName: default serviceAccount: default nodeName: k8s-master3 securityContext: runAsUser: 1000 runAsGroup: 3000 fsGroup: 2000 schedulerName: default-scheduler tolerations: - key: node.kubernetes.io/not-ready operator: Exists effect: NoExecute tolerationSeconds: 300 - key: node.kubernetes.io/unreachable operator: Exists effect: NoExecute tolerationSeconds: 300 priority: 0 enableServiceLinks: true preemptionPolicy: PreemptLowerPriority ``` ## Trace query How to query the connected services, refer to [Trace Query](../../user-guide/trace/trace.md).