View a markdown version of this page

使用內嵌指標格式發佈自訂指標 - AWS Lambda

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

使用內嵌指標格式發佈自訂指標

使用 Amazon CloudWatch 內嵌指標格式 (EMF),您可以從 AWS Lambda Web 函數發佈自己的指標,例如下單、快取命中率或付款延遲。您的應用程式會將結構化 JSON 物件寫入其日誌,CloudWatch 會從中擷取指標。使用自訂指標來追蹤應用程式的功能。Lambda 發佈的指標僅描述請求結果和資源用量。

您也可以直接呼叫 CloudWatch PutMetricData API 來發佈自訂指標,但我們建議 EMF for Web Functions:

  • 沒有新增的請求延遲 – 您的應用程式不會在提供 HTTP 回應的路徑上呼叫 CloudWatch API。

  • 沒有額外的許可 – 您不需要 cloudwatch:PutMetricData許可。EMF 使用與執行角色已經需要的日誌相同的 Amazon CloudWatch Logs 許可。

  • 使用日誌集中化 – 由於 EMF 指標會與您的日誌一起傳輸,因此主要區域具有端點提供的每個區域的值。您發佈的指標只會PutMetricData出現在您呼叫它的區域中。

EMF 如何與 Web 函數搭配使用

EMF 指標會透過下列步驟從您的應用程式傳送至 CloudWatch:

  1. 您的應用程式會直接將 EMF 格式的 JSON 物件寫入標準輸出,後面接著換行。

  2. Lambda 會在請求執行的區域中將其擷取為日誌事件,並將其集中到首頁 AWS 區域,與任何其他日誌輸出相同。如需詳細資訊,請參閱Amazon CloudWatch Logs 中的 Web 函數日誌。

  3. CloudWatch 從請求執行的區域中的物件擷取指標,Lambda 會將指標複寫到主要區域。指標會出現在您在 物件中指定的命名空間中。在主要區域中,指標包含端點提供的每個區域中的值。

您的自訂指標會顯示在您自己的命名空間中,而不是在 中AWS/Lambda/Web。該命名空間保留給 Lambda 發佈的指標。

發佈自訂指標

下列Node.js範例會在 MyWebApp 命名空間下方發佈具有 PaymentProvider維度的 CheckoutLatency 指標和 OrdersPlaced 指標。它會使用 寫入 EMF 物件process.stdout.write。請勿將 EMF 物件傳遞至 console方法。Lambda 會在自己的 JSON 日誌事件中包裝console輸出,而 CloudWatch 不會從包裝的物件擷取指標。

function publishCheckoutMetrics(provider, latencyMs, orders) { process.stdout.write(JSON.stringify({ _aws: { Timestamp: Date.now(), CloudWatchMetrics: [ { Namespace: 'MyWebApp', Dimensions: [['PaymentProvider']], Metrics: [ { Name: 'CheckoutLatency', Unit: 'Milliseconds' }, { Name: 'OrdersPlaced', Unit: 'Count' } ] } ] }, PaymentProvider: provider, CheckoutLatency: latencyMs, OrdersPlaced: orders, // Fields outside the metric definitions are kept as searchable log context. requestPath: '/checkout' }) + '\n'); }

您可以使用 EMF 用戶端程式庫,例如 GitHub 網站上的 aws-embedded-metrics,Node.js而不是自行建置 EMF 物件。如需程式庫清單,請參閱《Amazon CloudWatch 使用者指南》中的使用用戶端程式庫以內嵌指標格式建立日誌。在依賴程式庫之前,請確認它會直接將 EMF 物件寫入 Web 函數中的標準輸出,而不是透過 console或 CloudWatch 代理程式。

請注意欄位在 EMF 物件中扮演的三個角色:

  • 在 中命名的欄位Metrics會成為 CloudWatch 指標。

  • 在 中命名的欄位Dimensions會變成指標維度。將不同維度值的數量保持在低。每個組合都會建立個別的指標。

  • 任何其他欄位都會保留在日誌事件中,做為您可以使用 Amazon CloudWatch Logs Insights 查詢的內容,但不會建立指標。

刻意使用最後一個屬性:將請求 ID 或客戶 ID 等高基數值附加為純欄位而非維度,因此您可以在 Logs Insights 中找到特定請求,而不會乘以指標計數。

自訂指標的帳單

EMF 會產生日誌擷取和自訂指標費用。日誌事件會以 Amazon CloudWatch Logs 價格計費,而擷取的指標會以 CloudWatch 自訂指標計費。日誌事件的第一個集中化是免費的。CloudWatch 會在執行請求的區域中擷取 EMF 指標,而 Lambda 會將它們複寫到主要區域,因此在主要區域外提供的請求會在兩個區域中產生自訂指標。

日誌磁碟區、指標數量和不同維度組合的數量會影響成本。以您將在 或 圖形上發出警示的精細程度發佈指標,並避免高基數維度。

如需目前價格,請參閱 Amazon CloudWatch 定價。