blob: bf14c6c62e69dc4c0d2f41abacc804b390db095a [file] [log] [blame] [view]
# Java agent injector Usage
In this example, you will learn how to use the java agent injector in three ways.
## Install injector
The java agent injector is a component of the operator, so you need to follow [Operator installation instrument](../../README.md#operator) to install the operator firstly.
## Use default configuration
At first, set the injection label in your namespace as below.
```shell
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","$(AGENT_OPTS)","-jar","/app.jar"]
```
Get injected resources as below:
```
spec:
containers:
- args:
- -jar
- $(AGENT_OPTS)
- -jar
- /app.jar
command:
- java
env:
- name: AGENT_OPTS
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.7.0-jdk8
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
```
```shell
$ 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.
```shell
$ 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.
```shell
$ 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
```
## Use annotation to override sidecar configuration
At first, set the injection label in your namespace as below.
```shell
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](../java-agent-injector.md#configure-sidecar) 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","$(AGENT_OPTS)","-jar","/app.jar"]
```
Get injected resources as below:
```
spec:
containers:
- args:
- -jar
- $(AGENT_OPTS)
- -jar
- /app.jar
command:
- java
env:
- name: AGENT_OPTS
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
```
```shell
$ 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.
```shell
$ 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.
```shell
$ 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
```
#### Use annotation to set the coverage strategy and override the agent configuration
At first, set the injection label in your namespace as below.
```shell
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](../java-agent-injector.md#use-annotations-to-overlay-default-agent-configuration) and [sidecar configuration](../java-agent-injector.md#configure-sidecar) 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","$(AGENT_OPTS)","-jar","/app.jar"]
```
Get injected resources as below:
```
spec:
containers:
- image: nginx:1.16.1
imagePullPolicy: IfNotPresent
name: nginx
- args:
- -jar
- $(AGENT_OPTS)
- -jar
- /app.jar
command:
- java
env:
- name: AGENT_OPTS
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.7.0-jdk8
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
```
```shell
$ 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.
```shell
$ 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.
```shell
$ 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
```