28. 链路追踪-skywalking-javaagent
针对java应用,skywalking提供了一个方案,使用javaagent技术实现无侵入性的织入skywalking client到我们的java应用中实现对主流RPC及中间件的链路信息抽取。
skywalking的使用这里不进行展开,我们主要讨论一下在k8s中,如何组织集成skywalking javaagent 到我们的java应用容器中。
initContainers方式集成
- 获取skywalking-java-agent镜像
docker pull apache/skywalking-java-agent:8.5.0-alpine
docker tag apache/skywalking-java-agent:8.5.0-alpine harbor.hzwod.com/public/skywalking-java-agent:8.5.0-alpine
- pod资源配置方式
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
spec:
selector:
matchLabels:
name: demo
template:
metadata:
name: demo
labels:
name: demo
spec:
initContainers:
- name: skywalking-init
image: harbor.hzwod.com/public/skywalking-java-agent:8.5.0-alpine
imagePullPolicy: Always
volumeMounts:
- name: skywalking-agent
mountPath: /agent
command: [ "/bin/sh" ]
args: [ "-c", "cp -R /skywalking/agent /agent/" ]
containers:
- name: app-container
image: [my-java-application-image]
volumeMounts:
- name: skywalking-agent
mountPath: /skywalking
env:
- name: JAVA_TOOL_OPTIONS
value: "-javaagent:/skywalking/agent/skywalking-agent.jar"
- name: SW_AGENT_NAME
value: [myapp-name]
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: hzw-od-sw-skywalking-oap.skywalking-ns:11800
volumes:
- name: skywalking-agent
emptyDir: {}
[my-java-application-image]
应用镜像
[myapp-name]
skywalking中该应用显示的名字
hzw-od-sw-skywalking-oap.skywalking-ns
为oap svc在coredns中的域名
说明:
- 通过initContainers将skywalking-java-agent容器引入并通过volumes将容器内的skywalking-agent内容共享并挂载到应用容器的
/skywalking目录下
- 应用容器通过JAVA_TOOL_OPTIONS 添加
-javaagent:/skywalking/agent/skywalking-agent.jar
启动参数指定目标javaagent - SW_AGENT_NAME变量指定程序在skywalking中显示的名称
- SW_AGENT_COLLECTOR_BACKEND_SERVICES 变量指定skywalking服务端地址