Skip to main content
首頁博客指南Tracking API 可靠性指南:如何在正式上線後監控正常運行時間、數據新鮮度及遺漏更新

Tracking API 可靠性指南:如何在正式上線後監控正常運行時間、數據新鮮度及遺漏更新

17TRACK

上線後,請從三個獨立層面監察 Tracking API 的可靠性:請求是否成功、貨件資訊是否在可接受的延遲內到達,以及更新是否完整無缺地送達你自己的系統。API 成功回應並不能證明追蹤資料是最新,亦不能證明客戶通知已成功送達。請為每個層面設定獨立的指標、警報及復原程序。

Tracking API Reliability Guide How to Monitor Uptime Data Freshness

本指南適用於負責實時貨件追蹤整合的工程師及營運團隊。目標是在可見性問題演變成支援問題之前偵測出來,然後判斷故障是出現在承運商資料流、追蹤服務提供商、你的 webhook 接收器,還是下游處理流程。

定義可靠的追蹤更新代表甚麼

先從完整的傳送路徑開始:貨件登記、服務提供商擷取、API 回應或 webhook 傳送、內部處理、資料庫持久化,以及面向客戶的顯示。如果你會發送通知,請將其視為另一個階段,而不是假設已儲存的更新必然已送達買家。

對每個階段,記錄其負責人,以及證明成功的依據。服務提供商接受追蹤編號,只能證明登記已被接受,並不代表承運商已發佈事件。Webhook 收到成功的 HTTP 回應,只能證明你的端點已確認接收,不一定代表你的工作程序已提交更新。

Google 的 SRE 指南將延遲、流量、錯誤及飽和度描述為監察的四項黃金訊號。這些訊號對你的整合基礎設施很有用,但貨件追蹤還需要新鮮度及完整性檢查,因為看似健康的端點可能會提供未有變更或不完整的資訊。

層面要回答的問題要收集的證據
API 可用性整合能否完成有效操作?傳輸結果、應用程式結果、延遲、逾時率
資料新鮮度資訊落後了多久?事件時間、觀察時間、接收時間、持久化時間
更新完整性每項預期可擷取的更新是否都已送達目的地?對賬差異、處理記錄、未解決的缺口
客戶可見性顯示的狀態是否與已儲存的貨件狀態一致?讀取路徑檢查、快取年齡、通知處理結果

在設定警報前為整合加入監測

保留一份營運記錄,將貨件與其登記嘗試、傳入更新、處理嘗試及最終狀態連結起來。使用內部貨件識別碼進行關聯;在可行情況下,避免將追蹤編號及客戶資料放入廣泛可存取的日誌。

最低限度的實用記錄包括:

  • 內部貨件 ID、已知的承運商識別碼、整合帳戶及環境。
  • 請求或關聯 ID、操作類型、嘗試時間、結果類別及持續時間。
  • 服務提供商提供的事件 ID,以及原始事件時間戳記和時區資訊。
  • Webhook 接收時間、可靠儲存時間、處理完成時間,以及可量度時的顯示可用時間。
  • 可用時的負載結構版本、剖析結果、去重結果及失敗原因。

在需要調查或重播時,根據適當的存取及保留控制措施保存原始負載。不要記錄授權標頭或機密。指標應使用承運商及結果類別等有限維度;個別追蹤編號應放在可搜尋記錄中,而不是高基數的指標標籤中。

將事件時間與觀察時間分開。OpenTelemetry 日誌資料模型透過 Timestamp 和 ObservedTimestamp 明確區分兩者。將相同區分應用於追蹤記錄,有助避免將延遲報告的承運商事件誤認為緩慢的資料庫寫入。

從應用程式角度監察正常運作時間

同時使用真實生產流量及低流量的合成檢查。生產流量能反映實際客戶影響。只要使用已記錄、非破壞性的操作並遵守服務提供商的使用限制,合成檢查便能在生產流量較少時偵測故障。

有用的請求成功率指標是:

Successful eligible operations / All eligible attempted operations

請同時根據 HTTP 狀態及已記錄的應用程式層結果定義成功。有些介面可能會返回成功的 HTTP 回應,但在主體中報告操作失敗。對於批次操作,除了請求層面的結果,也要量度項目層面的結果。

保留兩種故障視角。客戶影響視角包括任何阻止應用程式完成任務的情況。診斷視角則分開服務提供商錯誤、網絡故障、驗證問題、無效輸入,以及配額或速率限制回應。過期憑證未必代表服務提供商中斷,但對你的整合來說仍然是中斷。

  • 延遲:在流量足以支持有意義百分位數的情況下,追蹤 p50、p95 及 p99。請另外量度逾時,避免快速失敗令延遲看似正常。
  • 流量:將請求及回呼數量與貨件登記數量及活躍貨件數量作比較。
  • 錯誤:分開傳輸故障、應用程式故障、剖析錯誤及下游持久化故障。
  • 飽和度:監察連線池、工作程序容量、佇列深度、佇列中最舊項目,以及可用請求額度。

除非這些量度採用合約中的確切定義,否則不要將其宣稱為服務提供商的合約正常運作時間。你觀察到的整合可用性與供應商的服務級別協議回答的是不同問題。

量度新鮮度,但不要將沉默誤認為故障

貨件沒有移動,不代表它必然已過時。國際運輸、交接、週末及承運商的掃描習慣都可能造成合理的空檔。監察的問題在於分辨「沒有新事情發生」與「新資訊已存在,但系統尚未收到」。

針對不同延遲使用不同時鐘

  • 最新事件年齡:目前時間減去最新承運商事件時間。這描述的是貨件可見性,不一定代表整合效能。
  • 接收延遲:你的接收時間減去事件時間。當缺少中間時間戳記時,這包括上游報告及擷取延遲。
  • 內部處理延遲:可靠處理完成時間減去接收時間。這隔離出系統內部的工作。
  • 顯示延遲:面向客戶的可用時間減去處理完成時間。這可以揭示快取或讀取模型問題。
  • 驗證年齡:目前時間減去上次成功檢查較新資訊的時間。這量度的是檢查活動,不代表承運商資料流是最新。

只有在必要的服務提供商時間戳記存在且其含義已有記錄時,才計算服務提供商特定的資料接收延遲。沒有該資料時,不能公平地將接收延遲歸因於任何一方。

將時間戳記正規化至一致的時區,同時保留其原始表示方式。標記缺少時區資訊、未來日期事件及時鐘不一致。不要靜默地將負延遲轉換為零;應調查,或將其分類為時間戳記品質問題。

比較相似貨件

按承運商、已知的服務或路線、貨件狀態,以及登記後經過的時間建立新鮮度視圖。將等待首次事件的新登記貨件與已在運輸中的貨件分開。根據你的營運規則,將已送達貨件排除在活躍移動檢查之外,同時保留工作流程所需的任何送達後監察。

根據業務要求及觀察到的行為設定初始閾值,而不是捏造一個通用的更新間隔。適合本地派送的閾值,可能會為跨境交接產生噪音。相反,廣泛的網絡平均值可能會掩蓋影響單一承運商的問題。

為每個新鮮度面板標明其覆蓋範圍。如果部分貨件沒有事件時間戳記,請將該群組分開顯示,而不是令其餘貨件看起來代表所有流量。

透過對賬找出遺漏的更新

僅靠 webhook 數量不能確定完整性。流量少可能是正常情況,而成功的 webhook 回應也可能掩蓋下游處理故障。對賬會將參考來源目前公開的資料,與系統實際儲存或處理的資料作比較。

  1. 定義符合條件的群組。包括已登記及正在監察的貨件。將遭拒的登記及已暫停的監察分開追蹤,避免它們從營運報告中消失。
  2. 選擇參考來源。在已記錄的 API 允許時,獨立於 webhook 接收流程擷取目前的追蹤詳情。承運商追蹤頁面有助調查個別個案,但未經授權不應成為自動化抓取依賴。
  3. 套用寬限期。在將差異分類為疑似缺口前,為正常傳送及處理延遲預留時間。
  4. 比較同類資料。匹配支援的事件識別碼,或對時間戳記、狀態、位置及描述使用已記錄的正規化規則。
  5. 安全地復原。重播保留的訊息,或透過正常的冪等處理路徑擷取獲准的更新。
  6. 確認目的地。驗證資料庫及面向客戶的視圖已修正,而不只是確認復原工作已執行。

內部指標可以表示為:

Eligible reconciled shipments with unresolved differences / All eligible reconciled shipments

請將其稱為未解決對賬缺口率,而不是通用的遺漏事件率。如果參考來源只公開最新狀態,便不能證明每個歷史事件都已到達。即使最終狀態一致,也可能掩蓋遺漏的中間里程碑。

先按承運商、貨件年齡及狀態建立分層樣本。在事故期間,根據已記錄的限制擴大受影響群組的覆蓋範圍。報告已檢查的數量及存在差異的數量,避免將小型樣本誤認為完整覆蓋。

令 webhook 接收流程可復原

設計接收器,以驗證傳入請求,並在確認接收前可靠地捕獲已接受的訊息,這應符合服務提供商已記錄的傳送合約。在可行情況下,將較慢的業務邏輯放在獨立工作程序中。

請核實實際整合規則,而不是作出假設:驗證或簽名驗證、確認接收要求、請求逾時、重試條件、重試時長、排序及重播可用性。這些細節決定應用程式必須提供哪種復原能力。

  • 在設計中預期重複訊息:在可用時使用已記錄的事件 ID。否則,建立範圍謹慎的去重鍵,並以合法的相似事件測試。
  • 處理亂序傳送:保留事件歷史,並使用明確的狀態轉換規則,而不是盲目以最後收到的訊息取代貨件狀態。
  • 隔離故障:保留無法處理的訊息及其錯誤詳情,並提供受控的重新投遞流程。
  • 分開狀態復原與副作用:重播事件不應自動重新發送舊的派送電郵,或重複其他面向客戶的操作。

如果你的整合使用 17TRACK,請以 官方 Tracking API 文件作為實作參考,並檢查適用於你的整合的要求。Tracking API 產品頁面提供產品背景,但監察閾值及復原假設應來自已記錄的行為、你的服務協議及生產量度,而不是產品描述。

將儀表板轉化為可採取行動的警報

每個警報都應指出受影響群組、可能的故障階段、業務影響及第一個調查步驟。全局性的「追蹤已過時」警報通常不足以支援行動。

訊號模式首次調查主要負責人
多個承運商的請求均失敗檢查憑證、網絡、限制及服務提供商回應整合或平台值班人員
回呼已到達,但處理年齡持續增加檢查工作程序、資料庫健康狀況及已隔離訊息應用程式工程團隊
某個承運商出現異常的新鮮度缺口比較群組並抽樣檢查參考追蹤記錄追蹤營運團隊與工程團隊
已儲存狀態是最新,但顯示內容過時檢查快取、讀取模型及前端擷取面向客戶的應用程式團隊

使用持續超出閾值的情況及最小樣本數,以減少噪音。對於可用性及處理目標,錯誤預算有助區分短暫異常與消耗不可接受比例錯誤額度的故障。將承運商資料新鮮度目標與工程團隊可直接控制的目標分開。

使用能證明完成的復原操作手冊

事故開始時,確定最後已知的健康點並保存相關記錄。判斷受影響的是新登記、傳入訊息、處理流程,還是顯示更新。然後估算有風險的貨件群組,而不是只報告請求數量。

復原故障階段,在已記錄的限制內重播或重新擷取,並針對受影響群組執行對賬。只有在待處理項目的年齡恢復正常、未解決缺口已獲處理,以及面向客戶的狀態已完成檢查後,才關閉事故。另行記錄任何無法復原的歷史更新。

透過受控故障測試此流程:接收器不可用、負載格式錯誤、工作程序中斷、重複事件、亂序事件及憑證過期。測試在團隊能偵測問題、確認負責人、復原資料並避免重複副作用時才算通過,而不只是端點再次可連接。

常見問題

API 可以返回成功回應,但追蹤資訊仍然過時嗎?

可以。請求成功只能證明操作按介面的規則完成,並不能證明承運商已發佈新的掃描資料,或每個下游系統都已處理結果。請分開監察新鮮度及端到端處理。

我們應多久對賬一次貨件?

根據可接受的偵測延遲、活躍貨件數量、請求額度及已記錄的限制選擇頻率。對營運上敏感的群組使用較頻密的檢查,並安排較廣泛的定期掃描以確保覆蓋。沒有一個間隔適合所有承運商及工作流程。

沒有 webhook 活動是否代表整合已故障?

不一定。可能只是沒有新事件。將回呼活動與活躍貨件群組、近期模式、接收器健康狀況,以及在支援時進行的獨立擷取檢查作比較。應根據相互印證的證據發出警報,而不是單靠沉默。

我們是否應持續輪詢作為備援?

預設不應如此。無控制的輪詢可能消耗請求容量,卻未能提升可見性。在已記錄的限制內,使用有界對賬及針對事故的擷取。確認輪詢與 webhook 傳送在你的服務提供商中如何互相配合。

升級疑似服務提供商問題時,我們應提供甚麼?

包括受影響的操作類型、UTC 時間範圍、經清理的請求 ID、回應代碼、透過獲批准的安全渠道提供的代表性貨件參考,以及預期與觀察到的行為。說明你已檢查的內部階段。不要包括憑證或不必要的客戶資料。

來源

Loading