用途
该技能用于在 Kubernetes 集群上启用 Datadog 的单步插桩(Single Step Instrumentation,SSI),自动为应用接入 APM 追踪,无需修改应用代码。
主要能力
- 通过扩展现有 DatadogAgent 资源来配置 APM 插桩,不创建独立清单。
- 支持四种配置范围:集群范围(默认)、指定命名空间、集群范围加排除命名空间、指定工作负载。
- 在配置前检测应用依赖清单中是否已存在 ddtrace、dd-trace 或 OpenTelemetry SDK,避免 SSI 静默失效。
- 提示用户可选的统一服务标签(Unified Service Tags,UST),用于在 Datadog 中实现 service/env/version 标记。
- 检查事件驱动服务,判断是否适合启用 Data Streams Monitoring(DSM)。
- 重启应用 Pod 以完成插桩注入,并验证 init 容器是否出现。
使用方式
技能会从集群中自动发现所需变量(如 AGENT_NAMESPACE、APP_NAMESPACE、TARGET_LANGUAGES、DEPLOYMENT_NAME、APP_LABEL、CLUSTER_NAME、ENV、SERVICE_NAME、VERSION),不要求用户提供可自行获取的信息。
主要步骤:
- 若检测到已有手动插桩,先移除相关导入和依赖包,重建镜像并重新加载到集群,然后重启 Pod。
- 在 DatadogAgent 清单中扩展 APM 配置,根据用户需求选择配置范围。
- 告知用户统一服务标签(UST)的作用及如何应用,应用标签需用户确认。
- 检查事件驱动服务,判断是否适合启用 DSM。
- 重启应用 Pod,确认 init 容器(如 datadog-lib-<language>-init)出现。
- 完成后自动进入 verify-ssi 验证步骤。
配置示例(集群范围):
features:
apm:
instrumentation:
enabled: true
指定命名空间:
features:
apm:
instrumentation:
enabled: true
enabledNamespaces:
- <APP_NAMESPACE>
集群范围加排除:
features:
apm:
instrumentation:
enabled: true
disabledNamespaces:
- jenkins
- kube-system
指定工作负载:
features:
apm:
instrumentation:
enabled: true
targets:
- name: <TARGET_NAME>
namespaceSelector:
matchNames:
- <APP_NAMESPACE>
ddTraceVersions:
<LANGUAGE>: "<MAJOR_VERSION>"
注意:ddTraceVersions 仅在 targets[] 条目内有效,不能与 enabledNamespaces 同时使用。
适用场景
- 在 Kubernetes 集群上启用 APM。
- 使用 Datadog 追踪对 Kubernetes 应用进行插桩。
- 设置单步插桩(SSI)。
限制
- 不适用于 Datadog Agent 尚未安装的情况,需先运行 agent-install。
- 不适用于验证 SSI 的场景,应使用 verify-ssi。
- 不适用于启用 Data Streams Monitoring,应使用 enable-dsm。
- 不适用于启用 Profiler 或 AppSec,应使用 dd-apm-k8s-sdk-features。
- 环境要求:Kubernetes v1.20+、仅 Linux 节点池(Windows Pod 需显式排除命名空间)、非 ECS Fargate、非加固 SELinux 环境、非极小 VM 实例(如 t2.micro)、未强制 PodSecurity baseline 或 restricted 策略。
- 语言与运行时要求:应用语言为 Java、Python、Ruby、Node.js、.NET、PHP 之一;运行时版本在 SSI 支持范围内;Node.js 应用不使用 ESM;Java 应用未使用 -javaagent JVM 标志。
- 若依赖清单中存在 ddtrace、dd-trace 或 OpenTelemetry SDK,即使代码中未导入,SSI 也会在运行时静默禁用,需先移除并重建镜像。
- 安全约束:不得将原始 API 密钥写入任何文件或聊天消息;不得对 Datadog 资源使用 default 命名空间;不得直接修改 admissionController 设置;不得在应用清单中添加 APM 配置;未经用户确认不得运行 kubectl delete;向注册表执行 docker push 需用户确认;不得使用 kubectl patch 应用 UST 标签或任何 Deployment 更改。