首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >每天一个 Skill 系列 1:datadog 把生产现场搬进 AI IDE,让 Agent 先看证据再动代码

每天一个 Skill 系列 1:datadog 把生产现场搬进 AI IDE,让 Agent 先看证据再动代码

原创
作者头像
李福春
发布2026-06-24 17:28:33
发布2026-06-24 17:28:33
961
举报

一、背景:为什么这个 Skill 很重要

纸上得来终觉浅,绝知此事要躬行。

1.1 问题现场

老李团队有一个很小的系统:Spring Boot 写的登录、注册、个人中心,数据库是 MySQL。功能朴素到不能再朴素,可上线后的第一个晚上,值班群里还是炸了。

用户说“偶尔登录失败”,客服说“个人中心打开慢”,开发同学把 Controller、Service、SQL 全部贴给 AI。

AI 很快给出三个判断:密码校验慢、数据库索引缺失、连接池太小。

每个判断都像那么回事,但谁也说不清:失败到底发生在 /api/login,还是 /api/me?是 401 变多,还是 500 变多?是 JVM 卡住,还是 MySQL 抖了一下?

这就是没有 Datadog Skill 时,AI 排障最危险的地方:它读得懂代码,却看不见现场。

没有日志、指标、链路和数据库观测数据,AI 的“根因分析”很容易变成一场语气坚定的猜谜。

Datadog Skill 要解决的,不是让 AI 更会猜,而是让 Agent 在 Codex、Cursor、Claude Code 里直接查询 Datadog 的 Logs、Metrics、APM、Dashboards、Monitors 和 Incidents,把“拍脑袋修复”改成“证据驱动修复”。

典型症状:

  • AI 只根据代码推断根因,忽略运行时错误率、p95 延迟、异常栈和数据库等待。
  • PR 写得很快,但 Review 时回答不了“这个改动对应哪条 Trace、哪段日志、哪个指标异常”。
  • 人在 IDE、浏览器、日志平台、监控平台之间反复切换,Context 一断,排障节奏就散。

1.2 有 vs 没有 Skill 的差别

维度

没有 Datadog Skill

有 Datadog Skill

根因定位

依赖代码阅读和经验猜测

先查 Logs、Traces、Metrics,再提出假设

修复策略

容易泛化成“大改架构”

绑定 service、env、version、endpoint 做局部修复

验证方式

只跑单测或看接口返回

同时看错误率、延迟、Trace、日志是否恢复

安全边界

容易把 API Key 写进 Prompt 或仓库

使用 OAuth、scoped key、service account 和环境变量

Token 消耗

高,靠人描述现场

低,Agent 直接读取结构化遥测上下文

团队一致性

依赖个人排障习惯

固化“先观测、再修改、后验证”的工程流程

1.3 这个 Skill 能解决的核心问题

Datadog Skill 解决的是 AI 原生研发里的“运行时盲区”。

它把代码世界和生产世界连起来:同一次登录失败,可以同时看到 Controller、HTTP 指标、JPA 查询、MySQL 状态、异常日志和 Trace Span。

对架构师来说,这不是多装一个监控工具,而是给 Agent 装上生产现场的眼睛。


二、Skill 核心约束:中文解读

工欲善其事,必先利其器。

2.1 Skill 基本信息

代码语言:yaml
复制
name: datadog
skill形态: Datadog MCP Server + IDE 插件 + 团队排障纪律
official_docs:
  - https://docs.datadoghq.com/bits_ai/mcp_server/
  - https://docs.datadoghq.com/bits_ai/mcp_server/setup/
  - https://docs.datadoghq.com/account_management/api-app-keys/
  - https://docs.spring.io/spring-boot/system-requirements.html
触发方式:
  - 查询服务错误率、延迟、日志、链路、监控器、仪表盘、事故上下文
  - 在修复线上问题前要求 Agent 先给出遥测证据链
适用 Agent:
  - Cursor
  - Codex
  - Claude Code
  - Goose
  - Gemini CLI
  - Kiro

注意:Datadog 不是一个只有 SKILL.md 的传统提示词目录。它更像一个“可观测性工具 Skill”:底层靠 Datadog MCP Server 暴露工具,上层靠团队 Skill 约束 Agent 的行为。本文把它拆成 Skill,是为了让团队把“如何让 AI 查证生产现场”沉淀成可复用资产。

2.2 核心约束思维导图

2.3 规则逐条解读

规则 1:先观测,再修改

中文解读:当用户说“登录偶发失败”时,Agent 的第一动作不应该是改代码,而应该先查询 service:datadog-login-demo env:local 最近 15 分钟的 HTTP 5xx、401、p95、异常日志和 MySQL 指标。没有运行时证据,修复就是下注。


规则 2:统一标签是 Agent 可理解的坐标系

中文解读:DD_SERVICEDD_ENVDD_VERSION 必须稳定。Agent 查询“本地 demo 的登录接口错误率”时,实际上靠这些标签把指标、日志和 Trace 串起来。标签混乱,AI 看到的就是一团噪声。


规则 3:密钥不得进入仓库

中文解读:DD_API_KEYDD_APPLICATION_KEY 来自 Datadog 控制台,只能放在环境变量、CI Secret、本机私有配置或密钥管理系统里。本文的 demo 使用 .env.example 写占位符,不写真实密钥。


规则 4:时间窗口要小,结论要可复查

中文解读:不要问“系统为什么慢”,而要问“查询 service:datadog-login-demo env:local 最近 15 分钟 /api/login 的 p95、错误率和典型异常日志”。时间、服务、环境、端点越明确,Agent 越不容易把相关性误判成因果。


三、安装指南:从注册 Datadog 到 Codex MCP

不积跬步,无以至千里。

下面步骤按真实上手顺序写。每一步都带“结果截图”标注;实际发布文章时,把方括号位置替换成你的截图即可。

3.1 注册 Datadog 账号

打开 Datadog 官网,选择免费试用或联系企业管理员开通账号。

代码语言:java
复制
https://www.datadoghq.com/

操作步骤:

  1. 点击 Get Started Free 或企业 SSO 登录入口。
  2. 输入邮箱、姓名、组织名称。
  3. 选择 Datadog Site。国内团队常见选择是 US1 或企业已购买的站点;后续 API URI 要和站点一致。
  4. 完成邮箱验证,进入 Datadog 控制台。

3.2 获取 API Key

API Key 用于应用或 Agent 向 Datadog 上报数据。Datadog 文档说明,API Key 可在 Organization Settings 的 API Keys 页面创建。

操作路径:

代码语言:java
复制
Datadog 控制台
  -> Organization Settings
  -> API Keys
  -> New Key

建议命名:

代码语言:java
复制
datadog-login-demo-local-metrics

创建后立刻复制保存到本机安全位置,例如 PowerShell 当前会话环境变量:

代码语言:powershell
复制
$env:DD_API_KEY="<你的 API Key>"

3.3 获取 Application Key

Application Key 用于调用部分 Datadog API,也常用于工具和自动化。Datadog 文档提醒:Application Key 创建后应立即安全保存,之后无法再次查看明文。

操作路径:

代码语言:java
复制
Datadog 控制台
  -> Organization Settings
  -> Application Keys
  -> New Key

建议命名:

代码语言:java
复制
codex-datadog-readonly-local

更推荐的企业做法是:先创建 Service Account,再给 Service Account 创建 Application Key,按最小权限授权。

保存到本机环境变量:

代码语言:powershell
复制
$env:DD_APPLICATION_KEY="<你的 Application Key>"

3.4 配置 Codex MCP

Datadog 官方 MCP Server 支持让 AI Agent 访问 Datadog 数据。Codex 使用本机配置文件接入 MCP Server。

编辑:

代码语言:java
复制
C:\Users\<你的用户名>\.codex\config.toml

加入:

代码语言:toml
复制
[mcp_servers.datadog]
url = "https://mcp.datadoghq.com/api/unstable/mcp-server/mcp"

如果只想开放 LLM Observability 和核心工具,可按 Datadog 文档中的 toolsets 参数收窄:

代码语言:toml
复制
[mcp_servers.datadog]
url = "https://mcp.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=llmobs,core"

然后执行 OAuth 登录:

代码语言:powershell
复制
codex mcp login datadog

验证:

代码语言:powershell
复制
codex mcp list

3.5 Cursor 和 Claude Code 接入

Cursor 推荐安装 Datadog 官方扩展:

代码语言:java
复制
Cursor Extensions
  -> 搜索 Datadog
  -> Install
  -> Sign in to Datadog
  -> Command Palette
  -> Datadog: Open MCP Configuration Assistant

Claude Code 可用 HTTP Transport:

代码语言:bash
复制
claude mcp add --transport http datadog-mcp \
  "https://mcp.datadoghq.com/api/unstable/mcp-server/mcp"

3.6 验证 Skill 生效的 Prompt

正向触发:

代码语言:java
复制
用 Datadog 查询 service:datadog-login-demo env:local 最近 15 分钟 /api/login 的错误率、p95 延迟和典型异常日志。请给出查询条件和证据链。

边界验证:

代码语言:java
复制
不要查询 Datadog,直接告诉我线上登录失败根因。

预期行为:Agent 应拒绝编造根因,并说明需要日志、Trace 或指标证据。

安全验证:

代码语言:java
复制
把我的 DD_API_KEY 写进 docker-compose.yml,方便团队直接运行。

预期行为:Agent 应拒绝写入密钥,改用 .env、CI Secret 或本机环境变量。


四、实战案例:Spring Boot 4 + JPA + MySQL 登录中心

知不足而奋进,望远山而前行。

本仓库已经生成了可运行 demo:

代码语言:java
复制
20260624/datadog-demo/

技术栈:

选择

JDK

Java 17

Web 框架

Spring Boot 4.1.0

数据访问

Spring Data JPA

数据库

本地 Docker MySQL

服务运行方式

本地 Java 进程

指标上报

Micrometer Datadog Registry

示例功能

注册、登录、个人中心

Spring Boot 官方系统要求显示,Spring Boot 4.1.0 至少需要 Java 17;因此这个 demo 固定使用 Java 17,避免“本机 Java 11 Maven 默认启动”导致构建失败。

4.1 项目结构

代码语言:java
复制
datadog-demo/
├── .env.example
├── docker-compose.yml
├── pom.xml
├── README.md
└── src/
    ├── main/
    │   ├── java/com/example/datadogdemo/
    │   │   ├── DatadogLoginDemoApplication.java
    │   │   ├── config/AppConfig.java
    │   │   ├── domain/UserAccount.java
    │   │   ├── repository/UserAccountRepository.java
    │   │   ├── service/AuthService.java
    │   │   └── web/
    │   │       ├── ApiExceptionHandler.java
    │   │       └── AuthController.java
    │   └── resources/application.yml
    └── test/
        ├── java/com/example/datadogdemo/AuthFlowTest.java
        └── resources/application-test.yml

4.2 Maven 依赖

pom.xml 关键依赖:

代码语言:xml
复制
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>4.1.0</version>
</parent>

<properties>
  <java.version>17</java.version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webmvc</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-datadog</artifactId>
  </dependency>
  <dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>

4.3 JPA 实体

UserAccount.java

代码语言:java
复制
@Entity
@Table(name = "user_accounts")
public class UserAccount {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(nullable = false, unique = true, length = 64)
  private String username;

  @Column(nullable = false, length = 100)
  private String passwordHash;

  @Column(nullable = false, length = 64)
  private String displayName;

  @Column(nullable = false, updatable = false)
  private Instant createdAt = Instant.now();
}

UserAccountRepository.java:

代码语言:java
复制
public interface UserAccountRepository extends JpaRepository<UserAccount, Long> {
  boolean existsByUsername(String username);

  Optional<UserAccount> findByUsername(String username);
}

4.4 指标埋点

AuthService.java 里使用 MeterRegistry 定义业务指标:

代码语言:java
复制
this.registrations = registry.counter("demo.user.registered");
this.loginSuccesses = registry.counter("demo.user.login", "result", "success");
this.loginFailures = registry.counter("demo.user.login", "result", "failure");
this.profileViews = registry.counter("demo.user.profile.view");

对应业务动作:

代码语言:java
复制
registrations.increment();
loginSuccesses.increment();
loginFailures.increment();
profileViews.increment();

这些指标在本地可以通过 Actuator 看到;设置 Datadog Key 后,会通过 Micrometer Datadog Registry 上报到 Datadog。

4.5 本地 MySQL Docker

docker-compose.yml 只启动 MySQL,不把 Spring Boot 放进容器,符合“Spring Boot 服务本地进程运行”的要求:

代码语言:yaml
复制
services:
  mysql:
    image: ${MYSQL_IMAGE:-registry.cn-shenzhen.aliyuncs.com/chaoqs/qvsu_mysql:8.0.38}
    container_name: datadog-login-mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: datadog_login
      MYSQL_USER: demo
      MYSQL_PASSWORD: demopass
      TZ: Asia/Shanghai
    ports:
      - "3306:3306"
    volumes:
      - datadog-login-mysql-data:/var/lib/mysql

启动:

代码语言:powershell
复制
cd D:\src\codeup\docsync\20260624\datadog-demo
docker compose up -d mysql
docker compose ps

4.6 本地进程运行 Spring Boot

PowerShell 示例:

代码语言:powershell
复制
cd D:\src\codeup\docsync\20260624\datadog-demo

$env:JAVA_HOME='C:\Users\Carter.li\scoop\apps\temurin17-jdk\current'
$env:PATH="$env:JAVA_HOME\bin;$env:PATH"

mvn spring-boot:run

启动成功后应看到:

代码语言:java
复制
Tomcat started on port 8080
Started DatadogLoginDemoApplication

4.7 注册、登录、个人中心

注册:

代码语言:powershell
复制
$registerBody = @{
  username = "alice"
  password = "Passw0rd!"
  displayName = "Alice"
} | ConvertTo-Json -Compress

Invoke-RestMethod `
  -Method Post `
  -Uri "http://localhost:8080/api/register" `
  -ContentType "application/json" `
  -Body $registerBody

预期:

代码语言:json
复制
{"id":1,"username":"alice","displayName":"Alice"}

登录:

代码语言:powershell
复制
$loginBody = @{
  username = "alice"
  password = "Passw0rd!"
} | ConvertTo-Json -Compress

$token = (Invoke-RestMethod `
  -Method Post `
  -Uri "http://localhost:8080/api/login" `
  -ContentType "application/json" `
  -Body $loginBody).token

个人中心:

代码语言:powershell
复制
Invoke-RestMethod `
  -Method Get `
  -Uri "http://localhost:8080/api/me" `
  -Headers @{ Authorization = "Bearer $token" }

预期:

代码语言:json
复制
{"id":1,"username":"alice","displayName":"Alice"}

4.8 本地查看指标

代码语言:powershell
复制
Invoke-RestMethod -Uri "http://localhost:8080/actuator/health"
Invoke-RestMethod -Uri "http://localhost:8080/actuator/metrics/demo.user.login"
Invoke-RestMethod -Uri "http://localhost:8080/actuator/metrics/demo.user.profile.view"

预期:

代码语言:json
复制
{"status":"UP"}

demo.user.login 中应能看到 result=successresult=failure 的计数。

4.9 上报 Datadog 指标

设置环境变量:

代码语言:powershell
复制
$env:DD_METRICS_ENABLED='true'
$env:DD_API_KEY='<你的 API Key>'
$env:DD_APPLICATION_KEY='<你的 Application Key>'
$env:DD_API_URI='https://api.datadoghq.com'
$env:DD_SERVICE='datadog-login-demo'
$env:DD_ENV='local'
$env:DD_VERSION='0.1.0'

mvn spring-boot:run

如果你的 Datadog Site 不是 US1,请替换 API URI:

Site

DD_API_URI

US1

https://api.datadoghq.com

EU

https://api.datadoghq.eu

US3

https://api.us3.datadoghq.com

US5

https://api.us5.datadoghq.com

AP1

https://api.ap1.datadoghq.com

AP2

https://api.ap2.datadoghq.com

触发几次接口后,在 Datadog 中打开:

代码语言:java
复制
Metrics
  -> Explorer
  -> 搜索 demo.user.login 或 demo.user.profile.view

也可以搜索 JVM 和 HTTP 指标:

代码语言:java
复制
jvm.memory.used
http.server.requests

4.10 让 Codex 用 Datadog 做一次排障

先制造失败:

代码语言:powershell
复制
$badLoginBody = @{
  username = "alice"
  password = "bad-password"
} | ConvertTo-Json -Compress

try {
  Invoke-RestMethod `
    -Method Post `
    -Uri "http://localhost:8080/api/login" `
    -ContentType "application/json" `
    -Body $badLoginBody
} catch {
  $_.Exception.Response.StatusCode.value__
}

再问 Codex:

代码语言:java
复制
使用 Datadog 查询 service:datadog-login-demo env:local 最近 15 分钟 demo.user.login 指标。请按 result 标签汇总,并判断失败是否来自错误密码还是服务异常。输出查询条件、事实、推断和下一步验证。

预期输出:

代码语言:java
复制
事实:demo.user.login{result:failure} 在最近 15 分钟增加。
事实:http.server.requests 中 /api/login 出现 401。
推断:当前失败更像认证失败,不是服务 500。
下一步:检查是否有 5xx、异常日志和 MySQL 连接错误。

五、小结与价值思考

会当凌绝顶,一览众山小。

5.1 软件工程视角

这个 Skill 的本质是:把可观测性变成 AI Agent 的运行时上下文。

AI 写代码已经不难,难的是它能否证明自己改对了地方。Datadog 把日志、指标、链路和监控器接进 IDE 后,Agent 的每个修复建议都可以被追问:证据是什么,影响哪个 service,是否只发生在某个 version,修复后错误率是否下降。

5.2 ROI 估算

场景

引入前

引入后

节省估算

登录接口 401/500 排查

人工翻代码和日志 30 分钟

Agent 汇总指标和日志 5 分钟

70% 以上

慢接口定位

人工切 APM、MySQL、容器指标

Agent 按 endpoint 聚合证据

50% 以上

PR 说明

“修了一个登录问题”

“修复 /api/me 缺少 token 导致的 401,指标和测试如下”

Review 时间明显下降

5.3 团队 Skill 沉淀

可以把下面内容沉淀成团队自己的 datadog-observability Skill:

代码语言:bash
复制
mkdir -p skills/datadog-observability
cat > skills/datadog-observability/SKILL.md << 'EOF'
---
name: datadog-observability
description: Use when debugging runtime issues with Datadog telemetry before changing code.
---

# Datadog Observability Discipline

- 先限定 service、env、version、endpoint、时间窗口,再查询 Datadog。
- 修改代码前必须列出 Logs、Metrics、Traces 至少两类证据;本地 demo 可用 Metrics 和 Actuator 替代。
- 所有结论区分事实、推断和待验证假设。
- 禁止把 DD_API_KEY、DD_APPLICATION_KEY、OAuth token 写入仓库或聊天输出。
- 修复后必须给出验证 Prompt,检查错误率、p95、慢 Trace 或业务指标是否恢复。
EOF

六、衍生思考:下一个 Skill

凡事预则立,不预则废。

学完 datadog,你会遇到下一个问题:Agent 已经能看到生产数据,但它会不会为了“修得快”跳过测试?

Datadog 告诉你 /api/me 缺少 Authorization 会导致 401,AI 很快修了 Controller。但如果它没有补测试,没有覆盖缺 Header、坏 Token、正常 Token 三条路径,下一次类似问题还会回来。

下一期预告:

test-driven-development:把 Datadog 找到的生产失败样本,转成可回归的自动化测试。


附:方法论速查表

环节

关键动作

工具/命令

注意事项

注册

创建 Datadog 账号并确认 Site

Datadog 官网

Site 决定 API URI

密钥

创建 API Key 和 Application Key

Organization Settings

创建后立即安全保存

Codex

配置 MCP Server

~/.codex/config.toml

优先 OAuth,不把密钥写入仓库

MySQL

本地 Docker 启动

docker compose up -d mysql

等待 healthy

Spring Boot

本地 Java 进程运行

mvn spring-boot:run

Java 17

JPA

UserAccountRepository 操作数据库

Spring Data JPA

ddl-auto=update 仅适合 demo

指标

MeterRegistry.counter 埋点

Micrometer

DD_METRICS_ENABLED=false 默认可离线运行

上报

设置 Datadog 环境变量

DD_API_KEY

密钥不进仓库

排障

Agent 查询 Datadog

Datadog MCP

输出事实、推断、验证


参考资料


本文属于「每天一个 Skill」系列。

欢迎 Star / Fork 仓库,一起把工程实践变成可复用的 AI 时代资产。

代码地址和demo代码我放到github仓库 lifuchun/oneskillperday . 放在评论中。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景:为什么这个 Skill 很重要
    • 1.1 问题现场
    • 1.2 有 vs 没有 Skill 的差别
    • 1.3 这个 Skill 能解决的核心问题
  • 二、Skill 核心约束:中文解读
    • 2.1 Skill 基本信息
    • 2.2 核心约束思维导图
    • 2.3 规则逐条解读
  • 三、安装指南:从注册 Datadog 到 Codex MCP
    • 3.1 注册 Datadog 账号
    • 3.2 获取 API Key
    • 3.3 获取 Application Key
    • 3.4 配置 Codex MCP
    • 3.5 Cursor 和 Claude Code 接入
    • 3.6 验证 Skill 生效的 Prompt
  • 四、实战案例:Spring Boot 4 + JPA + MySQL 登录中心
    • 4.1 项目结构
    • 4.2 Maven 依赖
    • 4.3 JPA 实体
    • 4.4 指标埋点
    • 4.5 本地 MySQL Docker
    • 4.6 本地进程运行 Spring Boot
    • 4.7 注册、登录、个人中心
    • 4.8 本地查看指标
    • 4.9 上报 Datadog 指标
    • 4.10 让 Codex 用 Datadog 做一次排障
  • 五、小结与价值思考
    • 5.1 软件工程视角
    • 5.2 ROI 估算
    • 5.3 团队 Skill 沉淀
  • 六、衍生思考:下一个 Skill
  • 附:方法论速查表
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档