本文通過一個簡單的 AI 日誌分析助手,示範 ARMS Python 探針通過 MCP 協議實現端到端全鏈路追蹤。
背景介紹
在現代AI應用開發中,可觀測性(Observability)已經成為不可或缺的重要環節。隨著應用架構越來越複雜,開發人員需要深入瞭解應用的運行狀態、效能瓶頸和潛在問題。傳統的監控方式往往需要大量的手動設定和代碼改動,這不僅增加了開發成本,還可能引入新的錯誤。
MCP(Model Context Protocol) 是 Anthropic 推出的一個開放標準。如果把 AI Agent 比作一個聰明的助手,那麼 MCP 就像是它的“萬能工具箱”,整合了資料庫查詢、API 呼叫、檔案讀寫、郵件發送等豐富功能。有了 MCP,AI Agent 從智能對話助手升級為全能執行助手,能夠真正落地完成複雜的現實世界任務。
然而在 Agent 與 MCP 的實際應用中,開發人員經常遇到以下關鍵痛點:
工具選擇盲區
Agent 在面對複雜任務時,可能選擇了不合適的工具來完成任務,導致執行效率低下或結果不準確。而且開發人員缺乏可視化手段來分析 Agent 的決策過程和工具選擇邏輯。
錯誤排查困難
工具調用時參數格式錯誤、類型不符或必填參數缺失,錯誤資訊往往隱藏在複雜的調用鏈中,難以快速定位問題根源。
Token消耗黑洞
Agent 與 MCP 工具的多輪互動容易產生意想不到的大量Token消耗,缺乏即時的成本監控,可能導致預算超支。而且無法清晰瞭解不同 MCP 工具的 Token 消耗佔比,難以對成本進行精準最佳化。
迴圈調用陷阱
Agent可能陷入反覆調用相同工具的迴圈中,缺乏合適手段及時發現和中斷這種異常行為模式,造成資源浪費。
ARMS 提供了功能強大、開箱即用的Python探針,能夠零代碼侵入地為Python應用添加完整的可觀測效能力。為瞭解決以上 MCP 使用過程中的痛點, ARMS Python探針最新版本新增了 MCP協議 可觀測性支援,率先為 MCP 協議提供了專業的一站式監控能力。
零代碼接入:無需修改任何代碼,開箱即用的完整的 AI 應用監控能力。
視覺化檢視選擇過程:深度整合 MCP 協議,可視化 AI Agent 的工具選擇和調用過程。
精準故障定位:當系統出現異常時,可能通過鏈路資訊快速鎖定問題根源。
Token 成本分析:提供大模型 Token 使用量的精確監控和成本關聯資料。
端到端鏈路追蹤:從使用者查詢到 Agent、MCP 調用的完整調用鏈路展示,快速定位異常調用模式。
示範情境架構
下面將構建一個智能日誌分析助手,展示 ARMS Python 探針如何監控基於 MCP 協議的 AI 應用。
首先使用 LangChain 架構構建一個 Agent,使用者會向 Agent 發起提問。Agent 通過 Qwen Turbo 大模型的能力,自主規劃解決問題的行動計劃,並分步驟執行。在執行過程中 Agent 會通過 MCP 協議訪問 SLS MCP 伺服器,SLS MCP 伺服器通過 SLS HTTP OpenAPI 訪問Log Service的介面,完成日誌分析請求。
請求中 LangChain Agent 與 SLS MCP 伺服器產生的遙測資料會自動採集到 ARMS,在 ARMS 控制台上可以對採集到的資料做進一步的分析。
環境安裝與配置
1. 前置條件
Python版本 ≥ 3.8
2. 準備環境變數
為 Python 應用配置環境變數,另外示範情境中需要調用大模型處理使用者問題,此處以百鍊大模型為例,環境變數中還需配置百鍊API-Key,
export ARMS_APP_NAME=xxx # 應用程式名稱。
export ARMS_REGION_ID=xxx # 對應的阿里雲帳號的RegionID。
export ARMS_LICENSE_KEY=xxx # 阿里雲 LicenseKey。
export ARMS_IS_PUBLIC=True # 添加該環境變數表示使用公網訪問。
export BALIAN_API_KEY=sk-************ # 百鍊API-Key。您可以通過DescribeTraceLicenseKey OpenAPI擷取阿里雲LicenseKey。
3. 安裝 Python 依賴
# 安裝專案依賴
pip install mcp==1.10.1 langchain-mcp-adapters langgraph "langchain[openai]" aliyun-bootstrap rich mcp_server_aliyun_observability -y
# 安裝 ARMS Python 探針
aliyun-bootstrap -a install情境示範
1. 啟動 SLS MCP 伺服器
在終端中執行以下命令,在本地啟動 SLS MCP 伺服器。擷取 AccessKey 的方法,請參見建立AccessKey。
aliyun-instrument python -m mcp_server_aliyun_observability \
--transport sse \
--access-key-id <阿里雲AccessKey ID> \
--access-key-secret <阿里雲AccessKey Secret>當看到如下日誌輸出時,說明 MCP 伺服器已啟動,ARMS Python 探針已經成功注入到 MCP 伺服器中。
Load Aliyun python agent version: 1.6.12. 啟動 Langchain Demo 程式
建立 demo.py 檔案,執行 aliyun-instrument python demo.py 來啟動此 Demo 程式。
此處樣本Demo建立了一個 Agent,並向 Agent 提了兩個問題,該 Agent 會使用 SLS MCP 服務處理日誌分析請求。
from contextlib import asynccontextmanager
from mcp import ClientSession
from mcp.client.sse import sse_client
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
import asyncio
from opentelemetry import trace
import os
tracer = trace.get_tracer(__name__)
# 建立一個大模型對象
model = ChatOpenAI(
model="qwen-turbo",
api_key=os.getenv("BALIAN_API_KEY"), # 百鍊 API Key
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 建立 agent
@asynccontextmanager
async def sls_agent():
with tracer.start_as_current_span("langchain-demo"):
async with sse_client(url="http://0.0.0.0:8000/sse") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await load_mcp_tools(session)
agent = create_react_agent(model, tools)
yield agent
def print_response(response):
for message in response['messages']:
print(message.content)
async def main():
# 建立一個 sls agent
async with sls_agent() as agent:
# 調用模型處理問題
response = await agent.ainvoke(
{"messages": "我要查詢我在杭州地區的project的列表,取前10個"}
)
print_response(response)
# 繼續追問
response = await agent.ainvoke(
{
"messages": "查詢杭州地區下 demo-test 這個 project 下的 loghub_master 日誌庫的日誌,分析最近十分鐘寫入了多少條日誌"
}
)
print_response(response)
if __name__ == "__main__":
asyncio.run(main())程式將會輸出如下結果:
我要查詢我在杭州地區的project的列表,取前10個
以下是您在杭州地區(cn-hangzhou)的前10個專案列表:
1. sls-aysls-pub-cn-hangzhou-b-xxxx
2. e2e-test-xxxx
3. workspace-xxxx
4. ws-xxxx (描述: Create by o11y)
5. clickbench8 (描述: clickbench8)
6. clickbench16 (描述: clickbench16)
7. clickbench (描述: clickbench)
8. job-e2e-project-xxxx
9. job-e2e-project-xxxx
10. job-e2e-project-xxxx
如果需要查詢更多專案,您可以提供專案的關鍵詞進行模糊搜尋。
查詢杭州地區下 demo-test 這個 project 下的 loghub_master 日誌庫的日誌,分析最近十分鐘寫入了多少條日誌
在最近的十分鐘內,`demo-test` 專案下的 `loghub_master` 日誌庫共寫入了 **8641 條日誌**。以上示範Demo較為簡單,只展示了 MCP 與 AI Agent 整合的效果,更多 SLS 日誌分析情境可以參考 alibabacloud-observability-mcp-server。
查看 MCP 調用鏈路
在ARMS控制台的頁面單擊目標 Python 應用程式名稱。
在調用鏈分析頁面單擊Trace列表,單擊Trace ID進行調用分析。

Trace詳情會展示一個完整的調用過程追蹤資訊。以下鏈路詳情中可以看到 AI Agent 調用了 MCP Client 來執行對Log Service API 的訪問,MCP Client 請求被發送到 MCP Server,MCP Server 通過 HTTP API 訪問Log Service,總耗時 66ms。

單擊該 Span,在右側地區可以看到更多詳細資料,例如服務地址、請求協議、請求參數、返回 Body 大小等。

在指標頁簽可以查看該請求相關聯的指標資訊,從而進一步分析輸送量、延遲等指標。
