監控並行 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

監控並行

Lambda 會發出 Amazon CloudWatch 指標,以協助您監控函數的並行性。本主題將說明這些指標及其解譯方式。

一般並行指標

使用下列指標來監控 Lambda 函數的並行。每個指標的精細程度為 1 分鐘。

  • ConcurrentExecutions – 在指定時間點的作用中並行調用數。Lambda 會針對所有函數、版本和別名發出此指標。對於 Lambda 主控台中的任何函數,Lambda 會在監控索引標籤的指標下以原生方式顯示 ConcurrentExecutions 的圖表。使用檢視此測量結果MAX

  • UnreservedConcurrentExecutions – 使用未預留並行的作用中並行調用數。Lambda 會針對區域中的所有函數發出此指標。使用檢視此測量結果MAX

  • ClaimedAccountConcurrency – 無法用於隨需調用的並行數量。ClaimedAccountConcurrency 等於 UnreservedConcurrentExecutions 加上配置並行的數量 (亦即預留並行總數加上佈建並行總數)。如果 ClaimedAccountConcurrency 超過帳戶並行限制,您可以請求提高帳戶並行上限。使用檢視此測量結果MAX。如需詳細資訊,請參閱使用 ClaimedAccountConcurrency 指標

佈建並行指標

使用下列指標來監控使用佈建並行的 Lambda 函數。每個指標的精細程度為 1 分鐘。

  • ProvisionedConcurrentExecutions – 目前使用佈建並行處理調用的執行環境執行個體數。Lambda 會針對已設定佈建並行的每個函數版本和別名發出此指標。使用檢視此測量結果MAX

ProvisionedConcurrentExecutions 與您配置的佈建並行總數不同。例如,假設您將 100 個佈建並行單位配置給函數版本。在任何給定的分鐘內,如果在這 100 個執行環境中最多 50 個同時處理調用,則 MAX(ProvisionedConcurrentExecutions) 的值為 50。

  • ProvisionedConcurrentInvocations - Lambda 使用佈建並行調用函數程式碼的次數。Lambda 會針對已設定佈建並行的每個函數版本和別名發出此指標。使用檢視此測量結果SUM

ProvisionedConcurrentInvocations 與 ProvisionedConcurrentExecutions 不同,ProvisionedConcurrentInvocations 計算調用總數,ProvisionedConcurrentExecutions 則計算作用中環境數。若要了解這種區別,請考慮以下案例:

ProvisionedConcurrentInvocations 與的比較 ProvisionedConcurrentExecutions。

在此範例中,假設您每分鐘收到 1 次調用,而且每次調用都需要 2 分鐘才能完成。每個橘色水平長條代表一個請求。假設您將 10 個佈建並行單位配置給此函數,這樣每個請求都會在佈建並行上執行。

在分鐘 0 和 1 之間,收到 Request 1在分鐘 1 時,MAX(ProvisionedConcurrentExecutions) 的值為 1,因為在過去一分鐘內最多有 1 個執行環境處於活動狀態。由於過去一分鐘內有 1 個新請求,因此 SUM(ProvisionedConcurrentInvocations) 的值也是 1。

在分鐘 1 和 2 之間,收到 Request 2,且 Request 1 繼續執行。在第 2 分鐘MAX(ProvisionedConcurrentExecutions) 的值為 2,因為在過去一分鐘內最多有 2 個執行環境處於作用中狀態。但是,SUM(ProvisionedConcurrentInvocations) 的值是 1,因為在過去一分鐘內只有 1 個新請求。此指標行為會一直持續到範例結束為止。

  • ProvisionedConcurrencySpilloverInvocations – 當所有佈建並行都在使用中時,Lambda 使用標準 (預留或未預留) 並行調用函數的次數。Lambda 會針對已設定佈建並行的每個函數版本和別名發出此指標。使用檢視此測量結果SUMProvisionedConcurrentInvocations + ProvisionedConcurrencySpilloverInvocations 的值應等於函數調用總數 (即 Invocations 指標)。

    ProvisionedConcurrencyUtilization – 使用中佈建並行百分比 (即 ProvisionedConcurrentExecutions 的值除以配置的佈建並行總數)。Lambda 會針對已設定佈建並行的每個函數版本和別名發出此指標。使用檢視此測量結果MAX

例如,假設您將 100 個佈建並行單位佈建給函數版本。在任何指定的分鐘內,如果這 100 個執行環境中最多有 60 個同時處理叫用,則 MAX(ProvisionedConcurrentExecutions) 的值為 60,而 MAX(ProvisionedConcurrentUtilization) 的值為 0.6。

ProvisionedConcurrencySpilloverInvocations 的值偏高可能表示您需要為函數配置額外的佈建並行。或者,您可以設定 Application Auto Scaling,以根據預先定義的閾值來處理佈建並行的自動擴展

相反地,ProvisionedConcurrencyUtilization 的值持續偏低可能表示您為函數配置過多佈建並行。

使用 ClaimedAccountConcurrency 指標

Lambda 會使用 ClaimedAccountConcurrency 指標來判斷您的帳戶可用於隨需調用的並行數量。Lambda 會使用以下公式計算 ClaimedAccountConcurrency

ClaimedAccountConcurrency = UnreservedConcurrentExecutions + (allocated concurrency)

UnreservedConcurrentExecutions 是使用未預留並行的作用中並行調用數目。配置的並行是下列兩個部分的總和 (以「預留並行」取代 RC,以「佈建並行」取代 PC):

  • 區域中所有函數的 RC 總數。

  • 區域中使用 PC 的所有函數的 PC 總數,使用 RC 的函數除外。

注意

您不能為一個函數配置多於 RCPC。因此,一個函數的 RC 總是大於或等於它的 PC。對於同時具有 PCRC 的函數,Lambda 在計算這些函數的配置並行比重時僅考慮 RC,即兩者當中的較大值。

Lambda 會使用 ClaimedAccountConcurrency 指標來判斷可用於隨需調用的並行數量,而不使用 ConcurrentExecutions。雖然 ConcurrentExecutions 指標對於追蹤作用中並行調用的數量很有用,但並不總是反映您真正的並行可用性。這是因為 Lambda 也會考慮預留並行和佈建並行來確定可用性。

為了說明 ClaimedAccountConcurrency,請考慮一種情況,即您可以跨函數設定大量預留並行和佈建並行,但其中有很多未被使用。在下列範例中,假設您的帳戶並行限制為 1,000,而您的帳戶中有兩種主要的函數:function-orangefunction-blue。您為 function-orange 配置 600 個單位的預留並行。您為 function-blue 配置 200 個單位的佈建並行。假設隨著時間推移,您要部署額外的函數並觀測以下流量模式:

顯示 Lambda 如何確定的圖表 ClaimedAccountConcurrency。

在上一張圖表中,黑線表示隨時間推移的實際並行使用,紅線表示隨時間推移的 ClaimedAccountConcurrency 值。在這種情況下,儘管函數的實際並行利用率較低,但 ClaimedAccountConcurrency 始終至少為 800。這是因為您為 function-orangefunction-blue 配置了 800 個單位總數的並行。從 Lambda 的角度來看,您已經「聲明」這些並行供使用,因此對於其他函數,您實際上只剩下 200 個單位的並行。

針對這個情況,在 ClaimedAccountConcurrency 公式中配置的並行是 800。然後,我們可以在圖表的不同點衍生 ClaimedAccountConcurrency 值。

  • t1ClaimedAccountConcurrency 為 800 (800 + 0 UnreservedConcurrentExecutions)。

  • t2ClaimedAccountConcurrency 為 900 (800 + 100 UnreservedConcurrentExecutions)。

  • t3ClaimedAccountConcurrency 還是 900 (800 + 100 UnreservedConcurrentExecutions)。

設定ClaimedAccountConcurrency量度 CloudWatch

Lambda 發出的ClaimedAccountConcurrency度量。 CloudWatch使用此指標和 SERVICE_QUOTA(ConcurrentExecutions) 的值取得有關您的帳戶的並行利用率百分比,如下方公式所示:

Utilization = (ClaimedAccountConcurrency/SERVICE_QUOTA(ConcurrentExecutions)) * 100%

下列螢幕擷取畫面說明如何在中繪製此公式的圖形 CloudWatch。綠色 claim_utilization 線代表此帳戶中的並行利用率,約為 40%:

顯示如何在中使用 ClaimedAccountConcurrency 量度的螢幕擷取畫面 CloudWatch。

上一個螢幕擷取畫面還包含在並行使用率超過 70% 時進入ALARM狀態的 CloudWatch 警示。您可以使用 ClaimedAccountConcurrency 指標和類似的警示來主動確定您何時可能需要請求更高的帳戶並行上限。