跳至內容

如何疑難排解 CloudWatch 日誌中的限流錯誤?

2 分的閱讀內容
0

當我使用 Amazon CloudWatch 日誌時,我會收到「RequestLimitExceeded」或「ThrottlingException」錯誤,且我的 API 調用被限流。

簡短說明

當您使用 CloudWatch 日誌時,您可能會超過 API 率配額。發生這種情況時,您的 API 呼叫會被限流,並且您會收到 RequestLimitExceedThrottlingException 錯誤。若要解決這些錯誤,請確定限流錯誤發生的位置和時間。然後,提出明智的率配額增加請求。

解決方法

存取日誌時 CloudWatch 日誌間歇性限流錯誤

若要列出日誌事件或日誌串流,請使用 FilterLogEvents GetLogEvents API 呼叫。這些 API 呼叫不符合增加配額的資格。但是,當您使用 FilterLogEvents API 從指定的日誌群組搜尋日誌事件時,會有一個配額。每個 AWS 帳戶或 AWS 區域的配額為每秒五次交易 (TPS)。如果您達到此配額,則會收到 RateExceeded 錯誤。

為了避免這些限流錯誤,請使用訂閱篩選器即時從 CloudWatch 日誌擷取日誌資料。如需詳細資訊,請參閱日誌群組層級訂閱篩選條件透過訂閱即時處理日誌資料

這也是使用 CloudWatch 日誌洞察來快速從 CloudWatch 日誌取得日誌資料的最佳實務。若要檢視特定的日誌群組,請使用查詢篩選日誌。請確保為批次使用案例,將日誌資料匯出至 Amazon Simple Storage Service (Amazon S3)

**注意:**日誌資料最多可能需要 12 個小時才能處理,然後才能從 CloudWatch 日誌匯出資料。使用此方法進行即時分析和處理並不是最佳實務。

使用指令碼擷取 CloudWatch 日誌資料時發生 ThrottlingException 錯誤

若要收集 CloudWatch 日誌,您可以開發收集器指令碼。若要從相同的日誌群組中的不同日誌串流或不同時間範圍擷取資料,請建立執行 DescribeLogStreamsGetLogEvents API 呼叫的指令碼。但是,API 呼叫,例如 FilterLogEventsGetLogEventsDescribeLogStreams 是為人類互動而設計的,而不是用於自動化。如果您在指令碼中使用這些 API,則 API 呼叫會受到限流,並且您會收到錯誤。

若要避免在此使用案例中的限流錯誤,請在進行 API 呼叫時使用指數退避並重試。如需詳細資訊,請參閱指數退避和抖動重試行為。確保隨時間的推移分佈 API 呼叫。使用隨機化排程動作,以便它們在一段時間內分散。

如果快速連續發送 API 呼叫,則可能會導致率錯誤。為避免此問題,請在連續 API 呼叫之間新增睡眠間隔。此外,在相同指令碼或應用程式發送的 API 調用之間新增延遲。

當您使用安全資訊和事件管理 (SIEM) 解決方案 (例如 Splunk) 從 CloudWatch 擷取日誌時,Splunk 外掛程式可能會導致 API 限流錯誤。若要避免此問題,請使用 Amazon Data Firehose 建立 CloudWatch 日誌訂閱篩選條件。然後,將日誌資料傳遞給 Splunk。如需詳細資訊,請參閱 Splunk 網站上的 Amazon Web 服務 Splunk 附加元件簡介

將 PUTLogEvents API 呼叫與 Lambda 函數整合時的限流錯誤

當您將 PUTLogEvents API 呼叫與 AWS Lambda 函數整合時,PutLogEvents 會以 1 MB 的批次上傳日誌至指定的日誌串流。此 API 的率配額為每秒,每個帳戶,每個區域 5000 次。

如需詳細資訊並要求增加配額,請參閱 CloudWatch 日誌配額

管理您的 CloudWatch 日誌服務配額

AWS 定義服務配額,以保護效能並確保可用性。CloudWatch 具有指標、警示、API 請求和警示電子郵件通知的配額。若要查看您的服務配額,並在達到臨界值時設定警示,請完成下列步驟:

  1. 開啟 Service Quotas 主控台
  2. 在導覽窗格中,選擇 AWS 服務
  3. AWS 服務清單中搜尋 Amazon CloudWatch 日誌
  4. 服務配額清單會顯示多個屬性或選項:服務配額名稱、套用的值 (如果可用)、AWS 預設配額,以及配額值是否可調整。
  5. 若要查看有關服務配額的詳細資訊,請選擇配額名稱。例如,如果您在每秒交易中選擇 GetLogEvents 限流限制,則會看到下列項目:
    描述
    配額程式碼
    **配額 ARN **
    **使用率:% **
    **套用配額值 **
    **AWS 預設配額值 **
    **可調整: 是/否 **
  6. Amazon CloudWatch 警示區段中,選擇建立警示,然後輸入警示臨界值警示名稱

相關資訊

當我呼叫 CloudWatch API 中的 PutMetricData 時如何避免限流?

AWS 官方已更新 2 年前