如何決定 CloudWatch 日誌中的調節?

上次更新日期:2022 年 4 月 6 日

當我在使用 Amazon CloudWatch Logs 時,收到了 RequestLimitExceeded 或 ThrottlingException 錯誤,而且我的 API 呼叫受到調節。如何防止我的 CloudWatch 日誌中發生調節?

簡短描述

使用 CloudWatch 日誌時,您可能會超出 API 速率限制。發生這種情況時,您會收到 RequestLimitExceeded 或 ThrottlingException 錯誤,而且您的 API 呼叫會受到調節。您必須找出發生調節的位置和時間,以便解決這些錯誤並提出知情的提高速率限制請求。

解決方案

存取日誌時 CloudWatch 日誌發生間歇性調節

您可以使用 FilterLogEvents 或 GetLogEvents API 呼叫,列出您的日誌事件或日誌串流。這些 API 呼叫具有硬限制,且沒有提高限制的資格。這表示如果您使用 FilterLogEvents API 從指定日誌群組搜尋日誌事件時,預設 quaAPI 的預設配額為每個帳戶/區域每秒 5 筆異動 (TPS)。如果達到此限制,您就會收到 RateExceeded 錯誤。

使用這些最佳實務來避免在此使用案例中的調節錯誤:

使用應用程式/腳本擷取 CloudWatch 日誌資料時的 ThrottlingException 錯誤

若要收集 CloudWatch 日誌,您可以開發一個收集器腳本。此腳本嘗試進行 DescribeLogStream 或 GetLogEvents API 呼叫,以便從不同日誌串流或同一日誌群組的不同時間範圍中提取資料。FilterLogEvents、GetLogEvents 和 DescribeLogStreams 等 API 呼叫是專為人工互動而非自動化所設計,因此您會收到錯誤且 API 呼叫受到調節。

使用這些最佳實務來避免在此使用案例中的調節:

  • 當您進行 API 呼叫時,使用指數退避和重試。如需更多資訊,請參閲指數退避和抖動AWS 中的錯誤重試和指數退避
  • 隨時間分配您的 API 呼叫。嘗試使用一些隨機化來安排動作,使其能散布在一段時間上。
  • 在連續 API 呼叫之間加入休眠間隔時間。在從同一腳本或應用程式發送的 API 呼叫之間加入一些延遲。如果 API 呼叫都是快速連續發送,則更有可能導致速率錯誤。
  • 在某些情況下,您可以使用像 Splunk 之類的 SIEM 解決方案從 CloudWatch 擷取日誌。使用 SIEM 解決方案從多個系統收集資料並分析這些資料以偵測異常行為。當您使用 Splunk 外掛程式時,您可能會遭遇到 API 調節。為避免此問題,使用 Amazon Kinesis Data Firehose 建立一個 CloudWatch 日誌訂閲篩選條件,並將日誌資料遞送到 Splunk。如需詳細資訊,請參閲設定適用於 AWS Splunk 附加元件的 Kinesis 輸入

將 PutLogEvents API 呼叫與 Lambda 函數整合時的調節錯誤

使用 PutLogEvents API 呼叫以 1 MB 的批次將日誌上傳到指定的日誌串流。此 API 具有兩個速率限制:

  • 每個日誌串流每秒 5 個請求。額外的請求將受到調節。此配額不能變更。
  • 每個區域每個帳戶每秒 800 筆異動。此適用於各區域,但以下區域除外:美國東部 (維吉尼亞北部)、美國西部 (奧勒岡) 和歐洲 (愛爾蘭),這些區域的配額為每個區域每個帳戶每秒 1500 筆異動。您可以請求提高配額。

如需與此有關的詳細資訊,以及若要請求提高配額,請參閲 CloudWatch Logs 配額

若要將日誌寫入指定的日誌串流,必須在請求中納入順序字符。這是對前一次呼叫的回覆中的最後一次擷取。在某些情況下,您可以在呼叫 PutLogEvent 之前使用 DescribeLogStreams API 取得日誌串流的下一個順序字符。PutLogEvent API 具有比 DescribeLogsStream 高很多的限制,這會導致調節。若要減緩此情況,使用 PutLogEvents API 來取得順序,不要使用 DescribeLogStreams。當您在沒有順序字符的情況下使用 PutLogEvents API 時,您會收到 400 狀態代碼,但有了此錯誤訊息,您會得到下一個順序字符。您可以再次將此順序字符與 PutLogEvents API 搭配使用。

使用這些提示來避免在此使用案例中的調節:

  • 嘗試在同一個 API 呼叫中組合多筆日誌事件。
  • 將 API 呼叫分散到更多日誌串流中。
  • 應用重試邏輯搭配指數退避和抖動。如需詳細資訊,請參閲管理和監控工作負載中的 API 調節
  • 隨時間均勻地分配您的 API 呼叫。

管理您的 CloudWatch Logs 服務配額

AWS 為服務定義配額,以保護效能並確保可用性。CloudWatch 具有指標、警示、API 請求和警示電子郵件通知等配額。使用這些步驟將服務配額視覺化,並設定達到閾值時的警示:

  1. 開啟 Service Quotas 主控台
  2. 在導覽窗格中,選擇 AWS services (AWS 服務)。
  3. AWS services (AWS 服務) 清單中,搜尋 Amazon CloudWatch logs (Amazon CloudWatch 日誌)。
  4. Service quotas (服務配額) 清單中,您可以看到服務配額名稱、套用的值(如果有)、AWS 預設配額以及配額值是否可調整。
  5. 若要查看諸如描述等有關服務配額的詳細資訊,請選擇配額名稱。
  6. 選擇配額名稱後,您可以看到有關此配額的詳細資訊。例如,如果您選擇 GetLogEvents throttle limit in transactions per second (以每秒異動數為單位的 GetLogEvents 調節限制),則會看到:
    • 描述
    • 配額代碼
    • 配額 ARN
    • 利用率:%
    • 套用的配額值
    • AWS 預設配額值
    • 可調整:是/否
  7. Amazon CloudWatch alarms (Amazon CloudWatch 警示) 部分,選擇 Create alarm (建立警示),然後輸入 Alarm threshold (警示閾值) 和 Alarm name (警示名稱)。

此文章是否有幫助?


您是否需要帳單或技術支援?