对已接入 ARMS 的 Python 应用做运行时诊断时,通常需要构造探针配置、调用 CMS ServiceTask API,再到 SLS 查询采集结果。Live-Debug Agent Skill 将这一流程封装为 AI Agent 可执行的结构化工作流——安装到 QoderWork、Cursor、Claude Code 或其他支持 Agent Skill 的工具后,只需用自然语言描述诊断需求,Agent 即可自动编排:创建探针、查询结果、删除清理。无需改业务代码、无需发版、无需重启进程,即可在目标方法被调用时采集动态日志、方法快照、临时指标与链路信息。
AI Agent 由大语言模型驱动,可能存在目标模块/方法识别偏差、表达式写错等风险。创建探针前请仔细核对 Agent 展示的配置与目标资源;建议先在测试环境验证探针对性能与稳定性的影响,再在生产环境使用。诊断结束后请及时删除探针,避免残留。
适用场景
诊断诉求 | 推荐能力 |
确认函数是否被调用、入参是否符合预期 | 动态日志(LOG) |
看清参数、返回值、局部变量、调用栈 | 方法快照(SNAPSHOT) |
异常时自动抓现场 | 方法快照(exception) |
临时观察业务量/耗时分布 | 动态指标(METRIC) |
临时补链路或给现有 Span 打业务标 | SPAN/SPAN_TAG |
方案架构
Skill 将 CMS ServiceTask 与 SLS 查询封装为 Agent 可执行工作流,核心能力包括:
自然语言驱动:用一句话描述诊断意图,无需记忆 API 与脚本参数。
场景感知:根据“日志/快照/指标/Span”自动选择探针类型并生成配置。
自动编排:读取
.arms-info、创建任务、查询 SLS 状态与采集结果、按需删除探针。结果可核对:创建时返回
taskId,并可用本文参考配置对照 Agent 生成的taskConfig。
典型工作流程:描述需求 → Agent 自动创建探针 → 触发业务流量 → 查看采集结果 → 清理探针。
支持的诊断能力
能力 | 探针类型 | taskType | 说明 |
动态日志 | LOG |
| 按模板输出诊断日志;不采对象图与调用栈 |
方法快照 | SNAPSHOT |
| 采集 ARGS/RETURN /LOCALS/STACK 等 |
动态指标 | METRIC |
| COUNTER/GAUGE/HISTOGRAM/SUMMARY |
动态 Span | SPAN |
| 函数级新建 OTel Span |
Span 打标 | SPAN_TAG |
| 给当前活跃 Span 追加属性 |
前提条件
条件 | 说明 |
阿里云账号 | 对目标 Workspace/应用具备 Live-Debug(CMS ServiceTask)与 SLS 查询权限 |
目标应用 | Python 应用已接入 ARMS,并开启 Live-Debug |
阿里云 CLI | 已安装并可通过 |
AI Agent | 已安装 QoderWork、Cursor、Claude Code 或其他支持 Agent Skill 的工具。Skill 安装方式见下方步骤二 |
应用接入信息 | 已准备 |
步骤一:安装并配置阿里云 CLI
Live-Debug Skill 通过 aliyun CLI 调用 CMS(aliyun cms2 apm service-task,创建/列举/删除任务)与 SLS(查询采集结果)。请先完成 CLI 安装与凭证配置。需具备对目标 Workspace/应用的 Live-Debug(CMS ServiceTask)与 SLS 查询权限。
安装 CLI
若尚未安装,请参考安装阿里云 CLI(按本机操作系统选择 Linux/macOS/Windows 安装方式)。
安装完成后确认可用:
aliyun version配置访问凭证
aliyun configure按提示填写 AccessKey ID、AccessKey Secret 与默认地域。建议使用 RAM 子账号,并授予 CMS ServiceTask 与目标 SLS Project 的读写/查询权限。详细说明请参考配置与管理身份凭证。
Live-Debug 查询结果时会显式指定 regionId(来自 .arms-info),不要依赖本机 aliyun configure 的默认地域作为唯一来源——默认地域与 SLS Project 不一致时,可能报 ProjectNotExist。
安装 CMS CLI(aliyuncms2)并验证 cms2 与 SLS 可用
CMS ServiceTask 能力由 aliyuncms2 插件二进制提供:获取 aliyuncms2 后放入 ~/.aliyun/ 目录(或 PATH),即可通过 aliyun cms2 调用,凭证复用 aliyun configure 的配置。
# 验证 CMS ServiceTask 相关能力
aliyun cms2 apm service-task --help
# 验证 SLS 查询可用
aliyun sls --help若 cms2 不可用,请确认 aliyuncms2 二进制已放入 ~/.aliyun/(或 PATH)且具有可执行权限:
ls -l ~/.aliyun/aliyuncms2
chmod +x ~/.aliyun/aliyuncms2
aliyun cms2 apm service-task --help仍失败时,请升级阿里云 CLI 后重试:
aliyun upgrade -y步骤二:安装 Live-Debug Agent Skill
获取 Live-Debug Agent Skill,通过 alibabacloud-livedebug 一键安装到你的 AI Agent 中。
按所用 AI 工具的指引,将 Skill 安装到 QoderWork、Cursor、Claude Code 等环境。
安装完成后,重启 AI 助手,或通过对话确认 Skill 已加载(例如询问“是否已加载 Live-Debug Skill?”)。
下文用 ${LIVE_DEBUG_SKILL_ROOT} 表示 Skill 安装根目录;配套脚本位于 ${LIVE_DEBUG_SKILL_ROOT}/scripts/。
步骤三:准备应用接入信息
Python 应用须已接入 ARMS,并开启 Live-Debug。
在待诊断项目根目录创建 .arms-info(key=value),供 Agent 自动读取;也可直接通过对话告知同等信息。
workspace=default-cms-xxxxxxxxxxxxxxxxxx-cn-hangzhou
serviceId=ggxw4lnjuz@f2fd3a6265a254a052afb
regionId=cn-hangzhou
targetIp=*
slsProject=proj-xtrace-xxxxxxxxxxxxxxxxxxxxxx-cn-hangzhou参数 | 是否必填 | 说明 |
| 是 | ARMS 工作空间 ID |
| 是 | 应用/服务 ID |
| 是 | 接入地域,如 |
| 是 | 存放 Live-Debug 结果的 SLS Project |
| 否 | 目标实例 IP;缺省为 |
步骤四:使用自然语言发起诊断
建议用 Qoder 等 AI Coding 工具打开你的项目代码,并切换到线上应用对应的分支,之后在 AI Coding 工具中使用自然语言发起诊断。描述诊断需求时,建议包含以下信息(缺失时 Agent 会询问):
信息 | 是否必填 | 示例 |
目标位置 | 是 |
|
观察时机 | 建议 | 入口/出口/抛异常时/某一行(默认多在出口) |
想看到的内容 | 是 | 入参、返回值、耗时、局部变量、调用栈等 |
过滤条件 | 否 | 仅当 |
持续时间/次数 | 否 | 半小时/采满 50 次就停 |
创建成功后,Agent 会返回 taskId。请对照下文参考配置核对目标模块、方法、location、模板或 capture 等关键字段,再触发业务流量。
1. 动态日志(LOG)
可以这样说:
请使用 /alibabacloud-livedebug 技能,给 app.service.order 模块的 OrderService.create_order 出口打一条动态日志,打印 order_id、amount、返回值和耗时,保留半小时。参考配置:taskType = live_debug_log_probe
{
"probeType": "LOG",
"language": "python",
"target": {
"typeName": "app.service.order",
"methodName": "OrderService.create_order",
"location": "exit",
"instanceIds": ["*"]
},
"action": {
"type": "LOG",
"template": "create_order id={order_id} amount={amount} ret={@return} cost={@duration}ms"
},
"ttl": "30m",
"captureCount": 100
}行级、带条件:
在 app/service/order.py 第 42 行打日志,只有 amount >= 1000 时才输出订单号和金额。参考配置:taskType = live_debug_log_probe
{
"probeType": "LOG",
"language": "python",
"target": {
"sourceFile": "app/service/order.py",
"location": "line:42",
"instanceIds": ["*"]
},
"trigger": {
"condition": "amount >= 1000"
},
"action": {
"type": "LOG",
"template": "big order id={order_id} amount={amount}"
},
"ttl": "30m"
}2. 方法快照(SNAPSHOT)
可以这样说:
请使用 /alibabacloud-livedebug 技能,对 OrderService.create_order 出口做一次快照,采集入参、局部变量、返回值和调用栈,最多采 20 次。参考配置:taskType = live_debug_snapshot_probe
{
"probeType": "SNAPSHOT",
"language": "python",
"target": {
"typeName": "app.service.order",
"methodName": "OrderService.create_order",
"location": "exit",
"instanceIds": ["*"]
},
"action": {
"type": "SNAPSHOT",
"capture": ["ARGS", "LOCALS", "RETURN", "STACK"],
"captureConfig": {
"maxDepth": 3,
"maxCollectionSize": 100,
"maxStringLength": 1024
}
},
"ttl": "30m",
"captureCount": 20
}条件过滤 + 自定义字段:
create_order 出口做快照:仅当返回值为空或金额大于 10000 时触发;重点看 order_id、amount * count、self.user_id 和返回值。参考配置:taskType = live_debug_snapshot_probe
{
"probeType": "SNAPSHOT",
"language": "python",
"target": {
"typeName": "app.service.order",
"methodName": "OrderService.create_order",
"location": "exit",
"instanceIds": ["*"]
},
"trigger": {
"condition": "@return is None or amount > 10000"
},
"action": {
"type": "SNAPSHOT",
"capture": ["ARGS"],
"captureExpressions": [
"order_id",
"amount * count",
"self.user_id",
"@return"
]
},
"ttl": "30m",
"captureCount": 50
}异常现场:
PaymentService.process_payment 一旦抛异常就抓快照,带上入参、异常信息和调用栈,保留 2 小时。参考配置:taskType = live_debug_snapshot_probe
{
"probeType": "SNAPSHOT",
"language": "python",
"target": {
"typeName": "app.service.payment",
"methodName": "PaymentService.process_payment",
"location": "exception",
"instanceIds": ["*"]
},
"action": {
"type": "SNAPSHOT",
"capture": ["ARGS", "EXCEPTION", "STACK", "LOCALS"]
},
"ttl": "2h",
"captureCount": 100
}3. 动态指标(METRIC)
可以这样说:
请使用 /alibabacloud-livedebug 技能,给 create_order 挂一个金额直方图指标,标签里标一下是不是 vip 用户,持续 1 小时。参考配置:taskType = live_debug_metric_probe
{
"probeType": "METRIC",
"language": "python",
"target": {
"typeName": "app.service.order",
"methodName": "OrderService.create_order",
"location": "exit",
"instanceIds": ["*"]
},
"action": {
"type": "METRIC",
"metricName": "livedebug.order.amount",
"metricType": "HISTOGRAM",
"valueExpression": "amount",
"tags": {
"is_vip": "str(user_id == 'vip')"
}
},
"ttl": "1h"
}4. 动态 Span(SPAN)
可以这样说:
请使用 /alibabacloud-livedebug 技能,在 OrderService.create_order 上临时加一个 Span,名叫 dyn.create_order,把订单号和金额打到属性里。参考配置:taskType = live_debug_span_probe
{
"probeType": "SPAN",
"language": "python",
"target": {
"typeName": "app.service.order",
"methodName": "OrderService.create_order",
"location": "enter",
"instanceIds": ["*"]
},
"action": {
"type": "SPAN",
"spanName": "dyn.create_order",
"spanTags": {
"order.id": "str(order_id)",
"order.amount": "str(amount)"
}
},
"ttl": "1h"
}5. Span 打标(SPAN_TAG)
可以这样说:
create_order 出口时,请使用 /alibabacloud-livedebug 技能,给当前 Span 打上 order.id 和 order.result(用返回值),不要新建 Span。参考配置:taskType = live_debug_span_tag_probe
{
"probeType": "SPAN_TAG",
"language": "python",
"target": {
"typeName": "app.service.order",
"methodName": "OrderService.create_order",
"location": "exit",
"instanceIds": ["*"]
},
"action": {
"type": "SPAN_TAG",
"tags": [
{"key": "order.id", "value": "str(order_id)"},
{"key": "order.result", "value": "str(@return)"}
]
},
"ttl": "1h"
}步骤五:触发流量、验证结果并收尾
核对配置:确认 Agent 下发的
taskConfig与上文参考配置在目标定位、采集内容上一致。触发流量:对会走到目标代码路径的接口发起一次(或若干次)请求。
查询结果:对 Agent 说:
查一下刚才那个 taskId 的采集结果,并帮我解读有没有装上、采到了什么。Task Status:探针是否安装成功、漏斗指标等。
Capture Results:实际采集到的日志/快照等内容。
收尾清理(务必执行):
把刚才的探针删掉。清空当前服务下全部 Live-Debug 探针。看一下当前服务还挂着哪些 Live-Debug 探针。
场景速查
诊断诉求 | 可以这样说 | 对应 taskType |
快速打点确认调用 | “给某某函数出口打动态日志,打印 …” |
|
深看参数/返回值/栈 | “对某某函数做快照,采集 …” |
|
只在异常时抓现场 | “某某函数抛异常时抓快照” |
|
看某一行附近的变量 | “在某某文件第 N 行打日志/做快照” |
|
临时指标 | “给某某函数挂一个 … 指标” |
|
临时补链路/打标 | “给某某函数加 Span/给当前 Span 打上 …” |
|
看结果 | “查 taskId=… 的结果并解读” | —(查 SLS) |
收尾 | “删掉这个探针”或“清空全部探针” | —(Delete) |
常见问题
Agent 提示 cms2/aliyun 命令不可用
原因: 未安装阿里云 CLI、版本过低,或 aliyuncms2 插件二进制未就绪。
解决方法:
aliyun version
aliyun upgrade -y
ls -l ~/.aliyun/aliyuncms2 # 确认 CMS CLI 插件二进制存在且可执行
aliyun cms2 apm service-task --help
aliyun sls --help并确认已执行 aliyun configure 配置 AccessKey。
创建成功但一直没有 Capture Results
请依次排查:
让 Agent 先看 Task Status,确认探针是否安装成功。
核对
typeName/methodName是否与运行时模块名、__qualname__一致;主模块是否应填__main__。确认已触发会走到目标函数的业务请求;过滤条件是否过严。
确认
.arms-info中的regionId与slsProject地域一致。适当加大查询时间窗口后再查一次。
也可直接对 Agent 说:“一直没采到数据,帮我看状态和目标定位是否正确。”
SLS 报 ProjectNotExist
原因: 查询使用的地域与 SLS Project 所在地域不一致。
解决方法: 打开 .arms-info,填写正确的 regionId,并确保 Agent 导出了 LIVE_DEBUG_REGION_ID,不要只依赖 CLI 默认地域。
如何确认探针已清理干净
看一下当前服务还挂着哪些 Live-Debug 探针;如果还有,全部删掉。Python 应用能否做线程/内存/反编译诊断?
不能。这些属于 Command 能力,仅 Java/JVM 支持。Python 请改用日志、快照、指标或 Span 类诉求。