View a markdown version of this page

監控並行 - 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。

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

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

ProvisionedConcurrencyInvocations 與 ProvisionedConcurrentExecutions 的比較。

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

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

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

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

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

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

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

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

使用 ClaimedAccountConcurrency 指標

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

ClaimedAccountConcurrency = UnreservedConcurrentExecutions + (allocated concurrency)

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

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

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

注意

您無法RC為函數配置PC超過 。因此,函數的 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)。

在 CloudWatch 中設定 ClaimedAccountConcurrency 指標

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

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

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

在 CloudWatch 中使用 ClaimedAccountConcurrency 指標。

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