监控 AWS Lambda Node.js 函数

编辑

Node.js APM 代理可与 AWS Lambda 一起使用,以监控 AWS Lambda 函数的执行。

快速入门

编辑

要开始使用 Node.js AWS Lambda 函数的 APM,请按照以下步骤操作。

先决条件

编辑

您需要一个 APM Server 来发送 APM 数据。如果您尚未设置 APM Server,请按照 APM 快速入门进行设置。为了获得最佳性能,我们建议在与 AWS Lambda 函数相同的 AWS 区域中设置 Elastic Cloud 上的 APM。

步骤 1:选择 AWS 区域和架构

编辑

此版本表中为 APM Lambda 扩展层选择正确的 ARN。

此外,从 此版本表中为 APM 代理层选择正确的 ARN。

选择您的 Lambda 函数的 AWS 区域和架构。本文档将根据您的选择进行更新。
区域
架构

所选的 *AWS 区域* 和 *架构* 必须与您的 AWS Lambda 函数的 AWS 区域和架构匹配!

步骤 2:将 APM 层添加到您的 Lambda 函数

编辑

Elastic APM AWS Lambda 扩展和 Node.js APM 代理都作为 AWS Lambda 层添加到您的 Lambda 函数。因此,您需要将相应的层 ARN(标识符)添加到您的 Lambda 函数。

要通过 AWS 管理控制台将层添加到您的 Lambda 函数

  1. 在 AWS 管理控制台中导航到您的函数
  2. 滚动到“层”部分,然后单击“添加层”按钮 AWS 控制台中层配置部分的图像
  3. 选择“指定 ARN”单选按钮
  4. 复制并粘贴 Elastic APM AWS Lambda 扩展层和 APM 代理层的以下 ARN 到“指定 ARN”文本输入中
    APM 扩展层
    EXTENSION_ARN
    APM 代理层
    AGENT_ARN AWS 控制台中选择层的图像
  5. 单击“添加”按钮

步骤 3:在 AWS Lambda 上配置 APM

编辑

Elastic APM AWS Lambda 扩展和 APM Node.js 代理通过 AWS Lambda 函数上的环境变量进行配置。

对于最小配置,您将需要 *APM Server URL* 来设置 APM 数据的目标,以及一个 *APM 密钥令牌*。如果您喜欢使用 APM API 密钥而不是 APM 密钥令牌,请在以下配置中使用 ELASTIC_APM_API_KEY 环境变量,而不是 ELASTIC_APM_SECRET_TOKEN

对于生产环境,我们建议使用 AWS Secrets Manager 来存储您的 APM 身份验证密钥,而不是在环境变量中以纯文本形式提供密钥值。

要通过 AWS 管理控制台配置 APM

  1. 在 AWS 管理控制台中导航到您的函数
  2. 单击“配置”选项卡
  3. 单击“环境变量”
  4. 添加以下必需变量
NODE_OPTIONS                  = -r elastic-apm-node/start # use this exact fixed value
ELASTIC_APM_LAMBDA_APM_SERVER = <YOUR-APM-SERVER-URL>     # this is your APM Server URL
ELASTIC_APM_SECRET_TOKEN      = <YOUR-APM-SECRET-TOKEN>   # this is your APM secret token
ELASTIC_APM_SEND_STRATEGY     = background                

Node.js environment variables configuration section in AWS Console

ELASTIC_APM_SEND_STRATEGY 定义何时将 APM 数据发送到您的 Elastic APM 后端。为了减少 lambda 函数的执行时间,我们建议在具有稳定负载场景的生产环境中使用 background 策略。

您可以选择微调 Node.js 代理Elastic APM AWS Lambda 扩展的配置

就是这样。按照上述步骤操作后,您就可以开始了!从现在开始,应该跟踪您的 Lambda 函数调用。

功能

编辑

AWS Lambda 仪表将为所有函数调用报告事务,并跟踪任何支持的模块。此外,创建的事务将为许多 Lambda 触发器类型捕获其他数据,包括 API 网关、SNS、SQS、S3(当触发器是单个事件时)和 ELB。

对于因超时、崩溃、uncaughtExceptionunhandledRejection 而失败的 Lambda 调用,将报告事务。(这需要 APM 代理 v3.45.0 或更高版本以及Elastic 的 APM Lambda 扩展版本 1.4.0 或更高版本。)

注意事项和故障排除

编辑
  • 不为 Lambda 函数收集系统和自定义指标。这既是因为其中大多数不相关,也是因为基于间隔的事件发送模型不适合 FaaS 环境。
  • APM 代理尚不支持使用 ECMAScript 模块 (ESM) 的 Lambda 处理程序模块。这意味着您的处理程序文件名应以“.js”结尾(如果您的 package.json 中有 "type": "module",则不应有),或以“.cjs”结尾。使用“.mjs”后缀的处理程序文件将不会被 APM 代理检测。