

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

# 使用內嵌指標格式發佈自訂指標
<a name="web-functions-emf"></a>

使用 [Amazon CloudWatch 內嵌指標格式 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html)(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 函數搭配使用
<a name="web-functions-emf-how-it-works"></a>

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

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

1. Lambda 會在請求執行的區域中將其擷取為日誌事件，並將其集中到首頁 AWS 區域，與任何其他日誌輸出相同。如需詳細資訊，請參閱[Amazon CloudWatch Logs 中的 Web 函數日誌](web-functions-logging.md)。

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

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

## 發佈自訂指標
<a name="web-functions-emf-example"></a>

下列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](https://github.com/awslabs/aws-embedded-metrics-node)而不是自行建置 EMF 物件。如需程式庫清單，請參閱《*Amazon CloudWatch 使用者指南*》中的[使用用戶端程式庫以內嵌指標格式建立日誌](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Libraries.html)。在依賴程式庫之前，請確認它會直接將 EMF 物件寫入 Web 函數中的標準輸出，而不是透過 `console`或 CloudWatch 代理程式。

請注意欄位在 EMF 物件中扮演的三個角色：
+ 在 中命名的欄位`Metrics`會成為 CloudWatch 指標。
+ 在 中命名的欄位`Dimensions`會變成指標維度。將不同維度值的數量保持在低。每個組合都會建立個別的指標。
+ 任何其他欄位都會保留在日誌事件中，做為您可以使用 Amazon CloudWatch Logs Insights 查詢的內容，但不會建立指標。

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

## 自訂指標的帳單
<a name="web-functions-emf-billing"></a>

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

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

如需目前價格，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)。