

# 使用 Amazon CloudWatch Lambda 洞察监控函数性能
<a name="monitoring-insights"></a>

Amazon CloudWatch Lambda Insights 收集和聚合无服务器应用程序的 Lambda 函数运行时性能指标和日志。本页将介绍如何启用和使用 Lambda Insights 来诊断 Lambda 函数的问题。

**Topics**
+ [Lambda Insights 如何监视无服务器应用程序](#monitoring-insights-how)
+ [定价](#monitoring-insights-pricing)
+ [支持的运行时](#monitoring-insights-runtimes)
+ [在 Lambda 控制台中启用 Lambda Insights](#monitoring-insights-enabling-console)
+ [以编程方式启用 Lambda Insights](#monitoring-insights-enabling-programmatically)
+ [使用 Lambda Insights 控制面板](#monitoring-insights-multifunction)
+ [检测函数异常的工作流程示例](#monitoring-insights-anomalies)
+ [使用查询排除函数故障的示例工作流程](#monitoring-insights-queries)
+ [接下来做什么？](#monitoring-console-next-up)

## Lambda Insights 如何监视无服务器应用程序
<a name="monitoring-insights-how"></a>

CloudWatch Lambda Insights 是针对在 AWS Lambda 上运行的无服务器应用程序的监控和故障排除解决方案。该解决方案收集、聚合和汇总系统级指标，包括 CPU 时间、内存、磁盘和网络使用情况。它还收集、聚合和汇总诊断信息（如冷启动和 Lambda 工件关闭），以帮助您隔离 Lambda 函数的问题并快速解决这些问题。

Lambda Insights 使用作为 [Lambda 层](chapter-layers.md)提供的全新 CloudWatch Lambda Insights [扩展](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html)。在 Lambda 函数上为支持的运行时启用此扩展时，它收集系统级指标，并为每次调用该 Lambda 函数发出一个性能日志事件。CloudWatch 使用嵌入式指标格式从日志事件中提取指标。有关更多信息，请参阅[使用 AWS Lambda 扩展](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html)。

Lambda Insights 层扩展 `/aws/lambda-insights/` 日志组的 `CreateLogStream` 和 `PutLogEvents`。

## 定价
<a name="monitoring-insights-pricing"></a>

当您为 Lambda 函数启用 Lambda Insights 时，Lambda Insights 会为每个函数报告 8 个指标，每个函数调用都会向 CloudWatch 发送约 1KB 的日志数据。您只需为 Lambda Insights 报告的函数指标和日志付费。无最低费用或强制性服务使用政策。如果未调用该函数，则不需要为 Lambda Insights 付费。有关定价示例，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

## 支持的运行时
<a name="monitoring-insights-runtimes"></a>

您可以将 Lambda Insights 与支持 [Lambda 扩展](runtimes-extensions-api.md)的任何运行时一起使用。

## 在 Lambda 控制台中启用 Lambda Insights
<a name="monitoring-insights-enabling-console"></a>

您可以对新函数和现有 Lambda 函数启用 Lambda Insights 增强监控功能。在 Lambda 控制台中为支持的运行时针对函数启用 Lambda Insights 时，Lambda 将 Lambda Insights [扩展](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html)作为层添加到函数中，并进行验证或尝试以将 [https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy$jsonEditor](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy$jsonEditor) 策略附加到函数的[执行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。

**在 Lambda 控制台中启用 Lambda Insights**

1. 打开 Lamba 控制台的[函数页面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 选择您的函数。

1. 选择 **Configuration** 选项卡。

1. 在左侧菜单中，选择**监控和操作工具**。

1. 在**其他监控工具**窗格中，选择**编辑**。

1. 在 **CloudWatch Lambda Insights** 下，启用**增强监控**。

1. 选择**保存**。

## 以编程方式启用 Lambda Insights
<a name="monitoring-insights-enabling-programmatically"></a>

还可以使用 AWS Command Line Interface (AWS CLI)、AWS Serverless Application Model (SAM) CLI、CloudFormation 或 AWS Cloud Development Kit (AWS CDK) 启用 Lambda Insights。以编程方式在函数上为支持的运行时启用 Lambda Insights 时，CloudWatch 将 [https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy$jsonEditor](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy$jsonEditor) 策略附加到函数的 [执行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。

有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的 [Lambda Insights 入门](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-Getting-Started.html)。

## 使用 Lambda Insights 控制面板
<a name="monitoring-insights-multifunction"></a>

在 CloudWatch 控制台中，Lambda Insights 控制面板有两个视图：多函数概览和单函数视图。多函数概览聚合当前AWS账户和区域中 Lambda 函数的运行时指标。单函数视图显示单个 Lambda 函数的可用运行时指标。

您可以使用 CloudWatch 控制台中的 Lambda Insights 控制面板多函数概览来识别过度利用和未充分利用的 Lambda 函数。您可以使用 CloudWatch 控制台中的 Lambda Insights 控制面板单函数视图对单个请求进行故障排除。

**查看所有函数的运行时指标**

1. 在 CloudWatch 控制台中打开[多函数](https://console.aws.amazon.com/cloudwatch/home#lambda-insights:performance)页面。

1. 从预定义的时间范围中进行选择，或选择自定义时间范围。

1. （可选）选择 **Add to dashboard（添加到控制面板）**以将小组件添加到 CloudWatch 控制面板。  
![\[Lambda Insights 控制面板上的多函数概览。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-multifunction-view.png)

**查看单个函数的运行时指标**

1. 在 CloudWatch 控制台中打开[单函数](https://console.aws.amazon.com/cloudwatch/home#lambda-insights:functions)页面。

1. 从预定义的时间范围中进行选择，或选择自定义时间范围。

1. （可选）选择 **Add to dashboard（添加到控制面板）**以将小组件添加到 CloudWatch 控制面板。  
![\[Lambda Insights 控制面板上的单函数视图。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambainsights-singlefunction-view.png)

有关更多信息，请参阅[在 CloudWatch 控制面板上创建和使用小组件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-and-work-with-widgets.html)。

## 检测函数异常的工作流程示例
<a name="monitoring-insights-anomalies"></a>

您可以使用 Lambda Insights 控制面板上的多函数概览来识别和检测函数的计算内存异常。例如，如果多函数概述指示函数正在使用大量内存，则可以在**内存使用情况**窗格中查看详细的内存利用率指标。然后，您可以转到“指标”控制面板以启用异常检测或创建警报。

**为函数启用异常检测**

1. 在 CloudWatch 控制台中打开[多函数](https://console.aws.amazon.com/cloudwatch/home#lambda-insights:performance)页面。

1. 在**函数摘要**下，选择函数的名称。

   单函数视图随即打开，其中包含函数运行时指标。  
![\[Lambda Insights 控制面板上的函数摘要窗格。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-function-summary.png)

1. 在**内存使用情况**窗格中，选择三个竖直的点，然后选择**在指标中查看**，以打开**指标**控制面板。  
![\[内存使用情况窗格上的菜单。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-memory-usage.png)

1. 在**绘成图表的指标**选项卡的**操作**列中，选择第一个图标以便为函数启用异常检测。  
![\[Memory Usage（内存使用情况）窗格的 Graphed metrics（绘成图表的指标）选项卡。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-graphed-metrics.png)

有关更多信息，请参阅[使用 CloudWatch 异常检测](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html)。

## 使用查询排除函数故障的示例工作流程
<a name="monitoring-insights-queries"></a>

您可以使用 Lambda Insights 控制面板上的单函数视图来识别函数持续时间峰值的根本原因。例如，如果多函数概述指示函数持续时间大幅增加，则可以暂停或选择**持续时间**窗格中的每个函数，以确定导致增加的函数。然后，您可以转到单函数视图并查看**应用程序日志**以确定根本原因。

**对函数运行查询**

1. 在 CloudWatch 控制台中打开[多函数](https://console.aws.amazon.com/cloudwatch/home#lambda-insights:performance)页面。

1. 在**持续时间**窗格中，选择要筛选持续时间指标的函数。  
![\[在持续时间窗格中选择的函数。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-choose-function.png)

1. 打开[单函数](https://console.aws.amazon.com/cloudwatch/home#lambda-insights:functions)页。

1. 选择**按函数名称筛选指标**下拉列表，然后选择您的函数。

1. 要查看**最近 1000 个应用程序日志**，请选择**应用程序日志**选项卡。

1. 查看**时间戳**和**消息**，以确定要进行故障排除的调用请求。  
![\[最近 1000 个应用程序日志。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-application-logs.png)

1. 要显示**最近 1000 次调用**，请选择**调用**选项卡。

1. 对于要排除故障的调用请求选择**时间戳**或**消息**。  
![\[选择最近的调用请求。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-invocations-function-select.png)

1. 选择**查看日志**下拉列表，然后选择**查看性能日志**。

   将在 **Logs Insights** 控制面板中打开为您的函数自动生成的查询。

1. 选择**运行查询**以便为调用请求生成**日志**消息。  
![\[在 Logs Insights 控制面板中查询选定的函数。\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/lambdainsights-query.png)

## 接下来做什么？
<a name="monitoring-console-next-up"></a>
+ 参阅 *Amazon CloudWatch 用户指南*中的[创建控制面板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create_dashboard.html)，了解如何创建 CloudWatch Logs 控制面板。
+ 参阅 *Amazon CloudWatch 用户指南*中的[添加查询到控制面板或导出查询结果](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_ExportQueryResults.html)，了解如何添加查询到 CloudWatch Logs。