如何決定 CloudWatch 日誌中的限流?

2 分的閱讀內容
0

當我在使用 Amazon CloudWatch Logs 時,收到了 "RequestLimitExceeded" 或 "ThrottlingException" 錯誤,而且我的 API 呼叫受到限流。

簡短描述

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

解決方案

存取日誌時 CloudWatch 日誌發生間歇性限流

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

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

使用應用程式/指令碼擷取 CloudWatch 日誌資料時的 ThrottlingException 錯誤

若要收集 CloudWatch 日誌,您可以開發一個收集器指令碼。此指令碼嘗試進行 DescribeLogStreamGetLogEvents API 呼叫,以便從不同日誌串流或同一日誌群組的不同時間範圍中提取資料。FilterLogEventsGetLogEventsDescribeLogStreams 等 API 呼叫是專為人工互動而非自動化所設計。這表示您會收到錯誤且 API 呼叫受到限流。

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

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

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

使用 PutLogEvents API 呼叫以 1 MB 的批次將日誌上傳到指定的日誌串流。此 API 的速率限制為每個帳戶每個區域 800 TPS。此適用於各區域,但以下區域除外:美國東部 (維吉尼亞北部)、美國西部 (奧勒岡) 和歐洲 (愛爾蘭),這些區域的配額為每個區域每個帳戶 1500 TPS。您可以請求提高配額。

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

管理您的 CloudWatch Logs 服務配額

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

1.    開啟 Service Quotas 主控台

2.    在導覽窗格中,選擇 AWS services (AWS 服務)。

3.    從 AWS services (AWS 服務) 清單中,搜尋 Amazon CloudWatch Logs

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 (警示名稱)。


相關資訊

在 CloudWatch API 中呼叫 PutMetricData 時如何避免限流?

AWS 官方
AWS 官方已更新 1 年前