全部產品
Search
文件中心

Cloud Monitor:通過 Live-Debug Agent Skill 診斷 Python 應用

更新時間:Aug 08, 2026

對已接入 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

live_debug_log_probe

按模板輸出診斷記錄;不採對象圖與調用棧

方法快照

SNAPSHOT

live_debug_snapshot_probe

採集 ARGS/RETURN /LOCALS/STACK 等

動態指標

METRIC

live_debug_metric_probe

COUNTER/GAUGE/HISTOGRAM/SUMMARY

動態 Span

SPAN

live_debug_span_probe

函數級建立 OTel Span

Span 打標

SPAN_TAG

live_debug_span_tag_probe

給當前活躍 Span 追加屬性

前提條件

條件

說明

阿里雲帳號

對目標 Workspace/應用具備 Live-Debug(CMS ServiceTask)與 SLS 查詢許可權

目標應用

Python 應用已接入 ARMS,並開啟 Live-Debug

阿里雲 CLI

已安裝並可通過 aliyun configure 完成鑒權;需可調用 cms2(CMS CLI 外掛程式 aliyuncms2)與 sls。安裝方式見下方步驟一

AI Agent

已安裝 QoderWork、Cursor、Claude Code 或其他支援 Agent Skill 的工具。Skill 安裝方式見下方步驟二

應用接入資訊

已準備 workspaceserviceIdregionIdslsProject 等(見步驟三

步驟一:安裝並配置阿里雲 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

  1. 擷取 Live-Debug Agent Skill,通過 alibabacloud-livedebug 一鍵安裝到你的 AI Agent 中。

  2. 按所用 AI 工具的指引,將 Skill 安裝到 QoderWork、Cursor、Claude Code 等環境。

  3. 安裝完成後,重啟 AI 助手,或通過對話確認 Skill 已載入(例如詢問“是否已載入 Live-Debug Skill?”)。

下文用 ${LIVE_DEBUG_SKILL_ROOT} 表示 Skill 安裝根目錄;配套指令碼位於 ${LIVE_DEBUG_SKILL_ROOT}/scripts/

步驟三:準備應用接入資訊

Python 應用須已接入 ARMS,並開啟 Live-Debug。

待診斷專案根目錄建立 .arms-infokey=value),供 Agent 自動讀取;也可直接通過對話告知同等資訊。

workspace=default-cms-xxxxxxxxxxxxxxxxxx-cn-hangzhou
serviceId=ggxw4lnjuz@f2fd3a6265a254a052afb
regionId=cn-hangzhou
targetIp=*
slsProject=proj-xtrace-xxxxxxxxxxxxxxxxxxxxxx-cn-hangzhou

參數

是否必填

說明

workspace

ARMS 工作空間 ID

serviceId

應用/服務 ID

regionId

接入地區,如 cn-hangzhou

slsProject

存放 Live-Debug 結果的 SLS Project

targetIp

目標執行個體 IP;預設為 *(全部執行個體)

步驟四:使用自然語言發起診斷

建議用 Qoder 等 AI Coding 工具開啟你的專案代碼,並切換到線上應用對應的分支,之後在 AI Coding 工具中使用自然語言發起診斷。描述診斷需求時,建議包含以下資訊(缺失時 Agent 會詢問):

資訊

是否必填

樣本

目標位置

app.service.order 中的 OrderService.create_order,或某檔案第 N 行

觀察時機

建議

入口/出口/拋異常時/某一行(預設多在出口)

想看到的內容

入參、傳回值、耗時、局部變數、調用棧等

過濾條件

僅當 amount > 10000

期間/次數

半小時/采滿 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"
}

步驟五:觸發流量、驗證結果並收尾

  1. 核對配置:確認 Agent 下發的 taskConfig 與上文參考配置在目標定位、採集內容上一致。

  2. 觸發流量:對會走到目標代碼路徑的介面發起一次(或若干次)請求。

  3. 查詢結果:對 Agent 說:

    查一下剛才那個 taskId 的採集結果,並幫我解讀有沒有裝上、採到了什麼。
    • Task Status:探針是否安裝成功、漏鬥指標等。

    • Capture Results:實際採集到的日誌/快照等內容。

  4. 收尾清理(務必執行):

    把剛才的探針刪掉。
    清空當前服務下全部 Live-Debug 探針。
    看一下當前服務還掛著哪些 Live-Debug 探針。

情境速查

診斷訴求

可以這樣說

對應 taskType

快速打點確認調用

“給某某函數出口打動態日誌,列印 …”

live_debug_log_probe

深看參數/傳回值/棧

“對某某函數做快照,採集 …”

live_debug_snapshot_probe

只在異常時抓現場

“某某函數拋異常時抓快照”

live_debug_snapshot_probe

看某一行附近的變數

“在某某檔案第 N 行打日誌/做快照”

live_debug_log_probe/live_debug_snapshot_probe

臨時指標

“給某某函數掛一個 … 指標”

live_debug_metric_probe

臨時補鏈路/打標

“給某某函數加 Span/給當前 Span 打上 …”

live_debug_span_probe/live_debug_span_tag_probe

看結果

“查 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

請依次排查:

  1. 讓 Agent 先看 Task Status,確認探針是否安裝成功。

  2. 核對 typeName/methodName 是否與運行時模組名、__qualname__ 一致;主模組是否應填 __main__

  3. 確認已觸發會走到目標函數的業務請求;過濾條件是否過嚴。

  4. 確認 .arms-info 中的 regionIdslsProject 地區一致。

  5. 適當加大查詢時間視窗後再查一次。

也可直接對 Agent 說:“一直沒採到資料,幫我看狀態和目標定位是否正確。”

SLS 報 ProjectNotExist

原因: 查詢使用的地區與 SLS Project 所在地區不一致。

解決方案: 開啟 .arms-info,填寫正確的 regionId,並確保 Agent 匯出了 LIVE_DEBUG_REGION_ID,不要只依賴 CLI 預設地區。

如何確認探針已清理乾淨

看一下當前服務還掛著哪些 Live-Debug 探針;如果還有,全部刪掉。

Python 應用能否做線程/記憶體/反編譯診斷?

不能。這些屬於 Command 能力,僅 Java/JVM 支援。Python 請改用日誌、快照、指標或 Span 類訴求。

相關文檔