如何使用:
https://us5.datadoghq.com/apm/service-setup
java语言只需要在chart定义里加上标签,不需要改代码和镜像:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
tags.datadoghq.com/env: <env>
tags.datadoghq.com/service: <service>
tags.datadoghq.com/version: <version>
spec:
template:
metadata:
labels:
tags.datadoghq.com/env: <env>
tags.datadoghq.com/service: <service>
tags.datadoghq.com/version: <version>
admission.datadoghq.com/enabled: "true"
admission.datadoghq.com/config.mode: "socket"
annotations:
admission.datadoghq.com/java-lib.version: v1.10.0
spec:
containers:
- name: <CONTAINER_NAME>
image: <CONTAINER_IMAGE>/<TAG>
env:
- name: DD_LOGS_INJECTION
value: "true"
go语言的除了要加标签,还需要改代码:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
tags.datadoghq.com/env: <env>
tags.datadoghq.com/service: <service>
tags.datadoghq.com/version: <version>
spec:
template:
metadata:
labels:
tags.datadoghq.com/env: <env>
tags.datadoghq.com/service: <service>
tags.datadoghq.com/version: <version>
spec:
volumes:
- hostPath:
path: /var/run/datadog/
name: apmsocketpath
containers:
- name: <CONTAINER_NAME>
image: <CONTAINER_IMAGE>/<TAG>
volumeMounts:
- name: apmsocketpath
mountPath: /var/run/datadog
env:
- name: DD_ENV
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/env']
- name: DD_SERVICE
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/service']
- name: DD_VERSION
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/version']
代码:
https://docs.datadoghq.com/tracing/trace_collection/custom_instrumentation/go/
使用效果
service map:
image.png
我们发现这个map有点不对,godemo也有调用cktest,为什么这里没显示出来?后面有分析
image.png
查看trace:
image.png
我们把h2的去勾选了
image.png
image.png
java服务的调用链抓的比较全,能看到java调用go的
但是go语言的就不行了,看不到go调用java的,这就是service map里显示不全的原因
image.png
为什么看不到go调用其他服务的呢?因为go的不支持auto instrument,需要手动打点。我们的demo代码里并未在发起http调用的地方添加打点,所以没有跟踪到
原理分析
Java的原理和swck是一样的,也是通过webhook 的init container注入agent
- name: DD_TRACE_AGENT_URL
value: unix:///var/run/datadog/apm.socket- name: DD_LOGS_INJECTION
value: "true" - name: JAVA_TOOL_OPTIONS
value: ' -javaagent:/datadog-lib/dd-java-agent.jar'
- name: DD_LOGS_INJECTION
go语言并未实现自动注入,需要用sdk手动打点。这一点比odigos的自动打点要落后一点。









网友评论