SuperAPI AI 工具集

enable-ssi

部署与运维

查看项目

更新于 10-15 14:11

技能介绍

用途

该技能用于在 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),不要求用户提供可自行获取的信息。

主要步骤:

  1. 若检测到已有手动插桩,先移除相关导入和依赖包,重建镜像并重新加载到集群,然后重启 Pod。
  2. 在 DatadogAgent 清单中扩展 APM 配置,根据用户需求选择配置范围。
  3. 告知用户统一服务标签(UST)的作用及如何应用,应用标签需用户确认。
  4. 检查事件驱动服务,判断是否适合启用 DSM。
  5. 重启应用 Pod,确认 init 容器(如 datadog-lib-<language>-init)出现。
  6. 完成后自动进入 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 更改。