對已接入 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 類訴求。