簡而言之:指標、日誌和追蹤是可觀察性的三種基本資料類型,各自在理解系統行為方面發揮著不同的作用。指標是隨時間累積的彙總數值測量結果,非常適合用於儀表板、警示和趨勢分析。日誌則是帶有時間戳記的個別事件記錄,最適合用於除錯特定事件以及維護稽核軌跡。 追蹤則能追蹤單一請求在分散式系統中的完整路徑,揭示時間消耗的位置以及瓶頸發生的位置。實際上,這三者是相互配合運作的:指標會觸發警示,日誌提供錯誤詳情,而追蹤則顯示失敗請求路徑的完整背景。要實現區塊鏈應用程式的有效可觀察性,必須具備這三大支柱,因為區塊鏈基礎架構的分散式特性會產生某些故障模式,單一資料類型無法獨立診斷。
簡單的解釋
試想診斷一種疾病的情境。你的生命徵象(心率、血壓、體溫)是指標:它們告訴你某處出現異常。你的病歷和檢驗報告是紀錄:它們提供具體的狀況細節。磁振造影(MRI)或電腦斷層掃描(CT)則是影像:它呈現完整的內部狀況,讓醫生能精確鎖定問題所在。
在區塊鏈基礎架構中,您同樣面臨相同的診斷挑戰。您的應用程式分散在前端、後端、RPC 端點、區塊鏈節點以及區塊鏈本身之中。每一層都可能獨立發生故障或效能下降。指標會告訴您出了問題(延遲驟升)。 日誌會告訴您出了什麼問題(特定 RPC 方法傳回錯誤);追蹤資料則會指出問題源自請求路徑的哪個位置(節點花費 3 秒處理針對複雜合約的 eth_call 呼叫)。
監控與可觀測性之間有何區別?
監控與可觀察性雖有關聯,但兩者有所區別。監控是監測已知的訊號,並在超過預先設定的閾值時發出警示;可觀察性則是一種更廣泛的能力,能利用系統產生的資料來提出關於系統的新問題,即使是您未曾預料到的問題也不例外。 指標、日誌和追蹤資料是可觀察性的基礎素材:透過它們的結合,您才能從「出了問題」的階段,進而釐清「確切原因為何」。若想深入了解,請參閱我們關於區塊鏈可觀察性的概述。
指標、日誌和追蹤記錄有何不同?
每個支柱都針對不同的問題,且涉及不同的成本。下表概述了何時應採用各支柱。
維度 | 指標 | 日誌 | 蹤跡 |
|---|---|---|---|
資料類型 | 彙總數據 | 帶有時間戳記的事件 | 關聯請求跨區段 |
最佳問題 | 是哪裡有問題嗎? | 到底出了什麼問題? | 到底哪裡出錯了? |
儲存成本 |
對於區塊鏈系統而言,這些支柱建立在更廣泛的基礎設施監控之上,該監控機制會監測節點健康狀態、同步狀態以及 RPC 行為。
指標詳解
指標是定期收集並隨時間累積的數值。它們體積輕巧、儲存效率高,且專為高頻率收集而設計。典型的區塊鏈應用程式會追蹤的指標包括:RPC 請求率(按方法計算的每秒請求次數)、回應延遲(p50、p95、 p99 百分位數)、錯誤率(返回非 200 狀態碼的請求比例)、區塊高度差(您的節點最新區塊與鏈尖之間的差異)、活躍的 WebSocket 連線、Gas 價格(當前基礎手續費與優先級手續費水準),以及交易確認延遲。
指標是可觀察性的第一道防線。它們驅動即時儀表板,讓您能一目瞭然地掌握系統是否運作正常;當某項數值超過閾值時,它們會觸發警示規則,通知當值工程師;此外,透過呈現資源使用量與流量模式的長期趨勢,它們還能協助進行容量規劃。
區塊鏈生態系統中的標準指標堆疊,通常包含用於資料收集與儲存的 Prometheus、用於視覺化與儀表板展示的 Grafana,以及用於警報路由的 Alertmanager 或 PagerDuty。雲原生替代方案則包括 Datadog、New Relic 以及 AWS CloudWatch。這些工具皆專為處理指標資料的大量、時間序列特性而設計。
指標的局限性在於其彙總的特性。一個指標會告訴你 p99 RPC 延遲超過 500 毫秒,但它並不會告訴你哪些具體的請求速度較慢、這些請求的參數為何,或是該節點在速度變慢時正在執行什麼操作。若要獲得這程度的細節,你需要日誌和追蹤資料。

詳細日誌
日誌是附有時間戳記的個別事件文字記錄。每當您的應用程式發出 RPC 呼叫、處理交易、遇到錯誤或處理使用者操作時,日誌條目都會記錄相關細節。與指標(即按時間區間彙總的數值)不同,日誌是包含豐富上下文的個別記錄:完整的請求參數、確切的錯誤訊息、堆疊追蹤、使用者 ID 以及交易雜湊值。
在區塊鏈應用中,關鍵的日誌類別包括 RPC 請求日誌(方法、參數、回應代碼、每次請求的延遲)、交易生命週期日誌(雜湊值、狀態從「待處理」轉為「已確認」再轉為「已最終確定」), 智慧合約事件日誌(來自合約的解碼事件,包含完整的參數資料)、錯誤日誌(RPC 錯誤、超時例外、非ce衝突、gas 估算失敗),以及應用程式日誌(使用者驗證事件、業務邏輯決策、狀態變更)。
日誌是進行根本原因分析的主要工具。當指標警示您錯誤率上升時,您可以查詢日誌中的近期錯誤記錄,依錯誤類型進行篩選,並找出其中的規律。例如,某個特定的 RPC 方法可能開始回傳「缺失 trie 節點」錯誤,原因是該節點修剪了狀態資料;又或者,交易提交失敗可能是由於並行處理錯誤導致的非ce衝突所致。日誌中包含的具體細節,是指標無法提供的。
日誌管理工具包括 Elasticsearch 搭配 Kibana(即「ELK 堆疊」)、Grafana Loki、Splunk、Datadog Logs 以及 AWS CloudWatch Logs。這些工具能大規模儲存、建立索引及搜尋日誌條目,並支援全文搜尋、結構化查詢,以及跨服務的關聯分析。
日誌的取捨在於儲存量與成本。對於高流量應用程式而言,若將每個 RPC 請求都記錄下來,每天會產生數吉字節的資料。相較於非結構化文字日誌,結構化日誌(即日誌條目以 JSON 格式呈現且欄位名稱一致)能實現更高效的索引與查詢;而日誌採樣(僅記錄部分常規事件)則可在不影響錯誤與異常狀況可視性的前提下,有效降低日誌儲存量。
《細察蹤跡》
追蹤記錄了單一請求在分散式系統中從頭到尾的執行歷程。一個追蹤由多個區段組成,每個區段代表特定服務中的一項工作單位。區段採用層級式嵌套結構(父區段代表整體請求,子區段則代表各子操作),並透過共同的追蹤 ID 相互連結。
對於區塊鏈應用程式而言,單一追蹤可能涵蓋以下區間:使用者在瀏覽器中點擊「兌換」(前端區間,50 毫秒)、前端向後端發送 API 請求(網路區間,20 毫秒)、後端呼叫 RPCendpoint 進行 gas 估算 (RPC 跨段,150 毫秒),後端呼叫 RPCendpoint 以提交交易(RPC 跨段,200 毫秒),後端輪詢交易回執(多個 RPC 跨段,總計 12,000 毫秒),後端將確認訊息傳送至前端(網路跨段,15 毫秒),以及前端更新使用者介面(前端跨段,30 毫秒)。 追蹤結果顯示,總時間中有 95% 耗費在等待鏈上確認上,而非應用程式的任何自有程式碼中。
分散式追蹤是透過將追蹤上下文(包含追蹤 ID 和區間 ID)注入每個流經系統的請求來實現的。每個服務都會針對自身處理的任務建立區間,並將追蹤上下文傳遞給下游服務。像 OpenTelemetry 這樣的追蹤函式庫,為大多數程式語言和框架提供了標準化的儀器化功能。像 Jaeger、Zipkin 和 Datadog APM 這樣的可視化工具,會將追蹤以瀑布圖的形式呈現,顯示每個區間的時間點與嵌套關係。
在診斷分散式架構中的延遲問題時,追蹤資料最具價值。當使用者回報某筆交易耗時 30 秒才獲得確認時,追蹤資料能精確顯示這 30 秒的具體耗時分布:25 秒用於等待區塊納入、3 秒用於 RPC 呼叫、1.5 秒用於後端處理,以及 500 毫秒用於前端渲染。 您會立刻明白,優化後端程式碼並無助益;真正的瓶頸在於區塊鏈層級的確認時間。

三者並用
這三大支柱是相輔相成的,而非相互競爭的。典型的事件應變工作流程會同時運用這三者。
一則指標警示觸發:p99 RPC 延遲已超過 1 秒。您開啟 Grafana 儀表板,發現延遲飆升始於 10 分鐘前,且與 eth_getLogs 呼叫量的激增呈正相關。您查詢近期 eth_getLogs 請求的日誌,發現當時正好啟動了一個新的批次工作,該工作執行了範圍廣泛的日誌查詢,每次查詢涵蓋 10,000 個區塊。 您擷取其中一個請求的追蹤記錄,發現 RPC 節點花了 800 毫秒掃描區塊,並花了 200 毫秒將回應序列化。根本原因很明確:批次工作的日誌查詢範圍過於廣泛,消耗了不成比例的節點資源。解決方案是將查詢分頁,改為查詢較小的區塊範圍。
若沒有指標,您將無法察覺問題的存在,直到使用者提出投訴為止。若沒有日誌,您雖能得知延遲增加,卻無法確定是哪些請求導致了此問題。若沒有追蹤資料,您雖能發現 eth_getLogs 執行速度緩慢,卻無法判斷瓶頸究竟出在應用程式、網路,還是節點的區塊掃描上。

該從哪個支柱開始呢?
若您正從零開始建置可觀測性,請先從指標著手,因為指標的收集成本低廉,且能透過儀表板和警示功能立即揭露問題。接著加入結構化日誌,以便您能深入調查指標所揭示的問題。當您的系統橫跨多個服務,且需要精確定位延遲累積的位置時,再導入分散式追蹤。就區塊鏈而言,若將此與RPC 延遲追蹤結合使用,便能涵蓋生產環境中最可能讓您措手不及的那一層。
Quicknode 如何支持這三大支柱
Quicknode該儀表板為每個endpoint 提供內建指標:請求量、回應延遲、錯誤率,以及依方法分類的詳細數據。這些指標讓開發人員無需自訂監測機制,即可即時掌握其區塊鏈基礎架構層的運作狀況。
對於將區塊鏈指標整合至現有可觀察性架構的團隊而言,Quicknode 的專用Clusters 支援 Prometheus Exporter,可將節點層級的指標直接匯入 Prometheus、Grafana、Datadog 或任何相容系統。這使得應用程式指標與區塊鏈基礎架構指標能夠在統一的儀表板上進行監控。
Quicknode Streams 提供資料管線運作狀態的可觀察性,包括傳輸指標、處理狀態及錯誤報告。結合 RPC 分析功能以及您自身的應用程式層級日誌與追蹤機制,Quicknode 為開發人員提供完整的可觀察性全貌,使其能夠診斷並解決區塊鏈堆疊各層級的問題。
常見問題
指標、日誌和追蹤是否等同於監控?
不。它們是基礎的資料類型。監控是指觀察預先定義的訊號並針對其發出警示的作法,而可觀察性則是利用這三種資料類型來調查那些您事先無法預見的問題。
這三種中,哪一種的儲存成本最高?
日誌通常是最昂貴的,因為它們會以完整細節記錄每個個別事件。指標則因採用彙總處理而成本最低,至於追蹤則介於兩者之間,因為它們通常是透過抽樣方式取得,而非針對每個請求進行完整擷取。
對於一個小型應用程式來說,我需要這三樣東西嗎?
起初並非如此。大多數團隊最初只會從指標和基本日誌著手。當請求橫跨多個服務,且難以將延遲歸因於單一元件時,分散式追蹤才顯得有其價值。
什麼是 OpenTelemetry?
OpenTelemetry 是一項開放標準,同時也是一組函式庫,旨在以廠商中立的方式產生指標、日誌和追蹤資料。它讓您只需進行一次儀器化,即可將資料匯出至 Prometheus、Jaeger 或 Datadog 等多種後端系統。
這具體如何應用於區塊鏈 RPC 呢?
RPC 呼叫是造成延遲和錯誤的常見來源,因此透過追蹤請求率、延遲百分位數和錯誤代碼等指標,在日誌中記錄失敗的呼叫,並對延遲的請求進行端到端追蹤,即可讓您全面掌握狀況。如我們在《Node.js 可靠性指南》中所介紹的,可靠的 Node.js 基礎架構能從源頭減少您需要診斷的事件數量。
延伸閱讀
指標、日誌與追蹤的區別 - Quicknode 文件
區塊鏈基礎架構監控-Quicknode 術語表
Quicknode 核心 API
Quicknode 專用Clusters