监控 AWS Lambda Node.js 函数
编辑监控 AWS Lambda Node.js 函数编辑
Node.js APM 代理可以与 AWS Lambda 一起使用,以监控 AWS Lambda 函数的执行。
快速入门编辑
要开始为您的 Node.js AWS Lambda 函数使用 APM,请按照以下步骤操作。
先决条件编辑
您需要一个 APM 服务器来发送 APM 数据。如果您还没有设置,请按照 APM 快速入门 进行操作。为了获得最佳性能,我们建议在与 AWS Lambda 函数相同的 AWS 区域中在 Elastic Cloud 上设置 APM。
步骤 1:选择 AWS 区域和架构编辑
从 此版本表中为 APM Lambda 扩展层选择正确的 ARN。
此外,从 此版本表中为 APM 代理层选择正确的 ARN。
选择的*AWS 区域*和*架构*必须与 AWS Lambda 函数的 AWS 区域和架构相匹配!
步骤 2:将 APM 层添加到您的 Lambda 函数中编辑
Elastic APM AWS Lambda 扩展 和 Node.js APM 代理都作为 AWS Lambda 层 添加到您的 Lambda 函数中。因此,您需要将相应的层 ARN(标识符)添加到您的 Lambda 函数中。
要通过 AWS 管理控制台将层添加到您的 Lambda 函数中
- 在 AWS 管理控制台中导航到您的函数
- 滚动到“层”部分,然后单击*添加层*按钮
- 选择*指定 ARN*单选按钮
- 在*指定 ARN*文本输入中复制并粘贴以下 Elastic APM AWS Lambda 扩展层和 APM 代理层的 ARN
APM 扩展层
EXTENSION_ARN
APM 代理层
AGENT_ARN - 单击*添加*按钮
要通过 AWS 命令行界面添加 Elastic APM AWS Lambda 扩展和 APM 代理的层 ARN,请执行以下命令
aws lambda update-function-configuration --function-name yourLambdaFunctionName \ --layers EXTENSION_ARN \ AGENT_ARN
在您的 SAM template.yml
文件中,按如下方式添加 Elastic APM AWS Lambda 扩展和 APM 代理的层 ARN
... Resources: yourLambdaFunction: Type: AWS::Serverless::Function Properties: ... Layers: - EXTENSION_ARN - AGENT_ARN ...
在您的 serverless.yml
文件中,按如下方式将 Elastic APM AWS Lambda 扩展和 APM 代理的层 ARN 添加到您的函数中
... functions: yourLambdaFunction: handler: ... layers: - EXTENSION_ARN - AGENT_ARN ...
要将 Elastic APM AWS Lambda 扩展和 APM 代理添加到您的函数中,请将 ARN 添加到 Terraform 文件中的 layers
属性中
... resource "aws_lambda_function" "your_lambda_function" { ... layers = ["EXTENSION_ARN", "AGENT_ARN"] } ...
要将 Elastic APM AWS Lambda 扩展和 APM 代理添加到您的基于容器的函数中,请按如下方式扩展函数镜像的 Dockerfile
FROM docker.elastic.co/observability/apm-lambda-extension-IMAGE_ARCH:latest AS lambda-extension AGENT_IMPORT # FROM ... <-- this is the base image of your Lambda function COPY --from=lambda-extension /opt/elastic-apm-extension /opt/extensions/elastic-apm-extension AGENT_COPY # ...
步骤 3:在 AWS Lambda 上配置 APM编辑
Elastic APM AWS Lambda 扩展和 APM Node.js 代理是通过 AWS Lambda 函数上的环境变量进行配置的。
对于最小配置,您需要*APM 服务器 URL*来设置 APM 数据的目标位置,以及一个*APM 密钥*。如果您更喜欢使用 APM API 密钥 而不是 APM 密钥,请在以下配置中使用 ELASTIC_APM_API_KEY
环境变量而不是 ELASTIC_APM_SECRET_TOKEN
。
对于生产环境,我们建议使用 AWS Secrets Manager 存储您的 APM 身份验证密钥,而不是在环境变量中以明文形式提供密钥值。
要通过 AWS 管理控制台配置 APM
- 在 AWS 管理控制台中导航到您的函数
- 单击*配置*选项卡
- 单击*环境变量*
- 添加以下必需变量
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
要通过 AWS 命令行界面配置 APM,请执行以下命令
在您的 SAM template.yml
文件中,配置以下环境变量
在您的 serverless.yml
文件中,配置以下环境变量
在您的 Terraform 文件中,配置以下环境变量
为 AWS Lambda 函数配置的环境变量将传递给运行 lambda 函数的容器。您可以使用其他选项之一(通过 AWS Web 控制台、AWS CLI 等)来配置以下环境变量
|
您可以选择微调 Node.js 代理 或 Elastic APM AWS Lambda 扩展的配置。
就是这样。完成上述步骤后,您就可以开始了!您的 Lambda 函数调用现在应该会被跟踪。
功能编辑
AWS Lambda 检测将为所有函数调用报告一个事务,并跟踪任何 受支持的模块。此外,创建的事务将为许多 Lambda 触发器类型捕获额外的数据 - API 网关、SNS、SQS、S3(当触发器是单个事件时)和 ELB。
对于因超时、崩溃、uncaughtException
或 unhandledRejection
而失败的 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 代理检测。