监控 AWS Lambda Java 函数编辑

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

Note: The Centralized Agent Configuration on the Elasticsearch APM currently does NOT support AWS Lambda.

快速入门编辑

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

先决条件编辑

  1. 您需要一个 APM 服务器来发送 APM 数据。如果您尚未设置,请按照 APM 快速入门 操作。为了获得最佳性能,我们建议在与 AWS Lambda 函数相同的 AWS 区域的 Elastic Cloud 上设置 APM。
  2. 确保您使用的是受支持的 AWS Lambda Java 运行时之一

    标签 Java 运行时 操作系统 支持

    11

    Java 11 (Corretto)

    Amazon Linux 2

    8.al2

    Java 8 (Corretto)

    Amazon Linux 2

    8

    Java 8 (OpenJDK)

    Amazon Linux 2018.03

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

APM Lambda 扩展层发布表 中选择正确的 ARN。

此外,从 APM 代理层发布表 中选择正确的 ARN。

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

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

步骤 2:将 APM 层添加到 Lambda 函数编辑

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

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

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

步骤 3:在 AWS Lambda 上配置 APM编辑

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

对于最小配置,您将需要 APM 服务器 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. 添加以下必需变量
AWS_LAMBDA_EXEC_WRAPPER       = /opt/elastic-apm-handler  # 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                

Java environment variables configuration section in AWS Console

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

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

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

继续阅读以了解有关 Java APM 代理在 AWS Lambda 函数上的功能和限制的更多信息。

功能和注意事项编辑

AWS Lambda 作为运行时,其行为与传统运行时不同。虽然大多数 APM 和监控概念适用于 AWS Lambda,但有一些差异和限制需要注意。

性能监控编辑

Elastic APM 会自动测量 lambda 函数执行的性能。它会记录数据库查询、外部 HTTP 请求以及执行期间发生的其它缓慢操作的跟踪。

默认情况下,代理将跟踪 通常支持的技术。要跟踪其它事件,请查看 其它方法跟踪选项,但请注意,由于其异步性质,基于采样的分析器 不是 AWS Lambda 的有效选项。

错误监控编辑

每当您的函数处理程序方法抛出 Exception 时,代理都会将错误事件发送到 APM 服务器,并且相应的交易将被记录为失败的交易。与跟踪的跨度相关的错误也将被发送。

注意事项编辑

  • Lambda 函数不会收集系统和自定义指标。这是因为大多数指标都无关紧要,并且基于间隔的事件发送模型不适合 FaaS 环境。
  • 中央配置已禁用,这意味着无法更改 APM 代理配置,除非重新定义 lambda 环境变量或 APM 代理设置。
  • 安装代理后,冷启动可能会明显变慢。如果这是一个问题,以下是一些处理代码启动缓慢的方法

    • 如果唯一的问题是冷启动导致 Lambda 超时,请考虑增加配置的超时时间。
    • 您为函数允许的内存限制越高,这种影响就越小。这与后续函数调用无关,只与冷启动有关。
    • 启动延迟的很大一部分与启用的检测数量有关。启用的检测将导致这种开销,无论它是否适用于您的特定 Lambda 函数。您可以通过 enable_instrumentations 配置指定有限的启用检测列表,从而大幅减少相关开销。一种自动生成此列表的方法是使用代理的默认配置和 log_levelINFO 或更低的值调用您的 Lambda。在第一次 lambda 调用后,代理将记录一条格式为 Used instrumentation groups: [aws-lambda, executor, executor-collection, fork-join, ssl-context, urlconnection] 的消息。
  • 基于采样的探查器 功能将无法使用,因为它依赖于探查会话和随后对收集数据的异步处理。