In this example, you will learn how to use the java agent injector in three ways.
The java agent injector is a component of the operator, so you need to follow Operator installation instrument to install the operator firstly.
At first, set the injection label in your namespace as below.
kubectl label namespace default(your namespace) swck-injection=enabled
Then add swck-java-agent-injected: "true"
in the labels of the yaml file as below.
apiVersion: apps/v1 kind: Deployment metadata: name: demo1 namespace: default spec: selector: matchLabels: app: demo1 template: metadata: labels: swck-java-agent-injected: "true" app: demo1 spec: containers: - name: demo1 image: ghcr.io/apache/skywalking-swck-spring-demo:v0.0.1 command: ["java"] args: ["-jar","/app.jar"]
Get injected resources as below:
spec: containers: - args: - -jar - /app.jar command: - java env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/sky/agent/skywalking-agent.jar image: ghcr.io/apache/skywalking-swck-spring-demo:v0.0.1 name: demo1 - mountPath: /sky/agent name: sky-agent - mountPath: /sky/agent/config name: java-agent-configmap-volume initContainers: - args: - -c - mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent command: - sh image: apache/skywalking-java-agent:8.8.0-java8 name: inject-skywalking-agent volumeMounts: - mountPath: /sky/agent name: sky-agent volumes: - emptyDir: {} name: sky-agent - configMap: name: skywalking-swck-java-agent-configmap name: java-agent-configmap-volume
$ kubectl get configmap skywalking-swck-java-agent-configmap -n default(your namespace) NAME DATA AGE skywalking-swck-java-agent-configmap 1 61s
Then you can get the final agent configuration and the pod as below.
$ kubectl get javaagent NAME PODSELECTOR SERVICENAME BACKENDSERVICE app-demo1-javaagent app=demo1 Your_ApplicationName 127.0.0.1:11800 $ kubectl get pod -l app=demo1(the podSelector) NAME READY STATUS RESTARTS AGE demo1-8554b96b4c-6czv7 1/1 Running 0 85s
Get the javaagent's yaml for more datails.
$ kubectl get javaagent app-demo1-javaagent -oyaml apiVersion: operator.skywalking.apache.org/v1alpha1 kind: JavaAgent metadata: creationTimestamp: "2021-10-15T04:52:46Z" generation: 1 name: app-demo1-javaagent namespace: default ownerReferences: - apiVersion: apps/v1 blockOwnerDeletion: true controller: true kind: ReplicaSet name: demo1-8554b96b4c uid: f3d71b5c-1e26-401a-8d0d-055d1e89bc64 resourceVersion: "455104" selfLink: /apis/operator.skywalking.apache.org/v1alpha1/namespaces/default/javaagents/app-demo1-javaagent uid: 2bf828d6-4f83-4c7d-9356-83066ae334d3 spec: agentConfiguration: agent.service_name: Your_ApplicationName collector.backend_service: 127.0.0.1:11800 backendService: 127.0.0.1:11800 podSelector: app=demo1 serviceName: Your_ApplicationName status: creationTime: "2021-10-15T04:52:46Z" expectedInjectiedNum: 1 lastUpdateTime: "2021-10-15T04:52:49Z" realInjectedNum: 1
At first, set the injection label in your namespace as below.
kubectl label namespace default(your namespace) swck-injection=enabled
Then add swck-java-agent-injected: "true"
in the labels of yaml file and add the sidecar configuration to the annotations as below.
apiVersion: apps/v1 kind: Deployment metadata: name: demo2 namespace: default spec: selector: matchLabels: app: demo2 template: metadata: labels: swck-java-agent-injected: "true" app: demo2 annotations: sidecar.skywalking.apache.org/initcontainer.Name: "test-inject-agent" sidecar.skywalking.apache.org/initcontainer.Image: "apache/skywalking-java-agent:8.5.0-jdk8" sidecar.skywalking.apache.org/initcontainer.Command: "sh" sidecar.skywalking.apache.org/initcontainer.args.Option: "-c" sidecar.skywalking.apache.org/initcontainer.args.Command: "mkdir -p /skytest/agent && cp -r /skywalking/agent/* /skytest/agent" sidecar.skywalking.apache.org/sidecarVolumeMount.MountPath: "/skytest/agent" sidecar.skywalking.apache.org/configmapVolumeMount.MountPath: "/skytest/agent/config" sidecar.skywalking.apache.org/configmapVolume.ConfigMap.Name: "newconfigmap" sidecar.skywalking.apache.org/env.Value: "-javaagent:/skytest/agent/skywalking-agent.jar" spec: containers: - name: demo2 image: ghcr.io/apache/skywalking-swck-spring-demo:v0.0.1 command: ["java"] args: ["-jar","/app.jar"]
Get injected resources as below:
spec: containers: - args: - -jar - /app.jar command: - java env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/skytest/agent/skywalking-agent.jar image: ghcr.io/apache/skywalking-swck-spring-demo:v0.0.1 name: demo2 - mountPath: /skytest/agent name: sky-agent - mountPath: /skytest/agent/config name: java-agent-configmap-volume initContainers: - args: - -c - mkdir -p /skytest/agent && cp -r /skywalking/agent/* /skytest/agent command: - sh image: apache/skywalking-java-agent:8.5.0-jdk8 name: test-inject-agent volumeMounts: - mountPath: /skytest/agent name: sky-agent volumes: - emptyDir: {} name: sky-agent - configMap: name: newconfigmap name: java-agent-configmap-volume
$ kubectl get configmap newconfigmap -n default NAME DATA AGE newconfigmap 1 2m29s
Then you can get the final agent configuration and the pod as below.
$ kubectl get javaagent NAME PODSELECTOR SERVICENAME BACKENDSERVICE app-demo2-javaagent app=demo2 Your_ApplicationName 127.0.0.1:11800 $ kubectl get pod -l app=demo2(the podSelector) NAME READY STATUS RESTARTS AGE demo2-74b65f98b9-k5wvd 1/1 Running 0 3m28s
Get the javaagent's yaml for more datails.
$ kubectl get javaagent app-demo2-javaagent -oyaml apiVersion: operator.skywalking.apache.org/v1alpha1 kind: JavaAgent metadata: creationTimestamp: "2021-10-15T05:10:16Z" generation: 1 name: app-demo2-javaagent namespace: default ownerReferences: - apiVersion: apps/v1 blockOwnerDeletion: true controller: true kind: ReplicaSet name: demo2-74b65f98b9 uid: cbc2c680-4f84-469a-bb43-fc48161d6958 resourceVersion: "458626" selfLink: /apis/operator.skywalking.apache.org/v1alpha1/namespaces/default/javaagents/app-demo2-javaagent uid: 7c59aab7-30fc-4122-8b39-4cba2d1711b5 spec: agentConfiguration: agent.service_name: Your_ApplicationName collector.backend_service: 127.0.0.1:11800 backendService: 127.0.0.1:11800 podSelector: app=demo2 serviceName: Your_ApplicationName status: creationTime: "2021-10-15T05:10:16Z" expectedInjectiedNum: 1 lastUpdateTime: "2021-10-15T05:10:18Z" realInjectedNum: 1
At first, set the injection label in your namespace as below.
kubectl label namespace default(your namespace) swck-injection=enabled
Then add swck-java-agent-injected: "true"
in the labels of yaml file and agent configuration and sidecar configuration to annotations as below.
apiVersion: apps/v1 kind: Deployment metadata: name: demo3 namespace: default spec: replicas: 3 selector: matchLabels: app: demo3 template: metadata: name: inject-demo3 labels: swck-java-agent-injected: "true" app: demo3 annotations: strategy.skywalking.apache.org/inject.Container: "demo" strategy.skywalking.apache.org/agent.Overlay: "true" agent.skywalking.apache.org/agent.service_name: "app" agent.skywalking.apache.org/agent.sample_n_per_3_secs: "6" agent.skywalking.apache.org/agent.class_cache_mode: "MEMORY" agent.skywalking.apache.org/agent.ignore_suffix: "'jpg,.jpeg'" plugins.skywalking.apache.org/plugin.mount: "'plugins,activations'" plugins.skywalking.apache.org/plugin.mongodb.trace_param: "true" plugins.skywalking.apache.org/plugin.influxdb.trace_influxql: "false" optional.skywalking.apache.org: "trace|webflux|cloud-gateway-2.1.x" optional-reporter.skywalking.apache.org: "kafka" namespace: default spec: containers: - name: demo3 image: ghcr.io/apache/skywalking-swck-spring-demo:v0.0.1 command: ["java"] args: ["-jar","/app.jar"]
Get injected resources as below:
spec: containers: - image: nginx:1.16.1 imagePullPolicy: IfNotPresent name: nginx - args: - -jar - /app.jar command: - java env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/sky/agent/skywalking-agent.jar=agent.ignore_suffix='jpg,.jpeg',agent.class_cache_mode=MEMORY,agent.sample_n_per_3_secs=6,agent.service_name=app,plugin.mount='plugins,activations',plugin.influxdb.trace_influxql=false,plugin.mongodb.trace_param=true image: ghcr.io/apache/skywalking-swck-spring-demo:v0.0.1 name: demo3 - mountPath: /sky/agent name: sky-agent - mountPath: /sky/agent/config name: java-agent-configmap-volume initContainers: - args: - -c - mkdir -p /sky/agent && cp -r /skywalking/agent/* /sky/agent && cd /sky/agent/optional-plugins/&& ls | grep -E "trace|webflux|cloud-gateway-2.1.x" | xargs -i cp {} /sky/agent/plugins/ && cd /sky/agent/optional-reporter-plugins/&& ls | grep -E "kafka" | xargs -i cp {} /sky/agent/plugins/ command: - sh image: apache/skywalking-java-agent:8.8.0-java8 name: inject-skywalking-agent volumeMounts: - mountPath: /sky/agent name: sky-agent volumes: - emptyDir: {} name: sky-agent - configMap: name: skywalking-swck-java-agent-configmap name: java-agent-configmap-volume
$ kubectl get configmap skywalking-swck-java-agent-configmap -n default NAME DATA AGE skywalking-swck-java-agent-configmap 1 17s
Then you can get the final agent configuration and the pod as below.
$ kubectl get javaagent NAME PODSELECTOR SERVICENAME BACKENDSERVICE app-demo3-javaagent app=demo3 app 127.0.0.1:11800 $ kubectl get pod -l app=demo3(the podSelector) NAME READY STATUS RESTARTS AGE demo3-69bff546df-55w8c 1/1 Running 0 57s demo3-69bff546df-mn5fq 1/1 Running 0 57s demo3-69bff546df-skklk 1/1 Running 0 57s
Get the javaagent's yaml for more datails.
$ kubectl get javaagent app-demo3-javaagent -oyaml apiVersion: operator.skywalking.apache.org/v1alpha1 kind: JavaAgent metadata: creationTimestamp: "2021-10-15T05:21:06Z" generation: 1 name: app-demo3-javaagent namespace: default ownerReferences: - apiVersion: apps/v1 blockOwnerDeletion: true controller: true kind: ReplicaSet name: demo3-69bff546df uid: 1f04a239-0247-4f5c-967a-64009adae42c resourceVersion: "461000" selfLink: /apis/operator.skywalking.apache.org/v1alpha1/namespaces/default/javaagents/app-demo3-javaagent uid: be35588e-9b2d-4528-90df-c1a630616632 spec: agentConfiguration: agent.class_cache_mode: MEMORY agent.ignore_suffix: '''jpg,.jpeg''' agent.sample_n_per_3_secs: "6" agent.service_name: app collector.backend_service: 127.0.0.1:11800 optional-plugin: trace|webflux|cloud-gateway-2.1.x optional-reporter-plugin: kafka plugin.influxdb.trace_influxql: "false" plugin.mongodb.trace_param: "true" plugin.mount: '''plugins,activations''' backendService: 127.0.0.1:11800 podSelector: app=demo3 serviceName: app status: creationTime: "2021-10-15T05:21:06Z" expectedInjectiedNum: 3 lastUpdateTime: "2021-10-15T05:21:10Z" realInjectedNum: 3