排解 Monitoring API 問題

本指南說明使用 Monitoring API 時可能發生的問題。

Monitoring API 是 Cloud API 的其中一組。 這些 API 共用一組錯誤代碼。如需 Cloud API 定義的錯誤代碼清單,以及處理錯誤的一般建議,請參閱「處理錯誤」。

一般 API 錯誤

以下列出您可能會在 API 呼叫中看到的 Monitoring API 錯誤和訊息:

  • 404 NOT_FOUND,並顯示「在這個伺服器上找不到您要求的網址」: 網址的某個部分有誤。將網址與方法參考頁面顯示的方法網址進行比較。這項錯誤可能表示有拼字錯誤 (例如「project」而非「projects」),或是大小寫錯誤 (例如「TimeSeries」而非「timeSeries」)。

  • 401 UNAUTHENTICATED with「User is not authorized to access the project(or metric)」:這個錯誤代碼通常表示授權問題,但也可能表示專案 ID 或指標類型名稱有誤。確認拼字和大小寫是否正確。

  • 400 INVALID_ARGUMENT,並顯示「Field filter had an invalid value」(欄位篩選器值無效) 訊息:請檢查監控篩選器的拼字和格式。詳情請參閱「監控篩選器」。

  • 400 INVALID_ARGUMENT「Request was missing field interval.endTime」: 如果缺少結束時間,或結束時間格式不正確,就會看到這則訊息。

    以下是有效時間規格的範例:

    2024-05-11T01:23:45Z
    2024-05-11T01:23:45.678Z
    2024-05-11T01:23:45.678+05:00
    2024-05-11T01:23:45.678-04:30
    

缺少結果

如果 API 呼叫傳回狀態碼 200 和空白回應,請考慮下列事項:

  • 如果通話使用篩選器,篩選器可能沒有比對到任何內容。篩選器比對會區分大小寫。如要解決篩選器問題,請先只指定一個篩選器元件 (例如 metric.type),並確認是否能取得結果。逐一新增其他篩選器元件,建構要求。

使用 timeSeries.list 方法時,資料點可能會遺漏,原因如下:

  • 資料可能已過時。 詳情請參閱「資料保留」。

  • 資料可能尚未傳播至監控服務。 詳情請參閱「指標資料的延遲時間」。

  • 間隔無效:

    • 確認結束時間是否正確。
    • 確認開始時間正確無誤,且早於結束時間。如果缺少開始時間或格式錯誤,API 會將開始時間設為結束時間。如果是 GAUGE 指標,這個時間間隔只會比對開始和結束時間完全符合間隔結束時間的點。如果是 CUMULATIVEDELTA 指標 (用於評估時間間隔),則不會比對任何點。詳情請參閱「時間間隔」。

重試 API 錯誤

有兩個 Cloud API 錯誤代碼指出可能需要重試要求的情況:

  • 503 UNAVAILABLE:如果問題是短暫或暫時性的狀況,重試就很有用。
  • 429 RESOURCE_EXHAUSTED:對於有時間配額的長時間背景工作 (例如每 tn 次呼叫),延遲後重試很有用。如果問題是短暫或暫時性狀況,或是您已用盡以量為準的配額,重試就沒有用。如果是暫時性狀況,請考慮容許失敗。如要解決配額相關問題,請考慮減少配額用量或申請提高配額。

編寫可能會重試要求的程式碼時,請先確認要求是否可安全重試。

可以安全地重試要求嗎?

如果要求是等冪,可以放心重試。等冪動作是指狀態的任何變更都不取決於目前狀態。例如:

  • 讀取 x 是等冪運算,值不會變更。
  • x 設為 10 是等冪運算,如果值不是 10,這可能會變更狀態,但目前的值為何並不重要。嘗試設定值的次數也不重要。
  • 遞增 x「並非等冪,新值取決於目前的值。

以指數輪詢方式重試

實作程式碼來重試要求時,您不希望無限期快速發出新要求。如果系統負載過重,這種做法會加劇問題。

請改用部分指數輪詢方法。 如果要求失敗是因為暫時超載,而非真正無法使用,解決方法是降低負載。部分指數輪詢遵循下列一般模式:

  • 決定重試時願意等待的時間長度,或願意嘗試的次數。超過這項限制時,請將服務視為無法使用,並為應用程式適當處理該情況。這會導致退避遭到截斷,也就是在某個時間點停止重試。

  • 請重試要求,並逐漸延長暫停時間,以減少重試頻率。請重試,直到要求成功或達到您設定的限制為止。

    間隔通常會根據重試次數的冪次,以某個函式增加,因此稱為「指數輪詢」。

實作指數輪詢的方法有很多種。以下範例會將遞增的輪詢延遲時間新增至 1000 毫秒的最小延遲時間。初始暫停延遲時間為 2 毫秒,每次嘗試都會增加至 2retry_count 毫秒。

下表顯示使用初始值的重試間隔:

  • 最短延遲時間 = 1 秒 = 1000 毫秒
  • 初始輪詢時間 = 2 毫秒
重試次數 額外延遲 (毫秒) 重試時間 (毫秒)
0 20 = 1 1001
1 21 = 2 1002
2 22 = 4 1004
3 23 = 8 1008
4 24 = 16 1016
... ... ...
n 2n 1000 + 2n

您可以停止重試週期,方法是在 n 次嘗試後停止,或是當所花時間超過應用程式的合理值時停止。

詳情請參閱維基百科的「指數輪詢」一文。