可觀測性概覽
Mastra 的可觀測性系統可讓你掌握每次 Agent 執行、Workflow 步驟、Tool 呼叫與模型互動。Agent 的行為取決於模型回應、提示詞、Tool、記憶體及 Workflow 狀態,因此可觀測性能協助你從第一天起檢視執行階段的決策。它會擷取彼此互補的訊號,這些訊號會協同運作,協助你瞭解應用程式正在做什麼以及背後的原因。
- 設定:只需設定一次,即可用於 Trace、記錄、指標與回饋。
- 儲存空間:為持久保存的 Trace、記錄、指標彙總與回饋查詢選擇儲存後端。
- Tracing:將每項操作記錄為由 span 組成的階層式時間軸,並擷取輸入、輸出、token 用量與時間資訊。
- 記錄:將應用程式與 Mastra 內部的結構化記錄項目轉送至可觀測性儲存空間,並自動與 Trace 建立關聯。
- 指標:擷取 Trace 的用量與成本資料,不需要額外的檢測程式碼。
- 回饋:儲存與 Trace 和 span 連結的評分、留言、修正及其他審查訊號。
- 整合:為 Studio、託管服務或外部可觀測性 Workflow 選擇匯出器、橋接器與 span 處理器。
何時使用可觀測性「何時使用可觀測性」的直接連結
- 檢視完整的決策路徑、Tool 呼叫與模型回應,以偵錯非預期的 Agent 行為。
- 監控各 Agent、Workflow 與 Tool 的延遲,以找出瓶頸。
- 追蹤一段時間內的 token 消耗量與預估成本,以控制支出。
- 逐步追蹤執行過程,以診斷 Workflow 失敗問題。
- 比較變更提示詞或模型前後的 Agent 效能。
各個部分如何協同運作「各個部分如何協同運作」的直接連結
Tracing 是整個系統的基礎。設定可觀測性後,每次 Agent 執行、Workflow 執行、Tool 呼叫與模型互動都會產生一個 span。span 會組織成 Trace,以階層式時間軸呈現完整的請求生命週期。
系統會自動從 Trace 衍生指標。span 結束時,Mastra 無須任何額外程式碼,就會擷取持續時間、token 數量與成本估算。這些指標會提供 Studio 中的儀表板所需資料。
記錄會自動與 Trace 建立關聯。在已追蹤的內容中,每次呼叫 logger.info()、logger.warn() 或 logger.error() 時,都會標記目前的 Trace 與 span ID。你可以直接從記錄項目前往產生該項目的 Trace。
回饋會記錄評分、留言與修正等人工審查訊號。回饋可與 Trace 及 span 連結,之後再透過用於指標的同一個可觀測性儲存空間進行查詢。
這些訊號共用 Trace ID、span ID、實體類型與實體名稱等關聯 ID。你可以利用這些 ID,從指標的尖峰前往其 Trace、記錄及相關回饋。
快速開始「快速開始」的直接連結
安裝 @mastra/observability,以及支援 Trace 與指標的儲存後端:
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/observability @mastra/libsql @mastra/duckdb
pnpm add @mastra/observability @mastra/libsql @mastra/duckdb
yarn add @mastra/observability @mastra/libsql @mastra/duckdb
bun add @mastra/observability @mastra/libsql @mastra/duckdb
接著,在 Mastra 執行個體中設定可觀測性。以下範例使用複合儲存空間,將可觀測性資料路由至 DuckDB(支援指標彙總),同時將其他所有資料保留在 LibSQL:
import { Mastra } from '@mastra/core/mastra'
import { LibSQLStore } from '@mastra/libsql'
import { DuckDBStore } from '@mastra/duckdb'
import { MastraCompositeStore } from '@mastra/core/storage'
import {
Observability,
MastraStorageExporter,
MastraPlatformExporter,
SensitiveDataFilter,
} from '@mastra/observability'
export const mastra = new Mastra({
storage: new MastraCompositeStore({
id: 'composite-storage',
default: new LibSQLStore({
id: 'mastra-storage',
url: 'file:./mastra.db',
}),
domains: {
observability: await new DuckDBStore().getStore('observability'),
},
}),
observability: new Observability({
configs: {
default: {
serviceName: 'mastra',
exporters: [
new MastraStorageExporter(), // Persists observability events to Mastra Storage
new MastraPlatformExporter(), // Sends observability events to Mastra platform (if MASTRA_PLATFORM_ACCESS_TOKEN is set)
],
spanOutputProcessors: [
new SensitiveDataFilter(), // Redacts sensitive data like passwords, tokens, keys
],
logging: {
enabled: true,
level: 'info',
},
},
},
}),
})
這會啟用 Tracing、記錄轉送與指標。Mastra 也支援 Langfuse、Datadog 等外部 Tracing Provider,以及任何與 OpenTelemetry 相容的平台。若要在將資料傳送至外部 Provider 的同時保留 Mastra Studio 的存取權,請參閱保留 Studio 存取權。
設定「設定」的直接連結
只需在 Mastra 執行個體上設定一次可觀測性,該設定就會套用至 Trace、記錄與指標。
基本設定「基本設定」的直接連結
可觀測性設定通常包含:
serviceName:附加至匯出之可觀測性資料的服務識別碼。exporters:Trace、記錄與衍生指標的一或多個目的地。spanOutputProcessors:匯出 span 前執行的轉換作業。logging:可觀測性儲存空間的記錄轉送設定。
如需目的地與處理器的相關資訊,請參閱整合概覽。
保留 Studio 存取權「保留 Studio 存取權」的直接連結
新增外部匯出器時,請保留 MastraStorageExporter 以供 Studio 可觀測性使用,及/或保留 MastraPlatformExporter 以供託管的 Mastra 平台可觀測性使用。
以下範例僅顯示可觀測性設定。請另行設定儲存空間。
import { Observability, MastraStorageExporter, MastraPlatformExporter } from '@mastra/observability'
import { ArizeExporter } from '@mastra/arize'
export const observability = new Observability({
configs: {
production: {
serviceName: 'my-service',
exporters: [
new ArizeExporter({
endpoint: process.env.PHOENIX_COLLECTOR_ENDPOINT,
apiKey: process.env.PHOENIX_API_KEY,
}),
new MastraStorageExporter(),
new MastraPlatformExporter(),
],
},
},
})
在無伺服器環境中清空緩衝區「在無伺服器環境中清空緩衝區」的直接連結
在無伺服器環境中,請在執行階段暫停或結束前,清空可觀測性匯出器的緩衝區:
await mastra.observability.flush()
在無伺服器環境中,請使用外部儲存空間,而不是本機檔案儲存空間。如需選擇與路由儲存空間的相關資訊,請參閱儲存空間。
多重設定「多重設定」的直接連結
當不同環境或請求類型需要不同的匯出器或取樣行為時,請使用多組設定。在執行階段使用 configSelector 選取作用中的設定。
import { Mastra } from '@mastra/core'
import { Observability, MastraStorageExporter } from '@mastra/observability'
import { LangfuseExporter } from '@mastra/langfuse'
const storageExporter = new MastraStorageExporter()
const langfuseExporter = new LangfuseExporter()
export const mastra = new Mastra({
observability: new Observability({
configs: {
development: {
serviceName: 'my-service-dev',
exporters: [storageExporter],
},
production: {
serviceName: 'my-service-prod',
exporters: [storageExporter, langfuseExporter],
},
},
configSelector: () => process.env.NODE_ENV || 'development',
}),
})
如需 Trace 取樣的相關資訊,請參閱 Tracing。
儲存空間「儲存空間」的直接連結
儲存空間會決定要持久保存哪些可觀測性訊號、可使用哪些查詢,以及指標彙總是否能運作。請使用專用的可觀測性儲存空間,而不是主要的應用程式儲存空間。
訊號支援「訊號支援」的直接連結
儲存空間的支援範圍取決於訊號與工作負載。MastraStorageExporter 可將 Trace 持久保存至 ClickHouse、PostgreSQL、MSSQL、MongoDB 與 LibSQL。指標則需要具備分析能力的儲存空間:
- DuckDB:建議用於本機測試與開發。
- ClickHouse:建議用於高流量的正式環境可觀測性。
PostgresStoreVNext:啟用可觀測性網域時支援指標。請一律提供時間範圍,以免掃描完整分割區。- Mastra 平台:使用
MastraPlatformExporter取得託管的可觀測性,而無須自行管理後端。
如需完整的 Provider 清單與支援的 Tracing 策略,請參閱 Mastra Storage 匯出器。當主要儲存空間不支援可觀測性,或工作負載需要獨立擴充時,請使用複合儲存空間,將 observability 網域分開路由。
本機開發「本機開發」的直接連結
本機開發時,請使用:
LibSQLStore作為主要的應用程式儲存空間DuckDBStore用於observability網域MastraStorageExporter用於本機 Studio 存取
正式環境部署「正式環境部署」的直接連結
可觀測性流量的寫入量通常高於應用程式其餘部分。正式環境中:
- 若將可觀測性保留在自己的儲存空間中,請將
MastraStorageExporter與 ClickHouse 搭配使用於observability網域。 - 使用
MastraPlatformExporter取得託管的 Mastra 平台可觀測性,而不是自行管理後端。 - 當可觀測性需要與主要應用程式資料使用不同的後端或擴充原則時,請使用複合儲存空間。
如需後端相容性與匯出器批次處理行為的詳細資訊,請參閱 Mastra Storage 匯出器。
Mastra 平台「Mastra 平台」的直接連結
如需跨專案與部署的託管 Trace、記錄與指標,請參閱 Mastra 平台上的可觀測性。